【问题标题】:Position of defining a function定义函数的位置
【发布时间】:2022-01-21 03:32:31
【问题描述】:

是否有必要在代码的顶部定义一个函数,或者我们也可以在中间定义它(即在__main__ 段中)?像我们在中间定义一个函数,会不会导致执行和流程控制出错?

【问题讨论】:

  • 您几乎可以在代码中的任何位置定义函数。但请务必在之前调用它。
  • 你试过了吗?应该很容易尝试。顺便说一句,样式是另一个考虑因素,但与功能分开。
  • 顺便说一句,欢迎来到 Stack Overflow!如果需要提示,请查看tourHow to Ask
  • 您甚至可以在函数内部定义函数,在很多用例中这样做很有用。

标签: python function


【解决方案1】:

你可以在 Python 中任何你想要的地方定义一个函数。 但是,在执行函数定义之前,它不会被定义,因此是可调用的。

如果您熟悉许多其他语言,这感觉很奇怪,因为似乎大多数编译器/解释器会在代码执行之前 识别代码中的任何位置,并且它们将在代码中的任何位置可用。 Python 解释器这样做。

以下 2 个代码示例在语法上都是正确的,但第二个将失败,因为 hello() 直到 被调用后才被定义:

示例 1(有效!):

def hello():
    print('Hello World')

hello()

示例 2(失败!- 未定义名称 'hello'):

hello()

def hello():
    print('Hello World')

【讨论】:

    【解决方案2】:

    看看 Python 的定义就知道了。

    Python 是一种解释型高级通用编程语言。 (见:https://en.wikipedia.org/wiki/Python_(programming_language)

    解释是关键。我们可以认为python在检查整个文件之前逐行执行代码。 (这是一个不好的类比,但为了这个问题,让我们认为这是真的)

    现在可以有很多场景:

    声明后运行函数

    foo()
    
    def foo():
        print("foo")
    

    这会失败

    在声明前运行函数

    def foo():
        print("foo")
    
    foo()
    

    这会成功

    在函数内部调用函数

    def foo():
       print("foo")
    
    def bar():
       foo()
    
    bar()
    

    def bar():
       foo()
    
    def foo():
       print("foo")
    bar()
    

    这些都会成功。请注意在bar 之后声明的第二个示例foo。但仍然运行。见:Make function definition in a python file order independent

    def foo():
       print("foo")
    
    bar()
    
    def bar():
       foo()
    

    这会失败

    【讨论】:

    • 为什么在 bar 之后声明 foo 的第二个示例仍然运行?
    • 执行前的声明。您可以在第二个示例中看到,我们在bar 中使用了foo,而在使用bar 之前,我们声明了foo。在声明之前没有执行任何操作。
    猜你喜欢
    • 2019-10-09
    • 2012-07-13
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2018-08-10
    • 2011-07-28
    • 2011-03-16
    相关资源
    最近更新 更多