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

时间:2017-06-07 22:30:22

标签: python

假设我的脚本中有两个函数: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,那么代码是否仍然有用?如果答案是肯定的,它总是有效吗?

2 个答案:

答案 0 :(得分:33)

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)。

答案 1 :(得分:11)

创建函数的顺序并不重要。只有在完成对函数的调用时才会这样做:

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