What does if __name__ == “__main__”: do?

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)

 

 

  1. 现在有A.py和 B.py两个脚本文件
    1.  A.py
    2. B.py
  2. 在B中import A
    1. import A这个动作, 意味着导入并执行A里面的每一行(所有)代码.
  3. 因此会导致一个问题: 有些时候, 我并不希望B在引入A时, 去执行A的所有代码.
  4. 为了解决问题,  python里允许你使用条件检测, 它基于以下机制
    1. __name__ 是语言预置的变量
    2. 如果A.py被导入, 则它的__name__ 的值为文件名A
    3. 如果A.py被直接执行, 则它的__name__ 的值为 “__main__”
  5. 因此, 对于A里面, 被导入到B时, 不希望被执行的代码可以放到 if __name__ == “__main__”:里面去. 因为此时条件不成立, __name__ == “A”, 而不是”__main__”

 

这其实是个非常自然而然的事情, 但最近有初学的朋友问到这问题. 以及另外相关的奇怪问题:

  1. 为什么 “我并不希望B在引入A时, 去执行A的所有代码.”? 这种逻辑在需求中是常见的.
  2. 为什么会有”__name__” 和 “__main__” 这种看起来很奇怪的东西? 这是语言设计者设计出来, 就像人类设计数字来计数一样. 这是个哲学问题和喜好问题. 不是个编程问题.

 

print(a) 没有被执行

本站文章除单独注明外均为原创,本文链接https://bowmanjin.com/422,未经允许请勿转载。

0

评论0

请先

没有账号? 注册  忘记密码?