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

use*_*986 45 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()
Run Code Online (Sandbox Code Playgroud)

大卫是对的,我的榜样是错的.关于什么:

<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()
Run Code Online (Sandbox Code Playgroud)

我可以"转发声明"脚本顶部的函数吗?

S.L*_*ott 67

必须在使用任何函数之前定义所有函数.

但是,只要在任何可执行代码使用函数之前定义了所有函数,就可以按任何顺序定义函数.

您不需要"前向声明",因为所有声明都完全相互独立.只要所有声明都在所有可执行代码之前.

你有问题吗?如果是这样,请发布不起作用的代码.


在你的例子中,print_something()是不合适的.

规则: 必须在任何执行实际工作的代码之前定义所有函数

因此,将所有有效的陈述放在最后.

  • @mnish True,它很好地说明了**默认参数在编译时被评估**,这通常不是预期的.使用`f(x = None):...`和`如果x是None:x = g()`而不是. (3认同)

小智 29

更好的说明你的观点是:

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()
Run Code Online (Sandbox Code Playgroud)

换句话说,您可以将您的定义保持main()在顶部,以便于编辑 - 避免频繁滚动,如果大部分时间都用于编辑main.

  • 这就是为什么用通用的`if __name__ =="__main __":`屏障来分隔声明和执行代码是非常有意义的. (2认同)

Dav*_*cke 5

假设您有一些代码片段在定义后调用您的函数 main,那么您的示例将按编写的方式工作。由于 Python 的解释方式,定义do_somethingdo_something 函数时不需要定义由 的主体调用的任何函数。

Python 在执行代码时将采取的步骤如下。

  1. 定义函数 do_something。
  2. 定义函数helper_function。
  3. 定义函数main。
  4. (鉴于我上面的假设)调用 main.
  5. 从 main 调用 do_something。
  6. do_something,调用 helper_function。

Python 唯一关心存在的时间helper_function是当它到达第六步时。在尝试查找 helper_function 以便调用它时引发错误之前,您应该能够验证 Python 是否已完成第六步。