假设我的脚本中有两个函数:sum_numbers和print_sum.他们的实现是这样的:
def sum_numbers(a, b):
return a + b
def print_sum(a, b):
print(sum_numbers(a, b))
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:函数的编写顺序是否重要?如果我print_sum先编写了函数然后编写sum_numbers了代码,代码是否仍然可以工作?如果答案是肯定的,它总是有效吗?
Jim*_*ard 44
Python唯一关心的是名称是在实际查找时定义的.就这样.
在你的情况下,这很好,顺序并不重要,因为你只是定义了两个函数.也就是说,你只是引入了两个新名称,没有查找.
现在,如果您调用其中一个(实际上,执行查找)并切换顺序:
def print_sum(a, b):
print(sum_numbers(a, b))
print_sum(2, 4)
def sum_numbers(a, b):
return a + b
Run Code Online (Sandbox Code Playgroud)
你会遇到麻烦(NameError),因为它会尝试找到一个sum_numbers尚不存在的名字().
所以总的来说,是的,订单确实重要; Python中没有像其他语言(例如JavaScript)那样提升名称.
MSe*_*ert 13
创建函数的顺序无关紧要.只有在完成对函数的调用时才会这样做:
def print_sum(a, b):
print(sum_numbers(a, b))
def sum_numbers(a, b):
return a + b
print_sum(1, 3)
# 4
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为在这个时候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
Run Code Online (Sandbox Code Playgroud)
抛出:
---------------------------------------------------------------------------
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
Run Code Online (Sandbox Code Playgroud)