包与模块
一、包(目录)
- 当函数或类等代码块保存在不同源文件中(*.py这类源文件称为模块),所有保存源文件的目录(包括init.py),称之为包。
二、模块(源文件)
- 在同一个模块文件中,要调用该模块中的函数或类等,直接调用即可,不存在包或者模块的导入问题。但是,如果要在别的模块文件中引用,则需要使用import进行导入。
-
使用import导入一个模块时,事实上是将该模块的原代码执行了一遍,为了防止别的模块在导入时重复执行代码,必须添加一个判断条件:
if _name_ == '_main_': # 本质是判断当前代码是否在当前模块中直接运行,还是在其他模块中运行 test_01()
print(_name_) # 当在当前模块中打印_name_魔术变量时,其值为_main_(字符串),如果在其他模块中应用挡墙模块,则打印的_name_是当前模块的真实名称,而非_main_
-
导入模块
import random # 直接通过import导入,只能到模块级,不能到函数或类级 print(random.choice([1,2,3,4,5])) # 可以通过form...import...导入到函数或类级,那么直接在代码中调用函数即可 from random import choice print(choice([1,2,3,4,5])) # 通常情况下,在同一个包下,可以不需要在导入时明确声名包名,但是,建议无论什么情况下把包名加上
- 避免在顶部进行两个模块之间互相循环导入
三、模块级变量
- 模块级变量(直接隶属于当前模块,与函数或类同级,可以被其他函数直接引用,即全局变量)
-
在函数中声名使用全局变量
global source # 使用global声名全局变量后,才可以正确引用到模块级变量