Python 导入本地脚本

python

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__" 会检查该模块是否为主程序,以判断是否运行代码中的可执行语句。

Copyright © 2025 Ben

Theme BlogiNote

Icons from Icônes