#概要
pythonコード規約について調べてみました。
前編は単にPEP8について自分なりにまとめましただけで。
こちらは他のソースみた内容をまとめてみました。
自分はなるほどと思った内容をチョイスしてます。
#見たページ
The Hitchhiker's Guide to Python
Be Pythonic
Code Like a Pythonista: Idiomatic Python
#全般
わかり易さを重視しよう
できるだけ黒魔術を避け、わかりやすいコードにしよう
BAD
def make_complex(*args):
x, y = args
return dict(**locals())
GOOD
def make_complex(x, y):
return {'x': x, 'y': y}
関数変数のタイプと注意点
- できるだけ可変長変数*args, **kwargsを避けましょう
- 基本的にわかりづらい
- 「念のため」の前提での変数を用意しない
- 意外と消しづらい、必要な時に追加した方がまし
We are all responsible users
pythonにprivateキーワードがないらしい。文化としては、各々が責任を持ってコーティングしようという感じらしい。キーワードがないが、規約はある。いわゆるpublicにしたくないメソッドは_をprefixにすべき
Withでファイルを開け
何があってもファイルが閉じられることが保証できる
# Bad
f = open('file.txt')
a = f.read()
print a
f.close()
# Good
with open('file.txt') as f:
for line in f:
print line
Tips
- enumerate, zipやunpackingを積極的に使おう
# Enumerate
for index, value in enumerate(pi_nums):
print(index, value)
# 1 3
# 2 1
# 3 4
# 4 1
# 5 5
# Zip
for p, f in zip(pi_nums, fibonacci_nums):
print(p, f)
# 3 1
# 1 1
# 4 2
# 1 3
# 5 5
#Unpacking after python3
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4
- 不要な変数に_を使おう。例えばTastyを10回printしたい場合
for _ in range(10):
print('Tasty')
- 同じobjectのリストを作るには * を使う。2d-listを作るにはlist-comprehensionを利用すべき
a = [1] * 4
# a = [1, 1, 1, 1]
# WRONG
b = [[1] * 3] * 3
# b = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
# Because when
b[0][0] = 2
# b = [[2, 1, 1], [2, 1, 1], [2, 1, 1]]
# RIGHT
b = [[1] * 3 for _ in range(3)]