博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python函数与类参数默认值陷阱
阅读量:6714 次
发布时间:2019-06-25

本文共 834 字,大约阅读时间需要 2 分钟。

hot3.png

# 函数的定义相当于一次类型构造,默认值只在此时解析一次。# 而函数调用时不会重新执行默认参数的构造。所以,如果使用了字典,列表这样的可变类型。# 而又要在函数体内修改它,可能会出现意想不到的效果.def a(b=[]): b.append('hi') print bIn [11]: a()['hi']In [12]: a()['hi', 'hi']In [13]: a(['2'])['2', 'hi']In [14]: a()['hi', 'hi', 'hi']In [15]: a.func_defaultsOut[15]: (['hi', 'hi', 'hi'],)# 解决方法:参数默认值使用None赋值def(b = None): b = b or [] pass# 类属性也有类似问题class A(object): x = [] def __init__(self, c): self.x.append(c) # 这里的x搜索到类级别的x了而非实例的, # 因实例级别的x未事先定义In [36]: a1, a2 = A(1), A(2)In [37]: a1.x, a2.xOut[37]: ([1, 2], [1, 2])# 解决方法, 实例级别的属性事先定义class B(object): x = [] def __init__(self, c): self.x = [] # 此处实例属性有x,所以先搜索到此 self.x.append(c) In [38]: b1, b2 = B(1), B(2)In [39]: b1.x, b2.xOut[39]: ([1], [2])

转载于:https://my.oschina.net/leopardsaga/blog/200156

你可能感兴趣的文章
实现iOS图片等资源文件的热更新化(一): 从Images.xcassets导出合适的图片
查看>>
magento2 ajax机制 (customer-data)
查看>>
【二次元的CSS】—— CSS3画的能换频道的电视机(合集)
查看>>
magento 2模块开发实例helloworld模块
查看>>
关于if-else流程图的画法
查看>>
一天一点linux(10):ubuntu如何设置静态IP和动态IP?
查看>>
AndroidStudio好用的插件
查看>>
聊一聊 JS 中的『隐式类型转换』
查看>>
calc 与 box-sizing 的替代
查看>>
如何使用 Java 构建微服务?
查看>>
通过 SignalR 类库,实现 ASP.NET MVC 的实时通信
查看>>
[x98 air 3g平板]安装任意版本32位win10的方法
查看>>
12个用得着的JQuery代码片段
查看>>
Apache POI 4.1.0 发布,Office 文档的 Java API
查看>>
[Leetcode] Move Zeroes 移动零
查看>>
如何在Ubuntu 14.04服务器上自动化部署Spring Boot的应用
查看>>
kafka的SSL证书校验不通过
查看>>
MySQL行锁堵塞案例
查看>>
glom模块的使用(二)
查看>>
别开心太早,Python 官方文档的翻译差远了
查看>>