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 ,代码还能工作吗?如果答案是肯定的,它总是有效吗?

原文由 flpn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 631
2 个回答

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)中那样的名称提升。

原文由 Dimitris Fasarakis Hilliard 发布,翻译遵循 CC BY-SA 3.0 许可协议

函数的创建顺序无关紧要。仅当函数调用完成时才重要:

 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

原文由 MSeifert 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题