亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

Python - 模块

上一页下一页

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

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

示例

名为 aname 的模块的 Python 代码 通常位于名为 aname.py 的文件中 .这是一个简单模块的示例,support.py

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

导入 声明

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

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

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

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

执行上述代码时,会产生以下结果 -

Hello : Zara

一个模块只加载一次,不管它被导入多少次。如果发生多次导入,这可以防止模块执行一遍又一遍。

从...导入 声明

Python的来自 语句允许您将模块中的特定属性导入当前命名空间。 from...import 具有以下语法 -

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

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

from fib import fibonacci

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

from...import * 声明

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

from modname import *

这提供了一种将模块中的所有项目导入当前命名空间的简单方法;但是,应谨慎使用此语句。

定位模块

导入模块时,Python 解释器会按以下顺序搜索模块 -

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

PYTHONPATH 变量

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

这是来自 Windows 系统的典型 PYTHONPATH -

set PYTHONPATH = c:\python20\lib;

这是来自 UNIX 系统的典型 PYTHONPATH -

set PYTHONPATH = /usr/local/lib/python

命名空间和范围

变量是映射到对象的名称(标识符)。 命名空间 是一个变量名(键)及其对应对象(值)的字典。

Python 语句可以访问 本地命名空间 中的变量 在全局命名空间中 .如果局部变量和全局变量同名,则局部变量会隐藏全局变量。

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

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

因此,为了给函数内的全局变量赋值,必须先使用global语句。

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

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

#!/usr/bin/python

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

dir()函数

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

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

现场演示
#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)
print content

执行上述代码时,会产生以下结果 -

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

这里,特殊的字符串变量 __name__ 是模块的名称,__file__ 是加载模块的文件名。

globals()locals() 函数

globals()locals() 函数可用于返回全局和局部命名空间中的名称,具体取决于调用它们的位置。

如果从函数内部调用 locals(),它将返回可以从该函数本地访问的所有名称。

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

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

reload() 功能

将模块导入脚本时,模块顶层部分的代码只执行一次。

因此,如果要重新执行模块中的顶层代码,可以使用 reload() 功能。 reload() 函数再次导入之前导入的模块。 reload() 函数的语法是这样的 -

reload(module_name)

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

reload(hello)

Python 中的包

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

考虑一个文件 Pots.py电话中可用 目录。该文件具有以下源代码行 -

#!/usr/bin/python

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

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

现在,在 Phone 中再创建一个文件 __init__.py 目录 -

要在导入 Phone 后使所有功能可用,您需要在 __init__.py 中添加显式导入语句,如下所示 -

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

将这些行添加到 __init__.py 后,在导入 Phone 包时所有这些类都可用。

#!/usr/bin/python

# Now import your Phone Package.
import Phone

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

执行上述代码时,会产生以下结果 -

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

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


Python

  1. Python 数据类型
  2. Python 输入、输出和导入
  3. Python 运算符
  4. Python pass 语句
  5. Python 函数参数
  6. Python 模块
  7. Python字典
  8. Python 迭代器
  9. Python 闭包
  10. Python 日期时间
  11. Python时间模块
  12. Python 睡眠()