Hi 朋友們。由於我最近都比較忙,所以已經很長一段時間沒有寫部落格了。在這篇文章中我將和大家分享一些真正有用的技巧和竅門,這些技巧和竅門你們之前可能並不知道。所以不浪費時間了,讓我們直接來看看這些內容吧:
列舉
之前我們這樣操作:
1 2 3 4 |
i = 0 for item in iterable: print i, item i += 1 |
現在我們這樣操作:
1 2 |
for i, item in enumerate(iterable): print i, item |
enumerate函式還可以接收第二個引數。就像下面這樣:
1 2 3 4 5 |
>>> list(enumerate('abc')) [(0, 'a'), (1, 'b'), (2, 'c')] >>> list(enumerate('abc', 1)) [(1, 'a'), (2, 'b'), (3, 'c')] |
字典/集合 解析
你也許知道如何進行列表解析,但是可能不知道字典/集合解析。它們簡單易用且高效。就像下面這個例子:
1 2 3 4 5 6 |
my_dict = {i: i * i for i in xrange(100)} my_set = {i * 15 for i in xrange(100)} # There is only a difference of ':' in both # 兩者的區別在於字典推導中有冒號 |
強制浮點除法
如果我們除以一個整數,即使結果是一個浮點數,Python 2(校注,這裡我添上了版本號)依舊會給我們一個整數。為了規避這個問題,我們需要這樣做:
1 |
result = 1.0/2 |
但是現在有一種別的方法可以解決這個問題,甚至在之前我都沒有意識到有這種方法存在。你可以進行如下操作:
1 2 3 4 |
from __future__ import division result = 1/2 # print(result) # 0.5 |
瞧,現在你不需要在資料上附件“.0” 來獲得準確答案了。需要注意的是這個竅門只適用於Python 2。在Python 3 中就不需要進行import 操作了,因為它已經預設進行import了。
簡單伺服器
你是否想要快速方便的共享某個目錄下的檔案呢?你可以這麼做:
1 2 3 4 5 |
# Python2 python -m SimpleHTTPServer # Python 3 python3 -m http.server |
這樣會為啟動一個伺服器。
對Python表示式求值
我們都知道eval函式,但是我們知道literal_eval函式麼?也許很多人都不知道吧。可以用這種操作:
1 2 |
import ast my_list = ast.literal_eval(expr) |
來代替以下這種操作:
1 2 |
expr = "[1, 2, 3]" my_list = eval(expr) |
我相信對於大多數人來說這種形式是第一次看見,但是實際上這個在Python中已經存在很長時間了。
指令碼分析
你可以很容易的通過執行以下程式碼進行指令碼分析:
1 |
python -m cProfile my_script.py |
物件自檢
在Python 中你可以通過dir() 函式來檢查物件。正如下面這個例子:
1 2 3 4 5 6 |
>>> foo = [1, 2, 3, 4] >>> dir(foo) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', ... , 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] |
除錯指令碼
你可以很方便的通過pdb模組在你的指令碼中設定斷點。正如下面這個例子:
1 2 |
import pdb pdb.set_trace() |
你可以在指令碼的任何地方加入pdb.set_trace(),該函式會在那個位置設定一個斷點。超級方便。你應該多閱讀pdb 函式的相關內容,因為在它裡面還有很多鮮為人知的功能。
if 結構簡化
如果你需要檢查幾個數值你可以用以下方法:
1 |
if n in [1,4,5,6]: |
來替代下面這個方式:
1 |
if n==1 or n==4 or n==5 or n==6: |
字串/數列 逆序
你可以用以下方法快速逆序排列數列:
1 2 3 4 5 6 7 8 |
>>> a = [1,2,3,4] >>> a[::-1] [4, 3, 2, 1] # This creates a new reversed list. # If you want to reverse a list in place you can do: a.reverse() |
這總方式也同樣適用於字串的逆序:
1 2 3 |
>>> foo = "yasoob" >>> foo[::-1] 'boosay' |
優美地列印
你可以通過以下方式對字典和數列進行優美地列印:
1 2 |
from pprint import pprint pprint(my_dict) |
這種方式對於字典列印更加高效。此外,如果你想要漂亮的將檔案中的json文件列印出來,你可以用以下這種方式:
1 |
cat file.json | python -m json.tools |
三元運算
三元運算是if-else 語句的快捷操作,也被稱為條件運算。這裡有幾個例子可以供你參考,它們可以讓你的程式碼更加緊湊,更加美觀。
1 2 3 |
[on_true] if [expression] else [on_false] x, y = 50, 25 small = x if x < y else y |
這就是今天所有的內容。希望你們能喜歡這篇文章,並且從這篇文章能學到一兩個技巧供以後使用。我們下篇文章再見吧。更多內容敬請關注我們的Facebook和Twitter!
如果你有任何意見或建議?你可以在下面評論或者給我發郵件,我的郵件地址是yasoob.khld(at)gmail.com