Python 脚本中函数的顺序重要吗?
Does the order of functions in a Python script matter?
假设我的脚本中有两个函数:sum_numbers
和 print_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
假设我的脚本中有两个函数:sum_numbers
和 print_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