Python 脚本中函数的顺序重要吗?

Does the order of functions in a Python script matter?

假设我的脚本中有两个函数:sum_numbersprint_sum。他们的实现是这样的:

def sum_numbers(a, b):
    return a + b

def print_sum(a, b):
    print(sum_numbers(a, b))

所以我的问题是:函数的编写顺序重要吗?如果我先写 print_sum 函数,然后再写 sum_numbers,代码还能工作吗?如果答案是肯定的,它总是有效吗?

唯一Python关心的是这个名字是在实际查找的时候定义的。就这样。

在您的情况下,这很好,顺序并不重要,因为您只是 定义 两个函数。也就是说,你只是介绍两个新名字,没有查找。

现在,如果您调用其中之一(实际上执行了查找)并调换顺序:

def print_sum(a, b):
    print(sum_numbers(a, b))

print_sum(2, 4)

def sum_numbers(a, b):
    return a + b

你会遇到麻烦 (NameError),因为它会尝试查找一个尚不存在的名称 (sum_numbers)。

所以一般来说,是的,顺序 很重要; Python 中没有像其他语言(例如 JavaScript)那样提升名字。

函数的创建顺序无关紧要。仅当函数调用完成时才重要:

def print_sum(a, b):
    print(sum_numbers(a, b))

def sum_numbers(a, b):
    return a + b

print_sum(1, 3)
# 4

之所以有效,是因为在调用 print_sum 时,这两个函数都存在。但是,如果您在定义 sum_numbers 之前调用该函数,它将失败,因为 sum_numbers 尚未定义:

def print_sum(a, b):
    print(sum_numbers(a, b))

print_sum(1, 3)

def sum_numbers(a, b):
    return a + b

投掷:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-34-37c0e3733861> in <module>()
      2     print(sum_numbers(a, b))
      3 
----> 4 print_sum(1, 3)
      5 
      6 def sum_numbers(a, b):

<ipython-input-34-37c0e3733861> in print_sum(a, b)
      1 def print_sum(a, b):
----> 2     print(sum_numbers(a, b))
      3 
      4 print_sum(1, 3)
      5 

NameError: name 'sum_numbers' is not defined

按如下所示定义顺序函数并不重要:

def display():
    print(text())

def text():
    return "Hello World"

display() # "Hello World" is displayed

但是,调用函数的位置很重要,所以如果在开头调用 "display()",如下所示:

display() # Error

def display():
    print(text())

def text():
    return "Hello World"

然后出现如下错误:

Traceback (most recent call last): File "", line 1, in NameError: name 'display' is not defined