a = 'a'
print('我是script a')
print(a)
import script_a
b = 'b'
print('我是script b')
print(b)
a = 'a'
print('我是script a')
if __name__ == "main":
print(a)
import script_a
b = 'b'
print('我是script b')
print(b)
- 现在有A.py和 B.py两个脚本文件
- A.py
- B.py
- 在B中import A
- import A这个动作, 意味着导入并执行A里面的每一行(所有)代码.
- 因此会导致一个问题: 有些时候, 我并不希望B在引入A时, 去执行A的所有代码.
- 为了解决问题, python里允许你使用条件检测, 它基于以下机制
- __name__ 是语言预置的变量
- 如果A.py被导入, 则它的__name__ 的值为文件名A
- 如果A.py被直接执行, 则它的__name__ 的值为 “__main__”
- 因此, 对于A里面, 被导入到B时, 不希望被执行的代码可以放到 if __name__ == “__main__”:里面去. 因为此时条件不成立, __name__ == “A”, 而不是”__main__”
这其实是个非常自然而然的事情, 但最近有初学的朋友问到这问题. 以及另外相关的奇怪问题:
- 为什么 “我并不希望B在引入A时, 去执行A的所有代码.”? 这种逻辑在需求中是常见的.
- 为什么会有”__name__” 和 “__main__” 这种看起来很奇怪的东西? 这是语言设计者设计出来, 就像人类设计数字来计数一样. 这是个哲学问题和喜好问题. 不是个编程问题.
print(a) 没有被执行
本站文章除单独注明外均为原创,本文链接https://bowmanjin.com/422,未经允许请勿转载。
请先
!