这里的特技仅仅适应于python小学生。
1. 三目操作符
学过C语言的同学,或者看过《C语言从入门到放弃》这本书的同学一定不会对“三目操作符”这种画面感十足的操作符感到陌生。
然而,直到我完成python小学一年级课程的时候才发现原来python也有类似的东西。比如:
def foo(val):
if val == 42:
return "you are a programmer!"
else:
return "you are a manong!"
或者你也可以这样写:
def foo(val):
return "you are a programmer!" if val == 42 else "you are a manong!"
友情提示:此特技要小心使用。否则容易暴露你大师的本质。不要像撸主当年,把所有的if/else都改成神都看不懂的 "do xxx if xx else xxx"句式。
2. 会叫的都是鸭子
讲道理的话,这个应该是一个坑,而非技巧。由于撸主当年是从C++党转学python的,刚开始写代码总喜欢这样:
if isinstance('c', CPlusPlus):
assert(isinstance('python', CPlusPlus)
更变态的时候甚至这样:
assert(type('C++') == CPlusPlus)
3. 内建函数和lamda
比如如下一个简单的例子:我需要将一个字符串列表中所有满足包含“result"字段的字符串筛选出来。
低年级的同学可能会这么做:
def foo(xxx):
result_list = list()
for ele in org_list:
if "result" in ele:
result_list.append(ele)
BUT,这样做“一点都不酷!”。要酷还得靠装逼:
result_list = filter(lambda ele : "result" in ele, org_list)
不信的话,你就去试试咯:
map(lambda ele : ele + 1, (1, 2, 3, 4))
reduce(lambda x,y:x+y, range(3))
4. iterator和generator
这俩哥们看着很像、读着也很像。
其实不难区分,generator返回不用return,而用yield;所以你凡是看到yield的地方,很可能就是generator这装逼犯。
iterator呢,就是实现了next()方法和__iter__,__iter__方法返回它自己。而当你调用next()方法时,会返回一个值。通常,这个next值会由generator产生。
换种说法,你也可以这样理解,generator是用来生成iterator的。
generator=(i for i in xrange(0, 3))
纳尼