python docoment 给出了标准的解决办法:
A way around this is to use None as the default, and explicitly test for it in the body of the function
第二: x += y vs x = x + y
一般来说,二者是等价的,至少看起来是等价的(这也是陷阱的定义 — 看起来都OK,但不必定精确)。
- >>> x=1;x += 1;print x
- 2
- >>> x=1;x = x+1;print x
- 2
- >>> x=[1];x+=[2];print x
- [1, 2]
- >>> x=[1];x=x+[2];print x
- [1, 2]
呃,被光速打脸了?
- >>> x=[1];print id(x);x=x+[2];print id(x)
- 4357132800
- 4357132728
- >>> x=[1];print id(x);x+=[2];print id(x)
- 4357132800
- 4357132800
前者x指向一个新的对象,后者x在本来的对象是修改,当然,那种效不雅是精确的取决于应用处景。至少,得知道,二者有时刻并不一样
第三,神奇的小括号–()
小括号(parenthese)在各类编程说话中都有广泛的应用,python中,小括号还能表示元组(tuple)这一数据类型, 元组是immutable的序列。
- >>> a = (1, 2)
- >>> type(a)
- <type 'tuple'>
- >>> type(())
- <type 'tuple'>
但如不雅只有一个元素呢
- >>> a=(1)
- >>> type(a)
- <type 'int'>
stackoverflow上有一个更恰当的例子来解释默认参数是在定义的时刻求值,而不是调用的时刻。
神奇不神奇,如不雅要表示只有一个元素的元组,精确的姿势是:
- >>> a=(1,)
- >>> type(a)
- <type 'tuple'>
第四:生成一个元素是列表的列表
这个有点像二维数组,当然生成一个元素是字典的列表也是可以的,更通俗的说,生成一个元素是可变对象的序列
很简单嘛:
- >>> a= [[]] * 10
- >>> a
- [[], [], [], [], [], [], [], [], [], []]
- >>> a[0].append(10)
推荐阅读
跟着物联网设备的赓续出现,用户所碰到的严重的物联网安然问题不容忽视。分析师和专家经常评论辩论这个严重问题,人们须要采取积极主动的行动来竽暌功对和解决。根据调研机构Gartner公司的>>>详细阅读
本文标题:程序员必知的Python陷阱与缺陷列表
地址:http://www.17bianji.com/lsqh/36531.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示