魔性的Python
2017-12-19 15:25:07 14 举报
AI智能生成
闲暇时间总结了Python中的一些奇怪现象,并针对这些问题给出了我的解释。
作者其他创作
大纲/内容
逻辑陷阱
迭代range()的最后一位
xrange也得到了同样的错误结果
在for a[i] in a 的循环里,i一直是9,a[9]被反复赋值,则迭代到真正的a[9]时其值为最后赋值过的64
诡异的列表赋值
赋值过程的计算顺序究竟是怎样的?
诡异的字典循环
x.items返回的结果是[('a', 1), ('b', 2)]
在循环的过程中,y[k]被赋值为x[k]
有趣特性
数字的is问题
在CPython中,-5到256是固定值
没有逗号的tuple不是tuple
布尔在什么时候可以当成1用?
函数可以当字典的键
同一个类的不同对象,类函数是相同的
列表元素添加了自己
以一种玄学的形式存在
type 和 objecy的诡异关系
type是上帝,一切都是他造的
object是亚当,上帝依照他的样子创造所有的对象
上帝自己也是个对象
a += b 和 a = a+b的区别
作用域内外的同名变量
赋值语句会毁了作用域外的变量传入
又一个变量作用域的坑
纵使这个赋值动作不会被执行也不行
导入陷阱
这个坑有点像全局变量作用域的坑
_是命令行的最后一次输出
finally always win
换行的正则表达式
在Python中,可以将正则表达式分成多行,命名匹配项并插入注释。
数字调用函数
解释器Bug
嵌套列表污染问题
内存引用问题
列表与字典的加法
诡异之处在于: a+b会报错,但 a += b则不会。b+=a也会报错
这个结果和解释器中__iadd__函数的实现方式有紧密关系
切片赋值
切片+=坑
__iadd__的处理方式是操作参数本身,因此 a[3:5]被变成了[0,0,2,2],于是整个列表变长了
循环创建lambda
i是个引用还是个int型字面量
默认参数失守
函数的副作用可以理解,对默认参数的副作用就有点夸张了
这个问题说明了默认参数在函数定义了之后就变成了一个内存引用地址
毁掉一个int数字
连续比对坑
这个问题与解释器解释规则有关
all处理空值
修改tuple内的列表
精度报错
生成式内使用变量的作用域
独立作用域
Py2和Py3的区别
0 条评论
下一页