使函数定义以python文件顺序独立
我使用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()
大卫是对的,我的榜样是错误的。关于什么:
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函数时,不需要定义helper_function主体调用的任何函数。
Python在执行代码时将采取的步骤如下。
定义函数do_something。
定义函数helper_function。
定义函数main。
(基于上面的假设)致电main。
从主要,调用do_something。
从helper_function,调用helper_function。
Python唯一关心helper_function存在的时间是到了第六步。 在尝试查找helper_function以便调用它之前,您应该能够验证Python一直执行到第六步,然后引发错误。
我从来没有遇到过需要“前向功能定义”的情况。您能不能简单地将do_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不在乎在第3行上使用了helper_function()(在do_something函数中)
我建议使用WinPDB之类的代码并逐步执行代码。 它很好地显示了Python的parser / executor(?)的工作方式
def funB(d,c):
return funA(d,c)
print funB(2,3)
def funA(x,y):
return x+y
上面的代码将返回错误。 但是,下面的代码很好...
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()