Python 的 __ name __ 变量及其应用

2023-05-25 17:21:29 浏览数 (2)

Python 的 __ name __ 变量及其应用

在 Python 中,每个模块(module)都有内置的 __name__ 变量,它的值取决于模块的使用方式。当模块被直接执行时,__name__ 的值是 __main__。当模块被导入时,__name__ 的值是模块的名字。

self.scope['__name__'] = '__main__'

例如,在模块 module1.py 中有:

代码语言:javascript复制
print(__name__)

如果直接执行 python module1.py,输出会是:

代码语言:javascript复制
__main__

如果在其他模块 module2.pyimport module1,输出会是:

代码语言:javascript复制
module1

利用这个特点,我们可以在模块中写一段代码来判断模块是被直接执行还是被导入,比如:

代码语言:javascript复制
python
if __name__ == '__main__':
    # 直接执行代码
else:
    # 被导入时执行代码

这个技巧常常用于编写可以导入的脚本,在导入时提供函数和变量,在直接执行时执行主程序逻辑。例如,我们编写一个模块 module_demo.py:

代码语言:javascript复制
def func():
    print('This is a function')

if __name__ == '__main__':
    print('Executed when invoked directly') 
else:
    print('Executed when imported')

如果直接执行这个模块,输出会是:

代码语言:javascript复制
Executed when invoked directly

如果在其他模块中导入这个模块,输出会是:

代码语言:javascript复制
Executed when imported

这个模块既可以被直接执行,也可以被导入使用。再举一个实际例子,我们开发一个命令行工具,一般会编写一个入口模块,比如 tool.py:

代码语言:javascript复制
def main():
    print('Tool started!')

if __name__ == '__main__':
    main()

我们还可以编写其他模块导入和使用 tool.py 中的功能,同时当直接执行 tool.py 时,入口函数 main() 被调用,命令行工具启动。__name__ 这个变量为我们实现模块的双重用途提供了可能,是 Python 中一个简单但非常有用的设计。熟练使用这个技巧可以让我们的代码更 modular, reusable 和 flexible。

总结

总之,记住:__name__ == '__main__' 表示模块被直接执行,否则模块被导入。运用这个技巧,我们可以编写既可以导入也可以直接执行的 Python 模块。

0 人点赞