模块使您可以逻辑地组织Python代码。将相关代码分组到一个模块中可以使代码更易于理解和使用。
名为 aname 的模块的Python代码通常位于名为 aname.py 的文件中。这是一个简单模块support.py的示例
def print_func( par ): print "Hello : ", par return
Import 语句
您可以通过在其他一些Python源文件中执行import语句,将任何Python源文件用作模块。 import 具有以下语法-
import module1[, module2[,... moduleN]
当解释器遇到import语句时,如果模块在搜索路径中存在,它将导入模块。如要导入模块support.py,您需要在脚本顶部放置以下命令-
#!/usr/bin/python # 导入support模块 import support # 现在您可以按如下方式调用该模块的定义函数 support.print_func("Learnfk")
执行以上代码后,将产生以下输出-
Hello : Learnfk
from...import 语句
使用Python的 from 语句,您可以将模块中的特定属性导入当前名称空间。 from ... import 具有以下语法-
from modname import name1[, name2[, ... nameN]]
如,要从模块fib导入函数fibonacci,请使用以下语句-
from fib import fibonacci
该语句不会将整个模块fib导入当前名称空间;它只是将fib模块中的fibonacci项引入到导入模块的全局符号表中。
from...import * 语句
也可以使用以下import语句将所有数据从模块导入到当前名称空间中-
from modname import *
这提供了一种将所有项目从模块导入当前名称空间的简便方法。但是,应谨慎使用此语句。
Locating 模块
导入模块时,Python解释器按以下顺序搜索模块-
当前目录。
如果未找到模块,Python将在Shell程序变量PYTHONPATH中搜索每个目录。
如果所有其他方法均失败,Python将检查默认路径。在UNIX上,此默认路径通常为/usr/local/lib/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
命名空间和作用域
如,无涯教程在全局名称空间中定义变量 Money 。在函数 Money 中,为 Money 分配了一个值,因此Python假定 Money 为局部变量。但是在设置之前访问了局部变量 Money 的值,因此输出为UnboundLocalError。取消注释全局语句即可解决该问题。
#!/usr/bin/python Money=2000 def AddMoney(): # 取消注释以下行以修复代码: # 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(),它将返回所有可以从该函数全局访问的名称。
Reload() 函数
将模块导入脚本时,模块顶级部分中的代码仅执行一次。
因此,如果您想重新执行模块中的顶级代码,则可以使用 reload()函数。 reload()函数再次导入以前导入的模块。 reload()函数的语法如下:
reload(module_name)
在这里, module_name 是您要重新加载的模块的名称,而不是包含模块名称的字符串。如,要重新加载 hello 模块,请执行以下操作-
reload(hello)
Python 软件包
程序包是一种分层的文件目录结构,它定义了一个单独的Python应用程序环境,该环境由模块,子程序包和子子程序包等组成。
考虑在 Phone 目录中可用的文件 Pots.py 。该文件具有以下源代码行-
#!/usr/bin/python def Pots(): print "I'm Pots Phone"
类似地,还有另外两个文件,它们具有不同的功能,其名称与上面相同-
Phone/Isdn.py 拥有 Isdn函数。
Phone/G3.py 拥有G3函数
现在,在 Phone 目录中再创建一个文件__init__.py
- Phone/__ init__.py
要在导入Phone时使所有功能可用,您需要在__init__.py中放入显式import语句,如下所示:
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
参考链接
https://www.learnfk.com/python/python-modules.html
标签:__,教程,Python,无涯,Phone,导入,模块,import From: https://blog.51cto.com/u_14033984/7234151