Pythonの心得 + 構文てんこ盛り

masasann
masasann
10分
3,841字

心得(押さえるべき考え方)

  • 読みやすさ優先: 「読みやすさは正義」。短くても読みにくいコードより、明瞭なコード。
  • 単一責任: 1関数1目的。長大な関数は分割する。
  • 明示は暗黙に勝る: マジックに見える挙動を避け、意図をコードで表現する。
  • イミュータブルを優先: 可能ならタプルやfrozensetなど不変を使う。
  • まずは正しく、次に速く: 早すぎる最適化はバグ源。
  • テストは仕様: テストが使い方と期待を表す。
  • 標準ライブラリは宝庫: まず標準ライブラリを調べる。
  • 型ヒントで意図を伝える: 可読性と保守性が上がる。
  • 例外で早期失敗: 異常系は早めに落とす。

1. 基本構文

1.1 コメント

# 1行コメント
"""複数行コメント風(実際は文字列)"""

1.2 変数と代入

x = 10
name = "Alice"
pi = 3.14159

# 多重代入
x, y, z = 1, 2, 3

# スワップ
x, y = y, x

1.3 文字列(f-string推奨)

name = "Bob"
age = 20
msg = f"{name} is {age}"

# 文字列操作
s = "python"
print(s.upper())   # PYTHON
print(s[:3])       # pyt
print(s.replace("py", "PY"))

2. 型とデータ構造

2.1 基本型

num = 42        # int
pi = 3.14       # float
flag = True     # bool
text = "hi"     # str

2.2 リスト / タプル / セット / 辞書

lst = [1, 2, 3]
tpl = (1, 2, 3)
set_ = {1, 2, 3}

d = {"a": 1, "b": 2}

# 要素追加
lst.append(4)
set_.add(4)
d["c"] = 3

2.3 内包表記(comprehension)

squares = [x * x for x in range(5)]
keys = {k.upper() for k in d.keys()}
inv = {v: k for k, v in d.items()}

3. 制御構文

3.1 if / elif / else

if x > 0:
    print("positive")
elif x == 0:
    print("zero")
else:
    print("negative")

3.2 for / while

for i in range(3):
    print(i)

n = 3
while n > 0:
    n -= 1

3.3 break / continue / else

for i in range(5):
    if i == 3:
        break
else:
    print("breakされなかった時だけ実行")

4. 関数

4.1 定義と引数

def add(a, b=0):
    return a + b

# 可変長引数

def foo(*args, **kwargs):
    print(args, kwargs)

4.2 ラムダ式

f = lambda x: x * 2
print(f(5))

4.3 関数を引数に

def apply(func, x):
    return func(x)

apply(lambda v: v + 1, 10)

5. 例外処理

try:
    x = 1 / 0
except ZeroDivisionError:
    print("割り算エラー")
else:
    print("例外なし")
finally:
    print("必ず実行")

6. イテレータ / ジェネレータ

# ジェネレータ

def count_up(n):
    i = 0
    while i < n:
        yield i
        i += 1

for v in count_up(3):
    print(v)

7. モジュールとパッケージ

# import
import math
from datetime import datetime

print(math.sqrt(16))
print(datetime.now())

8. クラスとOOP

class User:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Hi {self.name}"

u = User("Alice")
print(u.greet())

8.1 dataclasses

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(1, 2)

9. 型ヒント

from typing import List, Dict

def total(nums: List[int]) -> int:
    return sum(nums)

users: Dict[str, int] = {"a": 1}

10. ファイル操作

with open("data.txt", "w", encoding="utf-8") as f:
    f.write("hello")

with open("data.txt", "r", encoding="utf-8") as f:
    content = f.read()

11. 標準ライブラリの重要どころ

  • collections: Counter, defaultdict, deque
  • itertools: product, permutations, groupby
  • functools: lru_cache, partial
  • pathlib: パス操作の基本
  • logging: ログ管理
  • json / csv: データ読み書き

12. 非同期処理(asyncio)

import asyncio

async def main():
    await asyncio.sleep(1)
    return "done"

print(asyncio.run(main()))

13. テスト

# pytest 例

def test_add():
    assert 1 + 1 == 2

14. コーディング規約 / ツール

  • PEP8: Pythonの公式スタイル
  • black: 自動フォーマッタ
  • ruff / flake8: Lint
  • mypy / pyright: 型チェック

15. よくある罠

  • list = [] などの組み込み名を上書きしない
  • デフォルト引数にミュータブルを置かない
# NG

def f(x, lst=[]):
    lst.append(x)
    return lst
  • is== の混同

16. パフォーマンス小ネタ

  • 文字列結合は "".join(list)
  • ループより内包表記が速い場合が多い
  • lru_cache でメモ化

17. 依存管理・環境

  • venvで仮想環境
  • pipでパッケージ管理
  • pip-tools/poetry/uv なども選択肢

18. CLIスクリプト

import sys

if __name__ == "__main__":
    print(sys.argv)

19. もっと深めたいトピック

  • 並行処理(threading / multiprocessing)
  • パッケージ配布(setup.py / pyproject.toml)
  • C拡張 / Cython
  • プロファイリング(cProfile)

まとめ

Pythonは「読みやすさ」を中心に据えた言語。基本構文・標準ライブラリ・ツールを押さえることで、短く安全で保守しやすいコードが書ける。

Written by