我正在学习main并使用代码探索其应用程序:
a = 1
b = 2
def main():
x = add(a, b)
print(x)
if __name__ == "__main__":
main()
def add(a, b):
a = a + 1
return a + b
Run Code Online (Sandbox Code Playgroud)
但是,它报告NameError:
In [87]: run test.py
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
NameError: name 'add' is not defined
Run Code Online (Sandbox Code Playgroud)
重新定位if __name__ == "__main__": 到最终是一个解决方案,
a = 1
b = 2
def main():
x = add(a, b)
print(x)
def add(a, b):
a = a + 1
return a + b
if __name__ == "__main__":
main()
In [88]: run test.py
4
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么前一个案例失败了.
if __name__ == "__main__":调用main,main调用add.
一切都是在Python中按顺序完成的,从上到下.
a = 1 # assigns 1 -> a
b = 2 # assigns 2 -> b
def main(): # main is defined
# body of main, not executed until it's called.
if __name__ == "__main__": # it does! Let's enter the block
main() # let's run main, so we have to look back at that block we skipped earlier...
# from above
x = add(a, b) # call add....oh wait -- WHAT'S add?!
Run Code Online (Sandbox Code Playgroud)
在底部示例中,add在main执行之前定义,因此main知道在调用时要执行的操作x = add(a, b).
Python在从文件中读取代码时有效地运行代码行.(不是真的,但是出于这个问题的目的,它就像它一样.)所以当这段代码运行时:
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
在您的第一个代码示例中,该add函数尚未定义.这只有在Python遇到def add(...):块时才会发生.自从main()调用以来add(),Python抱怨使用了未定义的name(add).
当你def add(...):在调用之前移动块时main(),那么add()在main()运行之前就会发生定义,所以一切都很好.
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |