サラリーマンエンジニアブログ

大企業で働くなんちゃってITエンジニアのブログです。

【Python初心者必見】一歩上のパイソニスタになるために

pythonista
こんにちは、アホだけどITエンジニア コーシです。

「【Python初心者必見】一歩上のパイソニスタになるために」という題目で、Pythonのコードの書き方についてお教えできたらと思います。


目次

 では早速参りましょう

タイプヒントをつける

あまりプログラムを経験したことのない方は、関数を定義する時に下記のように書くでしょう。

>>> def test(a, b, c, d):
...     return a
...
>>> test('hellowworld', 1, [1,2,3], {'a': 'b'})
'hellowworld'

しかし、上記では関数定義時に a, b, c, dのデータの方がぱっと見わからないし、returnされるデータの型もかわかりませんね。
コードが読みづらく、複数人で開発していると非常に困ります。

それが、タイプヒントを使えばこのように書くことができます。

>>> def test(a: str, b: int, c: list, d: dict) -> str:
...     return a
...
>>> test('hellowworld', 1, [1,2,3], {'a': 'b'})
'hellowworld'

上記のように書くと、関数定義時にデータの型がわかるのでどんなデータが引数として入ってくるのか、そしてどんなデータ型がreturnされるのか予想ができ、コード理解の一助になります。

また、下記のように、 引数=デフォルト値 とすれば関数定義時に引数のデフォルト値を定義することもできます。

>>> # dのデフォルト値を{}と定義
... def test(a: str, b: int, c: list, d={}) -> (str, dict):
...     return a, d
...
>>> # dの引数を省略したら, dはデフォルト値のd={}
... test(a='hellowworld', b=1, c=[1,2,3])
('hellowworld', {})
>>> # cのデフォルト値を[]と定義
... def test(a: str, b: int, c=[], d={}) -> (str, list):
...     return a, c
...
>>> # cの引数を省略したら, cはデフォルト値のc=[]
... test(a='hellowworld', b=1, d={'a': 'b'})
('hellowworld', [])

ただ、下記のように関数定義時に「デフォルト値を宣言した変数」の後に「宣言していない変数」が入ってしまうと SyntaxError: non-default argument follows default argument というエラーが生じるので注意しましょう。

>>> # cはデフォルト値を[]と定義, dは定義していない
... def test(a: str, b: int, c=[], d: dict) -> (str, list):
...     return a, c
...
  File "<stdin>", line 2
SyntaxError: non-default argument follows default argument

参考

〇〇 in dict.keys() の書き方

みなさん一度は、

if 〇〇 in dict.keys():

みたいな書き方したことがあると思うのですが、key だけを参照するのであれば

if 〇〇 in dict:

だけでいいんです。

>>> test={
...     'test1': '1',
...     'test2': '2',
...     'test3': '3',
...     'test4': '4',
...     'test5': '5'
... }
>>>
>>> # 'test3' in test.keys() と 'test3' in test は同義
... 'test3' in test.keys()
True
>>> 'test3' in test
True
>>>
>>> # もちろん下記はエラー
... 'test3' in test.items()
False
>>> 'test3' in test.values()
False

PEP8に従おう

これは、いうまでもないですがPythonにはPEP8という規約があるので、それにしたがって書けば、標準的なPythonコードが書けます。
今はテキストエディタでもPEP8に従っていなければWarningもしくはErrorを出してくれるものもあります。
オススメするエディタはPycharmです。
vim等のCUIで開発している人は、flake8というパッケージでPEP8チェックできます。

何回も使う文は関数化しよう

何度も同じ文を書くのであれば、それは関数化しましょう。
何回も同じ文3 ,4行がでてくるのは見ていてとても鬱陶しいです。
関数化して一行にまとめましょう。

ハードコーディングはやめましょう

例えば、URL・パスワード・メールアドレス、ファイルパス、等ソースコードに直接埋め込むべきではない定数は、テンプレートやコンフファイル、環境変数などの外部ソースからから読み込むようにしましょう。
セキュリティなどのトラブルの原因となります。

「今」必要としないコードは書くな

もしかしたらいずれは使うかもしれないだろうと思って、必要以上の機能は作るなってことですね。
YAGNIKISSの原則です。プログラムはシンプルイズベストです。

参考

まとめ

上記を守っていただけたら、今よりも少しレベルの高いパイソニスタになれるのではないでしょうか。
プログラムを書くときは常にシンプルに書くことを1番に求めて書きましょう。
シンプルを求めていけば自然とわかりやすい文が書けます。
プログラムは同じ結果を得るために様々な書き方ができますが、正解はたった一つです。