LoginSignup
1
6

More than 5 years have passed since last update.

pythonic styleに関するまとめ(2):その他かき集め

Posted at

概要

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

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6