当我使用以下方式调用该函数时,
method_a()
def method_a():
print "I am method A"
我从上面的代码中得到了一个错误,
Traceback (most recent call last):
File "class1.py", line 1, in <module>
method_a()
NameError: name 'method_a' is not defined
当我按照以下方式调用该函数时,
def method_a():
print "I am method A"
method_a()
我得到了正确的输出而没有上述代码中的任何错误
I am method A
上述两个代码有什么区别?感谢..
答案 0 :(得分:10)
Python从上到下执行源文件。在执行def method_a(): ...
之前,不会定义该方法,这会创建它。
答案 1 :(得分:2)
它的工作原理如下:
call_function() #Looks up in the dictionary of all the functions and executes it.
def call_function(): #Adds the function to the dictionary of all functions
print "a"
这意味着您无法在定义函数之前调用它。 但是如果你从另一个函数调用一个函数呢?
def f1():
f2()
def f2():
print "a"
为什么这样做?
它的作用是因为当你定义f1时,它不会被执行,只是添加了,所以只有当你尝试执行它时,f2才会在字典中被搜索,在这种情况下它会在那里,因为它是在它之后定义的
答案 2 :(得分:1)
在您的情况下(Python +主线程),代码执行sequentially
:
顺序代码意味着它由单个线程访问,在 说明的出现顺序。这意味着单个线程 只能按特定顺序执行代码,因此它是顺序的。该 另一件事是并发代码,多个线程可能访问相同 代码同步。编程需要特别注意, 多线程可能会带来安全风险和不一致风险。
在您的示例中,method_a()
必须存在(被定义)才能调用(使用)它,因为您在程序的主线程中运行。
注意:在这里,您必须区分定义(在解释时)和执行(在运行时)。 Python首先解释,然后执行...(参见LtWorf的回答)。
答案 3 :(得分:1)
在第一种情况下,该方法在创建之前被调用,因此python解释器认为它不存在...
但是在第二种情况下它已经被创建(虽然定义为pythonic术语)然后被调用,所以python成功执行它!
这里要理解的另一件事是python解释器从上到下解释代码