Python定义依赖于其他未定义的定义?

时间:2010-08-25 21:53:55

标签: python function definition

我不知道该怎么称呼它,所以如果有人想编辑它:继续。

def Function_A()
 print "We're going to function B!"
 Function_B()

def Function_B()
 print "We made it!'

这是一个初学者的问题,但我没有想到解决方案,因为我已经被编译语言所破坏。你可以在这里看到,Function_A指向Function_B。在运行时,调用Function_A时不会定义Function_B,因此不会发生。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:5)

在Python中,不需要按使用顺序定义函数。只要它在运行时中调用函数之前的某处定义它就应该有效。这是因为在调用Function_A()之前实际上并没有对它进行求值,在这种情况下就是在这个test.py文件的底部,此时已经定义了Function_B()。

test.py:

def Function_A():
    print "We're going to function B!"
    Function_B()

def Function_B():
    print "We made it!!"

Function_A()

示例运行:

  mahmoud:〜$ python test.py
  我们要去做B!   我们做到了!!

答案 1 :(得分:2)

在运行时解析函数名称。因此,当Function_A调用Function_B时,在Function_A实际进行调用之前,不会查找名称“Function_B”。因此,只要Function_B由实际调用Function_A的时间定义,一切正常。例如,这将工作:

def Function_A():
    print "Function A entered"
    Function_B()

Function_A()

def Function_B():
    print "Function B entered"

...因为对Function_A的调用是在Function_B的定义之前。

答案 2 :(得分:2)

如上所述,两个函数都被定义,但两个函数都没有被调用。

如果您在 Function_A的定义之前致电Function_B ,则会收到错误消息:

def Function_A():
 print "We're going to function B!"
 Function_B()

Function_A() # will fail

def Function_B():
 print "We made it!"

如果您在之后调用Function_A Function_B的定义一切正常:

def Function_A():
 print "We're going to function B!"
 Function_B()

def Function_B():
 print "We made it!"

Function_A() # will succeed

解释器从头到尾执行文件,定义和调用函数。只有在调用函数时才会仔细查看函数体。

执行Function_A并到达第二行时,解释器将查找全局命名空间以查找名为Function_B的内容。在第一个示例中,尚未定义任何内容,而在第二个示例中,可以调用Function_B

答案 3 :(得分:2)

正如其他人所说,在Function_B被调用时会查找Function_A。这是一个示例,显示Function_B甚至可以重新定义并仍然可以正常工作。

def Function_A():
    print "We're going to function B!"
    Function_B()

# Function_A() # This would cause a NameError

def Function_B():
    print "We made it!"

Function_A()

def Function_B():
    print "Function B has been redefined!"

Function_A()

输出:

We're going to function B!
We made it!
We're going to function B!
Function B has been redefined!

答案 4 :(得分:1)

我有两个问题我可以看到。一,你需要冒牌后的冒号。二:你把最后一串的开/关报价混淆了。

def Function_A():
 print "We're going to function B!"
 Function_B()

def Function_B():
 print "We made it!"

否则,此代码按发布方式工作。我没有运行这些功能的问题。