【譯】Python的優雅技巧

枚舉

不要這麼作:html

i = 0 
for item in iterable: 
    print i, item 
    i += 1

而是這樣:python

for i, item in enumerate(iterable):
    print i, item

Enumerate能夠接受第二個參數,例如:express

>>> list(enumerate('abc')) 
[(0, 'a'), (1, 'b'), (2, 'c')] 

>>> list(enumerate('abc', 1)) 
[(1, 'a'), (2, 'b'), (3, 'c')]

字典/集合 解析

你可能知道列表解析,但不知道字典/集合解析。字典/集合解析簡單並且高效,例如:json

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) 依舊會給咱們一個整數。爲了規避這個問題,咱們須要這樣作:服務器

result = 1.0/2

可是如今有一種別的方法能夠解決這個問題,甚至在以前我都沒有意識到有這種方法存在。你能夠進行以下操做:wordpress

from __future__ import division 
result = 1/2
# print(result)
# 0.5

須要注意的是這個竅門只適用於Python 2。在Python 3 中就不須要進行import 操做了,由於它已經默認進行import了。函數

簡單的服務器

你想快速簡單的分享目錄下的文件嗎?能夠這樣作:調試

# Python2
python -m SimpleHTTPServer

# Python 3
python3 -m http.server

這回啓動一個服務器code

Python表達式求值

咱們都知道eval,但也許並非全部人都知道literal_eval.能夠這麼作:server

import ast 
my_list = ast.literal_eval(expr)

而不是這樣:

expr = "[1, 2, 3]" 
my_list = eval(expr)

我相信對於大多數人來講這種形式是第一次看見,可是實際上這個在Python中已經存在很長時間了。

分析腳本

按下面的方式運行腳本,能夠很簡單的對其進行分析:

python -m cProfile my_script.py

對象自檢

在Python中,能夠經過dir()來檢查對象,例如:

>>> foo = [1, 2, 3, 4]
>>> dir(foo) 
['__add__', '__class__', '__contains__', 
'__delattr__', '__delitem__', '__delslice__', ... , 
'extend', 'index', 'insert', 'pop', 'remove', 
'reverse', 'sort']

調試腳本

你可使用pdb模塊在腳本中設置斷點來調試腳本,就像這樣:

import pdb
pdb.set_trace()

你能夠在腳本的任何地方加入pdb.set_trace(),該函數會在那個位置設置一個斷點。超級方便。你應該多閱讀pdb 函數的相關內容,由於在它裏面還有不少不爲人知的功能。

簡化if結構

若是必須檢查一些值,能夠用

if n in [1,4,5,6]:

而不是用複雜的if結構:

if n==1 or n==4 or n==5 or n==6:

字符串/數列 逆序

下面的方式能夠快速反轉一個列表:

>>> 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()

這種方式一樣適用於字符串:

>>> foo = "yasoob"
>>> foo[::-1]
'boosay'

優雅地打印

下面的方式能夠用優雅的方式打印字典和列表:

from pprint import pprint 
pprint(my_dict)

這用於字典打印是很是高效的,若是你想從文件中快速優雅的打印出json,能夠這樣作:

cat file.json | python -m json.tools

三元運算

三元運算是if-else 語句的快捷操做,也被稱爲條件運算。這裏有幾個例子能夠供你參考:

[on_true] if [expression] else [on_false]
x, y = 50, 25
small = x if x < y else y

譯文出處:http://www.ido321.com/1576.html

本文根據@Nicolas Bevacqua的《nifty-python-tricks》所譯,整個譯文帶有我本身的理解與思想,若是譯得很差或有不對之處還請同行朋友指點。如需轉載此譯文,需註明英文出處:https://freepythontips.wordpress.com/2015/04/19/nifty-python-tricks/

相關文章
相關標籤/搜索