假设我在脚本中有两个函数: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
函数,代码仍然能够工作吗?如果答案是肯定的,它是否总是有效?
假设我在脚本中有两个函数: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
如果按照这种顺序 (sum_numbers
还不存在),你会遇到问题 (NameError
),因为它会尝试查找一个还不存在的名称。
所以总体而言,是的,顺序确实很重要;在 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
throws:
---------------------------------------------------------------------------
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