贡献者: addis
有时候我们希望同一个 .py
文件既可以作为脚本直接执行也可以作为模块被导入,并且希望该文件可以根据这两种方式自动选择执行什么。这时可以用 __name__
来判断:
#!/usr/bin/python3
# 执行一些命令(无论作为脚本还是模块都会被运行)
# 被赋值的变量会作为模块的全局变量, 定义的函数会作为模板中的函数
print('欢迎使用 my_module.py')
def plus1(num):
return num + 1
num = 3.5
num2 = plus1(num)
if __name__ == '__main__':
# 脚本模式下运行的命令
print('正在被作为脚本执行, __name__ 的值为 __main__')
else:
# 作为模块导入时运行的命令
print('正在被作为模块导入, __name__ 的值为', __name__)
若运行 ./my_module.py
或者 python3 my_module.py
或者 python3 -m my_module
,就会得到(-m
选项把模块作为脚本运行)
欢迎使用 my_module.py
正在被作为脚本执行, __name__ 的值为 __main__
若在同目录下进入 python3 运行 import my_module
(或者 import my_module as 其他名字
),就会得到
欢迎使用 my_module.py
正在被作为模块导入, __name__ 的值为 my_module
再来写另一个模块调用上面的模块
#!/usr/bin/python3
print('欢迎使用 my_module2.py')
def plus2(num):
return num + 2
if __name__ == '__main__':
# 脚本模式下运行的命令
print('正在被作为脚本执行, __name__ 的值为 __main__')
else:
# 作为模块导入时运行的命令
print('正在被作为模块导入, __name__ 的值为', __name__)
import my_module
在同目录打开命令行,运行
>>> import my_module2
欢迎使用 my_module2.py
正在被作为模块导入, __name__ 的值为 my_module2
欢迎使用 my_module.py
正在被作为模块导入, __name__ 的值为 my_module
>>> my_module2.plus2(2)
4
>>> my_module2.my_module.plus1(2)
3
>>> my_module2.my_module.plus1.__module__
'my_module'
>>> my_module2.plus2.__module__
'my_module2'
# fun.__globals__['__file__'] 可以查看一个函数是在哪个文件中定义的(不能是 builtin 函数)。
>>> my_module2.plus2.__globals__['__file__']
'/mnt/c/Users/addis/Desktop/my_module2.py'
>>> my_module2.my_module.plus1.__globals__['__file__']
'/mnt/c/Users/addis/Desktop/my_module.py'
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利