列挙

以前はこのように操作していました:

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

今回はこのように操作します:

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

enumerate関数は第2引数も受け取ることができます。次のようになります:

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

辞書/セットの内包表記

リスト内包表記は知っているかもしれませんが、辞書/セットの内包表記は知らないかもしれません。それらは簡単で使いやすく、効率的です。例えば次のようになります:

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

しかし、この問題を解決する別の方法があります。以前はこの方法が存在することに気づいていませんでした。次のように操作できます:

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

見てください。正確な答えを得るためにデータに「.0」を付ける必要はもうありません。このコツはPython 2でのみ有効であることに注意してください。Python 3ではデフォルトでインポートされているため、import操作は不要です。

簡易サーバー

あるディレクトリ内のファイルを手軽に共有したいですか?次のようにできます:

# Python2
python -m SimpleHTTPServer

# Python 3
python3 -m http.server

これでサーバーが起動します。

Python式の評価

eval関数は誰もが知っていますが、literal_eval関数は知っていますか?多くの人は知らないかもしれません。このような操作ができます:

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()を追加でき、その関数はその位置にブレークポイントを設定します。

if 構造の簡略化

いくつかの値をチェックする必要がある場合は、次の方法を使用できます:

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

次の方法の代わりに:

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.tool

三項演算

三項演算はif-else文のショートカットであり、条件演算とも呼ばれます。参考になる例をいくつか示します。これらにより、コードをよりコンパクトで美しくすることができます。

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