个性化阅读
专注于IT技术分析

python模块介绍和操作详解 – Python入门开发教程

点击下载

上一章Python教程请查看:python函数定义和操作

模块允许你逻辑地组织Python代码,将相关代码分组到一个模块中可以使代码更容易理解和使用,模块是具有任意命名属性的Python对象,你可以绑定和引用这些属性。

简单地说模块就是由Python代码组成的文件,模块可以定义函数、类和变量,模块还可以包含可运行代码。

名为aname的模块的Python代码通常驻留在名为aname.py的文件中,下面是一个简单模块support.py的示例

def print_func( par ):
   print "Hello : ", par
   return

1、import语句

通过在其他Python源文件中执行import语句,可以将任何Python源文件用作模块,import具有以下语法

import module1[, module2[,... moduleN]

当解释器遇到import语句时,如果模块出现在搜索路径中,它就会导入模块。搜索路径是解释器在导入模块之前搜索的目录列表,例如导入support.py模块,你需要将以下命令放在脚本的顶部:

#!/usr/bin/python

# 导入support模块
import support

# 现在你可以调用定义的函数,如下所示support.print_func("Van Gogh")

不管导入模块的次数如何,模块只加载一次,这可以防止在出现多个导入时重复执行模块。

2、from…import语句

Python的from语句允许你将特定的属性从模块导入到当前名称空间,from…import有以下语法

from modname import name1[, name2[, ... nameN]]

例如要从fib模块导入函数fibonacci,可以使用以下语句

from fib import fibonacci

该语句不将整个模块fib导入当前命名空间,它只是将fib模块中的fibonacci项引入到导入模块的全局符号表中。

3、from…import*语句

也可以使用以下import语句将模块中的所有名称导入到当前名称空间中:

from modname import *

这为将模块中的所有项导入到当前名称空间提供了一种简单的方法,然而这个语句应该谨慎使用。

4、定位模块

当你导入模块时,Python解释器将按照以下顺序搜索模块

  • 当前目录。
  • 如果没有找到模块,Python将在shell变量PYTHONPATH中搜索每个目录。
  • 如果其他方法都失败,Python将检查默认路径,在UNIX上,这个默认路径通常是/usr/local/lib/python/。

模块搜索路径以sys的形式存储在系统模块sys中,即路径变量sys.path变量包含当前目录、PYTHONPATH和安装相关的默认值。

5、PYTHONPATH环境变量

PYTHONPATH是一个环境变量,由一组目录组成,PYTHONPATH的语法与shell变量PATH的语法相同。

下面是一个典型的Windows系统的python路径:

set PYTHONPATH = c:\python20\lib;

这是一个典型的来自UNIX系统的PYTHONPATH

set PYTHONPATH = /usr/local/lib/python

6、名称空间和范围

变量是映射到对象的名称(标识符),名称空间是由变量名(键)及其对应对象(值)组成的字典。

Python语句可以访问局部名称空间和全局名称空间中的变量,如果局部变量和全局变量具有相同的名称,则局部变量将对全局变量进行映射。

每个函数都有自己的本地名称空间,类方法遵循与普通函数相同的作用域规则。

Python对变量是局部变量还是全局变量进行了有根据的猜测,它假定在函数中赋值的任何变量都是局部的。

因此为了在函数中为全局变量赋值,必须首先使用全局语句。

语句global VarName告诉Python VarName是一个全局变量,Python停止搜索变量的本地命名空间。

例如我们在全局名称空间中定义了一个变量Money,在Money函数中,我们为Money赋值,因此Python假设Money是一个局部变量。但是我们在设置本地变量Money之前访问了它的值,因此结果是UnboundLocalError,取消全局语句的注释可以修复问题。

#!/usr/bin/python

Money = 2000
def AddMoney():
   # 取消注释以下行修复代码:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

7、dir()函数

内置函数dir()返回一个已排序的字符串列表,其中包含模块定义的名称。

该列表包含模块中定义的所有模块、变量和函数的名称,下面是一个简单的例子:

#!/usr/bin/python

# 导入内置math模块
import math

content = dir(math)
print content

以上打印的输出中特殊的字符串变量_name__是模块的名称,而_file__是加载模块的文件名。

8、globals()和locals()函数

可以使用globals()和locals()函数根据调用它们的位置返回全局和局部名称空间中的名称。

如果在一个函数中调用了locals(),那么它将返回可以从该函数本地访问的所有名称。

如果在函数中调用globals(),它将返回可以从该函数全局访问的所有名称。

这两个函数的返回类型都是dictionary,因此可以使用keys()函数提取名称。

9、reload()函数

当模块被导入到脚本中时,模块顶层的代码只执行一次。

因此如果希望重新执行模块中的顶级代码,可以使用reload()函数,函数的作用是:再次导入先前导入的模块,reload()函数的语法是这样的:

reload(module_name)

这里module_name是要重新加载的模块的名称,而不是包含模块名称的字符串。例如要重新加载hello模块,请执行以下操作:

reload(hello)

10、Python中的包

包是一个分层的文件目录结构,它定义了一个由模块、子包和子子包等组成的Python应用程序环境。

考虑phone目录中提供的一个文件pots .py,这个文件有以下一行源代码

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

类似地我们还有另外两个文件,它们具有不同的功能,但名称相同

  • 具有Isdn()函数的phone/Isdn.py文件
  • 具有函数G3()的phone/G3.py文件

现在在phone目录下创建另一个文件_init_ .py: phone/ __init__ . py

要在导入Phone时使所有功能可用,你需要在_init_ .py中放入显式的导入语句,如下所示

from Pots import Pots
from Isdn import Isdn
from G3 import G3

在你将这些行添加到_init__.py之后,当你导入phone包时,所有这些类都是可用的。

#!/usr/bin/python

# 导入phone包
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

在上面的示例中,我们以每个文件中的单个函数为例,但是你可以在文件中保留多个函数。你还可以在这些文件中定义不同的Python类,然后可以根据这些类创建包。

赞(0)
未经允许不得转载:srcmini » python模块介绍和操作详解 – Python入门开发教程

评论 抢沙发

评论前必须登录!