本文的内容主要来自《Python 基础教程第二版》,摘录了比较有用但容易被忽视的小技巧。代码全部基于 Python 2.7.3
重定向 print 输出
log = open('log', 'w')
print >> log, 'message'
python 中没有三元操作符,只有类似的条件表达式
value = 1 if True else 0
print value
# => 1
条件判断中的假值(空值)
False None 0 "" () [] {}
可以连续使用的比较运算符
age = 17
print 0 < age < 18
# => False
整除操作符 //
常用于计算数组下标, 类似 JS 中的 Math.floor(array.length/n)
lst = range(9)
lst[:len(lst)//2]
# => 4
成员检查, 注意空字符串的情况
print 1 in [1,2,3]
print 'a' in {'a': 1, 'b':2}
print '' in 'abc'
# => True
使用转换说明符代替字符串连接
print str(1) + '+' + str(2)
# => 1+2
print '%d+%d' % (1, 2)
# => 1+2
在转换说明符中指定字符串精度
print '%.2s' % 'string'
# => st
使用字典作为转换说明符的参数
'%(name)s' % {'name': 'john' }
# => john
判断字符串中是否只包含空白字符
' \t\n'.isplace()
# => True
字符串的 find 方法可以制定查找范围
print 'abc123abc'.find('abc', 3, 6)
# => -1
sort 方法默认按升序排序元素, reverse 参数可以指定排列顺序
lst = [1,2,3]
lst.sort(reverse=True)
print lst
# => [3,2,1]
将二维数组(或元组)转换为字典
print dict([('a', 1), ('b',2)])
# => {'a':1, 'b':2}
通过 dict 函数的关键字参数创建字典
print dict(a=1,b=2)
# => {'a':1, 'b':2}
在 update 方法中使用这个技巧更为有用
d = {}
d.update(a=1,b=2)
print d
# => {'a':1, 'b':2}
使用 setdefault 方法省去对字典健值的判断
d1 = {}
for i in range(2):
if 'children' not in d1:
d1['children'] = []
d1['children'].append(i)
# 可改写为
d2 = {}
for i in range(2):
d2.setdefault('children', []).append(i)
为迭代对象加上序号
for index, value in enumerate('abc'):
print index, value
# =>
# 0 a
# 1 b
# 2 c
循环的 else 语句,在没有调用循环的时候执行
for x in []:
print x
else:
print 'not element'
# => not element
列表推导式可以包含多个 for 语句
lst = [[1,2], [3,4]]
print [i for a in lst for i in a]
# => [1,2,3,4]