Python - 模块语句

Python - 模块语句 首页 / Python2入门教程 / Python - 模块语句

模块使您可以逻辑地组织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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

从0开始学架构 -〔李运华〕

深入剖析Kubernetes -〔张磊〕

SQL必知必会 -〔陈旸〕

JavaScript核心原理解析 -〔周爱民〕

Redis核心技术与实战 -〔蒋德钧〕

程序员的测试课 -〔郑晔〕

网络排查案例课 -〔杨胜辉〕

反爬虫兵法演绎20讲 -〔DS Hunter〕

高并发系统实战课 -〔徐长龙〕

好记忆不如烂笔头。留下您的足迹吧 :)