📖
Pythonについての学習メモ
どういった記事なのか
pythonを学習した際の備忘録を完結にまとめる
どんな人間が書いているか
プログラマー歴10年ちょいの初心者
ITに関わった当初はテストエンジニア、その後プログラマー・SEに転身
C# -> php -> ruby とプログラム未経験から職場とともにメイン言語を渡り歩いてきた
Python学習で取り組んだことと初学者がつまずきやすいポイント
Pythonを学び始めたとき、以下のような内容に重点を置いて学習した
実務で活かすにはまだまだ浅かった部分も多かったと感じているが、基礎として大切だと思った点をまとめる
Pythonの特徴と設計思想
-
インデントによる構造定義
ブロックの始まりと終わりを{}
ではなくインデントで管理するため、見た目がそのまま構文ルールになる
→ 可読性が高まる一方で、インデントずれ=構文エラーになりやすい -
動的型付け
型を明示しなくてもコードが動く柔軟さがあるが、意図しない型変化によるバグが起こりやすい
x = 10
x = "文字列" # これもOK
Pythonの長所と短所
長所
- 開発スピードが早い(コード量が少なくて済む)
- 標準・外部ライブラリが豊富
- 学習コストが低く、文法が直感的
- 可読性の高い文法
短所
- 静的型チェックが弱い(実行するまで型の不整合に気づきにくい)
- 小規模なら快適でも、大規模化や非同期処理で不具合が潜在化しやすい
- パフォーマンス面では他の言語に劣ることもある
PEP8とコード整形ツールの活用
- PEP8:Pythonの公式スタイルガイドに沿った書き方を意識
- black:フォーマッター。手間なくPEP8準拠に整えてくれる
- mypy:静的型チェッカー。型ヒントを入れれば、未然にエラーを検知できる
black .
mypy my_module.py
よくある初学者の失敗パターン
スコープの誤解
for i in range(5):
x = i
print(x) # Pythonでは有効(他言語だとスコープ外でエラー)
def f():
y = 3
print(y) # NameError(関数スコープの変数は外から見えない)
await
を忘れる
非同期処理で async def fetch():
return "data"
data = fetch() # これは coroutine オブジェクト
print(data) # <coroutine object fetch at ...>
# 正しくは:
data = await fetch()
importエラーや循環参照
- モジュール名とファイル名が衝突すると
ImportError
- モジュールが互いに依存し合う設計になると、循環importによって
AttributeError
やImportError
が発生する
補足:自分にとって役立ったTips
- VSCode の Pylance 拡張は型チェックが優秀
- .pyi スタブファイルや typing モジュールは思ったより便利
- 型に慣れてくると「ドキュメントの代わり」として読みやすくなる
- pyright は mypy より高速で補完も強力(個人開発向けに◎)
Pythonはシンプルでとっつきやすい反面、「構造の理解」「静的チェックの工夫」「実行前の検証」の大切さを意識しておかないと、実務での不具合が起こりやすいと感じたので注意が必要
Discussion