weixin_50947427 2022-02-27 17:20 采纳率: 66.7%
浏览 22

python的None关键字?

python的函数参数的默认值只计算一次,一个经典的例子是:

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))

输出结果:
[1]
[1, 2]
[1, 2, 3]
只需要改成这样就能避免上述bug:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

这两者有什么不同吗?为什么后者可以避免函数参数默认值只计算一次所带来的bug?还是说只要记住这样用就行了?

  • 写回答

1条回答 默认 最新

  • ·星辰大海 2022-02-27 17:56
    关注

    我的理解是list作为python的指针,第一个例子是函数每次调用都会检查内存中是否已经存在L,若存在则不会调用default的值,第二个例子L=None相当于一个默认的变量,它不一定是指针,如果再调用且不设置第二个参数的话那一定是按default来的。不一定对哈,仅供参考!

    评论

报告相同问题?

问题事件

  • 修改了问题 2月27日
  • 创建了问题 2月27日

悬赏问题

  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音