我使用Python CGI。 在定义函数之前我无法调用它。
在 Oracle PL/SQL 中,有一个“前向声明”的技巧:将所有函数命名在顶部,因此定义的顺序并不重要。
Python也有这样的trick吗?
示例:
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()
我可以在脚本顶部“转发声明”函数吗?
所有函数必须在使用之前定义。
但是,可以按任何顺序定义函数,只要在任何可执行代码使用函数之前定义所有函数即可。
您不需要“前向声明”,因为所有声明都是完全独立的。 只要所有声明都位于所有可执行代码之前。
你有问题吗? 如果是这样,请发布不起作用的代码。
在您的示例中,
print_something()
不合适。
规则:所有函数必须在任何实际工作的代码之前定义
因此,将所有有效的语句放在最后。
更好地说明你的观点是:
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()
的定义保留在顶部,以方便编辑 - 如果大部分时间都花在编辑 main 上,则可以避免频繁滚动。
假设您有一些代码片段在定义后调用您的函数 main,那么您的示例将按编写的方式工作。 由于 Python 的解释方式,在定义 do_something 函数时,不需要定义由
do_something
主体调用的任何函数。
Python 在执行代码时将采取的步骤如下。
do_something
,调用helper_function。Python 唯一关心
helper_function
存在的时候是当它到达第六步时。 在尝试查找 helper_function 以便调用它时引发错误之前,您应该能够验证 Python 是否已完成第六步。
我从来没有遇到过需要“前向函数定义”的情况..你能不能简单地将
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 的解析器/执行器(?)是如何工作的
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)
因此,即使您必须在完成任何实际工作之前明确定义该函数,但如果您不显式使用该函数,则有可能逃脱。我认为这有点类似于其他语言的原型设计......
我遇到了类似的问题并这样解决:
import Configurations as this
'''Configurations.py'''
if __name__ == '__main__':
this.conf01()
'''Test conf'''
def conf01():
print ("working")
所以我可以在文件顶部更改我的目标配置。诀窍是将文件导入到其自身中。
使用多处理模块:
from multiprocessing import Process
p1 = Process(target=function_name, args=(arg1, arg2,))
p1.start()