Python函数调用不同?

时间:2013-06-19 11:38:18

标签: python function python-2.7 methods

当我使用以下方式调用该函数时,

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 

上述两个代码有什么区别?感谢..

4 个答案:

答案 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解释器从上到下解释代码