我不知道该怎么称呼它,所以如果有人想编辑它:继续。
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,因此不会发生。我该如何解决这个问题?
答案 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!"
否则,此代码按发布方式工作。我没有运行这些功能的问题。