Python函数调用不同?

问题描述:

当我用下面的方法调用函数,Python函数调用不同?

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

python不是C:检查这篇文章的一些更多的澄清以及http://stackoverflow.com/questions/1590608/is-it-possible-to-forward-declare-a-function-in-python –

+0

@SamueleMattiuzzo,这是允许在C? – soon

+0

是的它被称为原型:http://en.wikipedia.org/wiki/Function_prototype#Uses –

Python从上到下执行源文件。在执行def method_a(): ...之前,该方法没有被定义,这会创建它。

在你的情况(Python的+主线程),该代码被执行sequentially

顺序代码装置,它是由一个单一的线程访问,在 顺序的指令外观。这意味着一个线程 只能按特定顺序执行代码,因此它是顺序的。其他的事情是并发代码,多个线程可能同步访问相同的代码。编程需要特别小心, 因为多线程会带来安全风险和不一致风险。

在你的例子中,method_a()在调用(使用)它之前必须存在(被定义),因为你正在程序的主线程中运行。

注意:这里你必须区分定义(在解释时间)和执行(在运行时)。 Python首先解释,然后执行......(请参阅LtWorf的答案)。

在第一种情况下创建的,因此Python解释器认为它不存在之前调用该方法

...

但它已经创建的第二个(其定义是Python的任期虽然)然后被调用,所以Python成功执行它!

一两件事,在这里明白的是,Python解释器解释从上到下

它的工作原理是这样的代码:

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才会在字典内被搜索,在这种情况下,它会在那里,因为它被定义为正确的后。