Ibuprofeno.py💊| #187: 解释这个Python代码
原文约300字/词,阅读约需1分钟。
📝
内容提要
在Python中,使用可变类型(如列表)作为函数默认参数时要注意。默认参数在函数定义时只设定一次。比如,函数`buggy`的默认参数是列表,调用`buggy(3)`后,列表变为`[3]`。再次调用`buggy(4)`时,列表变为`[3, 4]`,因为列表没有重置。这种情况在不可变类型(如字符串、数字)上不会发生。
🎯
关键要点
-
在Python中,使用可变类型(如列表)作为函数默认参数时要小心。
-
默认参数在函数定义时只设定一次,而不是在每次调用时重置。
-
调用函数buggy(3)后,默认参数列表变为[3]。
-
再次调用buggy(4)时,列表变为[3, 4],因为列表没有重置。
-
不可变类型(如字符串、数字)在使用默认参数时不会出现这种情况。
❓
延伸问答
在Python中,为什么使用可变类型作为函数默认参数时需要小心?
因为可变类型的默认参数只在函数定义时设定一次,后续调用会保留之前的值,可能导致意外的结果。
调用函数buggy(3)和buggy(4)的输出是什么?
第一次调用输出[3],第二次调用输出[3, 4]。
不可变类型在使用默认参数时有什么不同?
不可变类型如字符串和数字在每次调用时会重新设定,不会保留之前的值。
如何避免在Python中使用可变类型作为默认参数?
可以使用None作为默认参数,然后在函数内部初始化可变类型。
为什么在函数定义时默认参数只设定一次?
因为默认参数是在函数创建时定义的,而不是在每次调用时重置。
使用可变类型作为默认参数可能导致什么问题?
可能导致函数调用之间的状态共享,导致意外的结果和错误。
🏷️