Python中,每个模块都有一个内置的变量 name,用于表示当前模块的名称。当一个Python文件被执行时,Python解释器会首先将该文件作为一个模块导入,并执行其中的代码。此时,__name__的值为模块的名称。

作用

  1. 模块可被导入也可直接执行:使一个Python脚本既可以作为一个独立的程序运行,也可以被其他脚本作为模块导入。
  2. 减少全局污染:当脚本作为模块被导入时,可以避免执行不必要的代码,提高代码的整洁度和可维护性。
  3. 测试代码:可以编写一些测试代码,只在直接运行脚本时执行,而不影响作为模块导入时的行为。

使用场景

  1. 脚本和模块分离:使脚本既可以独立运行,也可以作为模块导入。
  2. 单元测试:在脚本中编写一些测试代码,只在直接运行时执行。
  3. 初始化资源:在脚本直接运行时初始化一些资源,例如数据库连接等。

示例

假设有一个Python脚本 example.py:

import sys

def greet(name):
    print("Hello, {}!".format(name))

def main():
	# 检查命令行参数数量
    if len(sys.argv) < 2:
        print("Usage: python script.py <name>")
        sys.exit(1) # 退出程序,返回错误码1

	# 获取命令行参数中的名字
    name = sys.argv[1]
    # 调用greet函数
    greet(name)
 
# 如果此脚本被直接运行,则执行main函数
if __name__ == '__main__':
  main()

如果你直接运行这个脚本:

python example.py world

控制台会输出:Hello, World!,其中sys.argv['example.py', 'world']

作为模块导入如果你在另一个脚本中导入 example.py:

import example
example.greet("Alice")

则输出Hello, Alice!。example.py 中的 if __name__ == '__main__': 块中的代码不会被执行,因为 example.py 是作为模块被导入的,其 __name__ 的值为 'example',而不是 '__main__'

注意事项

  • 命令行参数:确保在运行脚本时提供了正确的命令行参数。
  • 错误处理:可以添加异常处理逻辑来捕获并处理可能出现的错误。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部