1. 缺乏一致性
- set添加元素是set.add, list添加元素是list.append
- list删除元素是list.remove, dict删除元素是del map[key]
- len(x)而不是面向对象的x.len()
2. 变量赋值和定义相同
假如我这样写
is_destroy = True
...
is_destory = False
本来的意思是赋值,结果拼写错误变成了定义新变量,这个bug足够调半天。 而在其它语言里面,定义变量时要么有var、let等关键字,要么有变量的类型声明,是不会出错的。
3. 奇葩的global规则
x = 1
y = 3
def foo():
print y
x = 2
print x
foo()
print x
没加global关键字,能读取变量,但是写的时侯却写到了另外一个变量。
4. 缩进表示代码结构
初看挺好的,简洁明了,风格统一。实际使用中却遇到了两个问题:
- 但是当我从网页上拷贝粘贴一段代码到编辑器中时,代码变得混乱不堪。
- 当我切换的另外一个tab自动替换成空格的环境写了一大堆代码以后,同样出现了问题。
5. Unicode黑魔法
我用了很长实际才把python的乱码问题搞懂。
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print str.decode('UTF-8').encode('GBK')
总之把上面这些乱七八糟的加上就好了。
6. ++i的坑
这是专坑C程序员的特性,++i竟然不是自增1。这个bug害我调了大半天。
7. lambda
lambda闭包只能写一个语句,想写多个语句需要单独写一个函数。