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作为默认参数,然后在函数内部初始化可变类型。

为什么在函数定义时默认参数只设定一次?

因为默认参数是在函数创建时定义的,而不是在每次调用时重置。

使用可变类型作为默认参数可能导致什么问题?

可能导致函数调用之间的状态共享,导致意外的结果和错误。

🏷️

标签

➡️

继续阅读