python解释器如何处理具有默认参数的函数定义的位置

问题描述 投票:7回答:4

为什么第一代码输出51第二代码输出21。我理解第二个代码应该输出21,但是按照我的理解,第一个代码也应该输出21(b的值更改为20,然后调用函数f)。我想念什么?

b = 50

def f(a, b=b):
    return a + b

b = 20
print(f(1))

输出:51

b = 50
b = 20

def f(a, b=b):
    return a + b
print(f(1))

输出:21

编辑:这与How to change default value of optional function parameter in Python 2.7?不同,因为此处讨论的是默认参数发生的意外更改,而不是如何有意地更改默认参数的值,即此处的问题集中在python解释器如何处理位置上。具有默认参数的函数的函数定义。

python python-3.x
4个回答
7
投票

针对python初学者的提示


3
投票
考虑口译员如何处理。在第一种情况下,Python id()被解释为def f(a, b=b),因为当前范围内的def f(a, b=50)的值为b。这样,50f(1)分配给a,因此1 = 1 + 50 =

51


2
投票
函数的不同位置导致不同错误的原因也是由于值'b'的位置。

1
投票
由于在情况1中定义函数def f(a, b=b): NameError: name 'b' is not defined 时,正在将f的值(当时为b)分配给函数的第二个参数。
© www.soinside.com 2019 - 2024. All rights reserved.