Python 导入本地脚本
脚本是一段以实现一些功能的代码块,通过封装代码方便调用,以解决一类问题。
一般这类脚本也称为模块,如 Python 内置的标准库模块。
Tip
模块的导入方法类似,可参见 导入模块。
一般是导入的脚本与当前脚本位于同一个目录下,在关键字 import 后只需填入文件名,无需扩展名 .py
Announce
脚本:
将代码整理成后缀为 .py 的文件可以通过导入重复利用这些的代码以提高效率
python
import useful_functions as uf
# 访问导入模块的对象
uf.add_five([1, 2, 3, 4])
import语句写在代码块最顶部,每个导入语句各占一行。import语句会创建一个模块对象,包含定义和语句的 Python 文件。- 可通过关键字
as为导入模块添加别名,后面的代码中可用别名引用它。 - 要访问导入模块中的对象,需要使用点记法。
if main语句
if __name__ == '__main__' 语句可以控制脚本区分导入和运行的情况,依据所需执行脚本中的代码。
该语句使用了一个特殊变量,该变量名称以两个下划线字符 __ 开头和结尾,一般称这种变量为 Dunder 变量 表示双下划线
当脚本中中含有可执行的语句时,(实际上当脚本导入到 Python 时,该脚本默认执行,而导入脚本是为了可以在后面的代码中引用脚本中的函数)为了避免导入时也运行脚本中的一些可执行语句,可以使用 if main 块将这些可执行的语句(缩进)封装在 if __name__ == "__main__" 块中(或将代码包含在函数 main() 中再封装在 if __name__ == "__main__" 块中)
脚本 useful_functions.py
py
# 定义了两个函数
def mean(num_list):
return sum(num_list) / len(num_list)
def add_five(num_list):
return [n + 5 for n in num_list]
# 将用于测试的可执行语句放在 main() 函数中
def main():
print("Testing mean function")
n_list = [34, 44, 23, 46, 12, 24]
correct_mean = 30.5
assert(mean(n_list) == correct_mean)
print("Testing add_five function")
correct_list = [39, 49, 28, 51, 17, 29]
assert(add_five(n_list) == correct_list)
print("All tests passed!")
# 使用 if main 块控制主程序中的可执行语句的运行
if __name__ == '__main__':
main()
程序 demo.py
py
# 导入 useful_functions 脚本
import useful_functions as uf
scores = [88, 92, 79, 93, 85]
mean = uf.mean(scores)
curved = uf.add_five(scores)
mean_c = uf.mean(curved)
print("Scores:", scores)
print("Original Mean:", mean, " New Mean:", mean_c)
print(__name__)
print(uf.__name__)
if main 块可以控制脚本代码中可执行语句的运行情况
- 每当使用脚本时,Python 会为所有模块设置一个特殊的内置变量
__name__ - 当运行脚本时(如在交互模式下输入
>>> python useful_functions.py),Python 会将此模块识别为主程序,并将此模块的__name__设为字符串"__main__",则此时 if 语句为True而运行该代码块中的可执行语句 - 当导入脚本时(如以导入模块的方式使用
import useful_functions),Python 会将此这个Dunder变量__name__设为该模块名称(而非"__main__"),由于 if 语句为False不运行该代码块中的可执行语句 - 通过条件语句
if __name__ == "__main__"会检查该模块是否为主程序,以判断是否运行代码中的可执行语句。