Python参数的默认值陷阱!

今日分享

参数的默认值陷阱

下面定义的函数f,其参数d是一个默认参数,且为字典类型:

def f(a,d={}):
  print(f'a: {a}')
  print(f'd: {d}')
  # do some process
  return d

最后返回字典d,下面调用函数f:

ret_dict = f(1) # 第二个参数d使用默认值

ret_dict['b'] = 2
ret_dict['c'] = 3

再次使用函数f

f(1)

尽管第二个参数为默认参数,按照预期它应该返回一个空字典,但结果却是如下:

a: 1
d: {'b': 2, 'c': 3}

因此默认参数:如果是列表,不要设置为[];如果是字典,不要设置为{}

应该将它们的默认值设置为None

def f(a,d=None):
  if d is None:
    d = {} ### 初始化为空字典
  print(f'a: {a}')
  print(f'd: {d}')
  # do some process
  return d

ret_dict = f(1) # 第二个参数d使用默认值
### 结果:
### a: 1
### d: {}

再次调用:

ret_dict['b'] = 2
ret_dict['c'] = 3
f(1)
### 结果:
### a: 1
### d: {}

此时符合我们的预期!


近期小例子:chain串联多个迭代对象机器学习中会涉及到的随机选择样本使用namedtuple的小例子pkuseg 做分词,超级nice~写一个装饰器:统计异常发生次数和时间;对象可被调用的实现方法;求任意维度两点间距离两种合并字典的方法对比计算和聚合同时进行groupby 分组plotly画柱状图+折线图;

最新总结:82页《Python之路1.1.pdf》下载方式,关注《Python小例子》并在其后台回复 mypy,即可下载。

Python小例子,长按关注

后期计划:不断深入Python小例子,添加更多基于Python的小例子,不限于:PyQt制作GUINumPy数值计算Pandas数据分析Sklearn机器学习实战Keras+TensorFlow深度学习等。2.0版本预计在春节前发出来。

如果你想每天看到小例子的更新动态,欢迎star这个小例子库,我们也真诚欢迎你贡献小例子,直接点击文章最下的阅读原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值