【问题标题】:Scope for default parameter in Python [duplicate]Python中默认参数的范围[重复]
【发布时间】:2016-06-20 08:55:02
【问题描述】:

我正在学习 Python,遇到了一个我不太明白的例子。官方教程中给出如下代码:

i = 5

def f(arg=i):
    print(arg)

i = 6
f()

来自 c++,这对我来说很直观,这将打印 5。但我也想理解技术解释:“默认值是在定义范围内的函数定义点进行评估的。”这里的“定义范围”是什么意思?

【问题讨论】:

  • “定义范围” 表示定义函数的范围,即包含i = 5的范围,其中def行被执行。另见:stackoverflow.com/q/1132941/3001761
  • “定义作用域”:在 Python 中,您可以拥有一个局部作用域的函数,即函数中的函数。最接近 C++ 的是 lambda,它在 C++ 中是新的(Python 也有 lambda)。
  • 简短回答:默认值以元组形式存储在 f.func_defaults 中,其值在您的代码中为 (5,)

标签: python parameters scope parameter-passing default-parameters


【解决方案1】:
1. i = 5
2. 
3. def f(arg=i):
4.     print(arg)
5. 
6. i = 6
7. f()

在 #1 处,i = 5 被求值,变量及其值被添加到作用域中。

在第 3 行,评估函数声明。此时,所有默认参数也会被评估。 i 持有值5,所以arg 的默认值是5(而不是符号i)。

i 在第 6 行更改值后,arg 已经为 5,因此不会更改。

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 2014-10-05
    • 2018-10-23
    • 2017-12-07
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多