def f(x, arr=[]):
arr.append(x)
return arr
print(f(1),f(2))
o/p: [1,2] [1,2]
def f(x, arr=[]):
arr.append(x)
return arr
print(f(1))
print(f(2))
o/p: [1]
[1,2]
Run Code Online (Sandbox Code Playgroud)
为什么以不同方式调用函数f()会改变输出值?我编写第二个函数只是为了与第一个函数进行比较.对不起,如果这造成了混乱.
这是两个不同事物之间的互动:
1)Python中的函数参数默认值不会在每次调用时重新计算,而是在函数定义时重新计算(更大讨论"最小惊讶"和可变默认参数)
2)Python需要在函数调用函数之前评估函数的所有参数(例如执行print(1+2, 5*3),1+2并且5*3需要在print被考虑之前进行计算)
因此,如果您f多次调用而没有第二个参数,它将只附加到您最初声明的相同数组中def.这是您在第二个示例中可以清楚看到的内容.第一次调用arr在第一次突变([1])之后打印; arr第二个([1, 2])之后的第二个打印.
第一个例子是不同的,因为我说的第二个原则:在调用函数之前评估所有参数.所以print(f(1), f(2))首先会调用f(1),arr改为[1]; 然后f(2)将被评估,arr改为[1, 2].由于这两个函数调用返回的参考arr,print然后将打印的内容arr两次[1, 2], [1, 2].
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |