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
上面两个代码有什么区别?谢谢..
答
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才会在字典内被搜索,在这种情况下,它会在那里,因为它被定义为正确的后。
python不是C:检查这篇文章的一些更多的澄清以及http://stackoverflow.com/questions/1590608/is-it-possible-to-forward-declare-a-function-in-python –
@SamueleMattiuzzo,这是允许在C? – soon
是的它被称为原型:http://en.wikipedia.org/wiki/Function_prototype#Uses –