我使用Python CGI。在定义之前我无法调用函数。
在Oracle PL / SQL中,有这种“前向声明”技巧:在顶部命名所有函数,因此定义顺序无关紧要。
Python中也有这样的技巧吗?
示例:
def do_something(ds_parameter):
helper_function(ds_parameter)
....
def helper_function(hf_parameter):
....
def main():
do_something(my_value)
main()
大卫是对的,我的榜样是错的。
怎么样:
<start of cgi-script>
def do_something(ds_parameter):
helper_function(ds_parameter)
....
def print_something():
do_something(my_value)
print_something()
def helper_function(hf_parameter):
....
def main()
....
main()
我可以“转发声明”脚本顶部的功能吗?
答案 0 :(得分:59)
必须在使用任何函数之前定义所有函数。
但是,只要在任何可执行代码使用函数之前定义了所有函数,就可以按任何顺序定义函数。
您不需要“前向声明”,因为所有声明都完全相互独立。只要所有声明都在所有可执行代码之前。
你有问题吗?如果是这样,请发布不起作用的代码。
在您的示例中,print_something()
不合适。
规则:必须在任何执行实际工作的代码之前定义所有函数
因此,将所有正常工作的语句放在。
答案 1 :(得分:25)
更好地说明你的观点:
def main():
print_something()
....
def do_something(ds_parameter):
helper_function(ds_parameter)
....
def print_something():
do_something(my_value)
def helper_function(hf_parameter):
....
main()
换句话说,您可以将main()
的定义保留在顶部,以方便编辑 - 避免频繁滚动,如果大部分时间用于编辑主页。
答案 2 :(得分:3)
假设你有一些代码片段在定义后调用你的函数main,那么你的例子就像写的那样工作。由于Python的解释方式,在定义do_something函数时,不需要定义do_something
主体调用的任何函数。
Python在执行代码时将采取的步骤如下:
do_something
,请致电helper_function。 Python关注helper_function
存在的唯一时间是它到达第六步。在尝试查找helper_function以便它可以调用它时,你应该能够验证Python是否一直到第六步,然后引发错误。
答案 3 :(得分:2)
我从来没有遇到过需要“前向功能定义”的情况。你能不能简单地将print_something()
移到你的主要功能中......?
def do_something(ds_parameter):
helper_function(ds_parameter)
....
def print_something():
do_something(my_value)
def helper_function(hf_parameter):
....
def main()
print_something()
....
main()
Python并不关心helper_function()是否在第3行(在do_something
函数中)使用后定义
我建议使用类似WinPDB的内容并逐步执行代码。它很好地展示了Python的解析器/执行器(?)如何工作
答案 4 :(得分:2)
def funB(d,c):
return funA(d,c)
print funB(2,3)
def funA(x,y):
return x+y
上面的代码将返回Error。但是,以下代码很好......
def funB(d,c):
return funA(d,c)
def funA(x,y):
return x+y
print funB(2,3)
因此,即使您必须在完成任何实际工作之前明确定义该功能,但如果您未明确使用该功能,则可能会离开。我认为这与其他语言的原型有点类似。
答案 5 :(得分:1)
对于所有人来说,尽管做法不好,但仍需要解决方法...
我遇到了类似的问题,并按以下方式解决了这个问题:
import Configurations as this
'''Configurations.py'''
if __name__ == '__main__':
this.conf01()
'''Test conf'''
def conf01():
print ("working")
因此,我可以在文件顶部更改目标配置。诀窍是将文件导入自身。
答案 6 :(得分:0)
使用多处理模块:
from multiprocessing import Process
p1 = Process(target=function_name, args=(arg1, arg2,))
p1.start()