文章目录
模块
模块对应Python源代码文件,在Python模块中可以自定义变量、函数和类。多个功能相似的模块(源文件)可以组成一个包(文件夹)。用户通过导入其他模块,可以使用该模块中定义的变量、函数和类,从而重用其功能。
模块API
客户端使用模块提高的函数时,无须了解其实现细节,模块和客户端之间遵循的契约称为API。
通过内置函数help()可以查看Python模块的API:
import 模块名
help(模块名)
模块创建
#在名为module1.py的文件中输入下面的def语句,并导入该文件,你将创建一个模块对象,该对象拥有一个属性名称printer,而printer引用一个函数对象。
def printer(x): #Module attribute
print(x)
模块使用
import和from语句
-
import会整体读取一个模块,之后必须借助点号".",才能获取其中的名称。
-
import语句直接列出一个或多个需要加载的模块的名称,以逗号分隔。
-
import module1 module1.printer("Hello world!") # output:Hello world!
-
-
from将会从模块中取出(或者说复制)特定的名称。
-
from会把特定名称从一个文件复制到另一个作用域,所以它可以让我们直接在脚本中使用复制后的名称,而不需要通过模块。
-
from module1 import printer printer("Hello world!") # output:Hello world!
-
-
from 语句:是特殊的from形式,当我们用*代替特定的名称时,会取得模块顶层被赋值的所有名称的副本。(py3要求只能用在一个模块文件的顶部,不能用于一个函数中)*
-
from module1 import * printer("Hello world!") # output:Hello world!
-
注意:import和from语句虽然都采用相同的导入操作。from*形式只是多了一个步骤,即把模块中所有名称复制到了进行导入的作用域中,本质上就是把一个模块的命名空间纳入另一个模块中。*只有 可以在这个上下文中工作,你不能使用模式匹配来挑选出名称的子集。
if __name__ == "__main__":
这行代码是在Python中常见的结构。它用于判断当前模块是作为主程序运行,还是作为模块导入到其他程序中。
def printer(x): #Module attribute
print(x)
def main():
print("Hello!")
if __name__ == '__main__':
main()
#output:Hello!
当一个Python模块被导入到另一个模块或脚本中时,Python解释器会将特殊变量__name__
设置为模块的名称。然而,如果一个模块作为主程序运行,解释器会将__name__
变量设置为字符串 "__main__"
。
因此,if __name__ == "__main__":
条件用于检查当前模块是否是主程序。如果是主程序,将执行条件后面的代码块。如果它被导入为模块,代码块将被跳过。
import和from是赋值语句
import和from是可执行语句,而不是编译时的声明。而且它们可以嵌套在if 测试里,只有对应的import和from语句执行后,才可以使用。
在模块中改变可变对象
和def一样,import和from都是隐式的赋值语句。
-
import将整个模块对象赋值给一个单独的名称
-
from将一个或多个名称赋值给另一个模块中的同名对象
"""smally.py""" x = 1 y = [2, 3]
from small import x, y x = 10#x不是共享的可变对象 y[0] = 10#y是共享可变对象
import small print(small.x)#output:1 print(small.y)#output:[20, 3]