在這里我將搜集一些神奇的Python代碼,希望能不斷更新。。。
1. List Comprehensions
使用list comprehension可以杜絕掉50%以上的for循環,后者的效率極其低下(可以看看C源碼的實現),而且不夠緊湊。
(1) Python官方的例子:
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x !=y]
運行結果得到:[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
(2) list的反轉:lis[::-1]
(3) 找n以內的質數:
>>> filter(lambda number: all(number%x for x in range(2, math.sqrt(prime))), range(2,n))
(4) 凱撒密碼:對於一個字符串,每個字母右移n位加密。
code = ''.join([chr((ord(ch)+n-97)%26+97) if ord('a')<=ord(ch)<=ord('z') else ch for ch in str])
2. Python的動態性
Python完爆C++一向自豪的泛型編程,模板編程,舉例如下:
def build(type, value): return type(value)
然后可以就可以build(int,0)了……是不是比C++簡練多了?更牛逼的:
def impose(func, value): return func(value) def anyfunc(value): return value*value print impose(anyfunc, 3) # return 9, Python 2.7
所以,在Python里類型、函數什么的全部都可以看做是操作對象(第一個例子顯示了對數據類型的操作,第二個是對函數的操作)。以上所有這些Python的特性,你可能說我用C實現一個一樣的就好了。誠然,你可以在C里一個個寫出來自己喜歡的特性,但是你寫到后面你會發現你只是重新發明了Python,然后拿C寫了一個解釋器,而且實現得更爛而已。Please! Don't re-invent the wheel.