使函数定义在python文件顺序中独立

时间:2009-04-16 21:48:54

标签: 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()
大卫是对的,我的榜样是错的。 怎么样:

<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()

我可以“转发声明”脚本顶部的功能吗?

7 个答案:

答案 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在执行代码时将采取的步骤如下:

  1. 定义函数do_something。
  2. 定义函数helper_function。
  3. 定义函数main。
  4. (鉴于我的上述假设)请致电主。
  5. 从main,调用do_something。
  6. 来自do_something,请致电helper_function。
  7. 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()