Things you may not know about Python
Mar 05, 20091. 可传递的条件表达式:
>>> a,b,c,d = 1,2,2,3 >>> if a<b==c<d: … print ‘voila!’ … voila!
我以前受C语言的毒害,一直写成 if (a<b) and (b==c) and (c<d),汗
2. 分开写的格式化字符串:
>>> greetings = ‘Hello, %s!’ >>> print greetings%’pala’ Hello, pala!
格式符(%s)相当于参数,如同函数中,可以先设置参数,随后再传递参数。
3. 把字符串的每个单词的首字母大写:
>>> s = ‘i love python!’ >>> s.title() ‘I Love Python!’
这个字符串方法的名字很难想到,我总觉得capitalize()应该是这个效果,不过其实capitalize只大写整个字符串的首字符。
4. 给字典添加新的键值对,但如果已有这个键则不修改字典:
>>> d = dict(a=1,b=2) >>> d.setdefault(‘b’,3) 2 >>> d {‘a’: 1, ‘b’: 2} >>> d.setdefault(‘c’,3) 3 >>> d {‘a’: 1, ‘c’: 3, ‘b’: 2}
这样可以放心大胆的添加新的键值对,而不必担心把已有的键值对给覆盖了。
5. 序列的’+’运算符的效率问题
序列(sequence)类型包括字符串、列表(list)等。’+’运算可以连接2个序列: >>> s1 = ‘about’ >>> s2 = ‘python’ >>> s1+s2 ‘aboutpython’ >>> l1 = [‘pineapple’,’orange’] >>> l2 = [‘strawberry’] >>> l1+l2 [‘pineapple’, ‘orange’, ‘strawberry’]
据说,由于python底层C语言实现的不同,’+’运算不如一些等价方法效率高。于是,字符串连接推荐用格式化字符串或join()方法,list连接推荐用extend()方法。
>>> ‘%s%s’%(s1,s2) ‘aboutpython’ >>> ‘‘.join([s1,s2]) ‘aboutpython’ >>> l1.extend(l2) >>> l1 [‘pineapple’, ‘orange’, ‘strawberry’]
另,l1.extend(l2) 是直接修改l1, 而 l1+l2 是产生一个新的list,因此,如果不考虑效率,可以用 l1+=l2 达到和 l1.extend(l2) 同样的结果。
(未完待续)