More Related Content Similar to Pythonでの開発を効率的に進めるためのツール設定 Similar to Pythonでの開発を効率的に進めるためのツール設定(20) More from Atsushi Odagiri More from Atsushi Odagiri(20) Pythonでの開発を効率的に進めるためのツール設定10. flake8 の設定ファイル
.flake8 か setup.cfg, tox.ini など
ツール独自のファイルだとトップディレクトリに散らかるの
で汎用的なのが好み
[flake8]
max-line-length = 88
ignore = E203,W503,W504
11. flake8 実行例
def add(a, b):
return a + b
def f():
return add(None, 0)
def add(a, b):
c = a if a else 0
return a + b
20. black 実行結果
black --diff .black_diff.py
--- black_diff.py 2019-09-16 01:11:41.391055 +0000
+++ black_diff.py 2019-09-16 01:11:47.066582 +0000
@@ -1,7 +1,4 @@
def add(a, b):
- c = (
- a
- +
- b)
+ c = a + b
return a + b
reformatted black_diff.py
All done! black --diff .black_diff.py
22. なぜ type hint チェッカーを使うのか
ドキュメントやコメントで書くより厳密
正しくない type hint はエディターの補完などで有害
実行しなくても型チェッカーで間違いがわかる
25. mypy 実行例
from typing import Optional
def f():
return add(None, 0)
def add(a: Optional[int], b: int):
c = a if a else 0
return a + b
27. 修正しましょう
from typing import Optional
def f():
return add(None, 0)
def add(a: Optional[int], b: int):
c = a if a else 0
return c + b
29. なぜ pytest か。unittest との違い。
詳細なテストレポート
アドオン
fixture の仕組み
関数 + assert 文 vs TestCase クラスの assert メソッド
33. 使い方 (1)
テスト対象
# loader.py
import json
FILENAME = "value.json"
def load():
with open(FILENAME) as f:
return json.load(f)
def save(v):
with open(FILENAME, "w") as f:
json.dump(v, f)
34. 使い方 (1)
テストコード
# test_loader.py
import json
from loader import save, load
def test_save():
v = {"value": 1}
save(v)
with open("value.json") as f:
assert json.load(f) == {"value": 1}
def test_load():
result = load()
assert result == {"value": 1}