if __name__ ==“ __main__”的位置:

时间:2018-10-23 05:57:01

标签: python

我正在学习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__":调用mainmain调用添加。

2 个答案:

答案 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()运行之前,因此一切都很好。