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

flp*_*lpn 25 python

假设我的脚本中有两个函数:sum_numbersprint_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)

  • 吹毛求疵实际上在某些情况下订单很重要。如果正在查找符号作为对象定义/创建的一部分,则必须更早地定义该符号。一个简单的例子是,如果您有一个函数的默认参数,则在定义时对其进行评估)。另一个例子是继承,其中必须首先定义基类。 (2认同)