我正在学习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
但是,它报告NameError:
In [87]: run test.py
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
NameError: name 'add' is not defined
将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
我对先前案件失败的原因感到困惑。
if __name__ == "__main__":
调用main
,main
调用添加。
答案 0 :(得分:5)
一切都在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?!
在下面的示例中,add
是在执行main
之前定义的,因此main
知道调用x = add(a, b)
时该怎么做。
答案 1 :(得分:5)
Python从文件中读取代码行时,可以有效地运行代码行。 (不是真正的,但是出于这个问题的目的,它的作用好像是这样。)因此,当这段代码运行时:
if __name__ == "__main__":
main()
在您的第一个代码示例中,add
函数尚未定义。只有在Python遇到def add(...):
块时才会发生这种情况。由于main()
调用add()
,Python抱怨使用了未定义的名称(add
)。
如果在调用def add(...):
之前将main()
块向上移动,则add()
的定义发生在main()
运行之前,因此一切都很好。