2.

Python 文法の基礎完全ガイド — 変数・型・制御フロー・関数・クラス

編集
この記事の要点
  • Python は インデントでブロックを表す動的型付け言語。 PEP 8 に従い 4 スペース推奨
  • 基本型: int / float / str / bool / list / tuple / dict / set / None
  • 制御フロー: if / elif / elsefor ... inwhilebreak / continue、 内包表記
  • 関数: def / lambda、 デフォルト引数、 キーワード引数、 *args / **kwargs、 type hints (3.5+)
  • 文字列フォーマットは f-string (3.6+) が最速かつ可読性高い。 リソース管理は with

Python 文法の特徴

Python は シンプルで読みやすい構文を最大の特徴とする言語です。 C 系言語の { } によるブロック表現ではなく、インデント(字下げ)でブロックを表現します。

# Hello World
print("Hello, World!")

# 変数(型宣言不要)
name = "Taro"
age = 30
pi = 3.14
is_active = True

# 型ヒント(推奨、Python 3.5+)
def greet(name: str, age: int) -> str:
    return f"{name} ({age} 歳) こんにちは"

print(greet("Hanako", 25))

基本データ型

用途ミュータブル
int42整数(多倍長精度)不可
float3.14倍精度浮動小数点不可
str"hello"Unicode 文字列不可
boolTrue / False真偽値不可
list[1, 2, 3]順序付きの可変配列
tuple(1, 2, 3)順序付きの不変配列不可
dict{"a": 1}キー/値マップ
set{1, 2, 3}重複なし集合
NoneNone値なし-
# リスト操作
fruits = ["apple", "banana", "cherry"]
fruits.append("orange")
fruits[0] = "grape"
print(fruits[1:3])         # ['banana', 'cherry']
print(len(fruits))         # 4

# 辞書
user = {"name": "Taro", "age": 30}
user["email"] = "taro@example.com"
print(user.get("phone", "未登録"))

# タプル(イミュータブル)
point = (10, 20)
x, y = point               # アンパック

# セット(集合演算)
a = {1, 2, 3}
b = {2, 3, 4}
print(a & b)               # {2, 3} 積集合
print(a | b)               # {1, 2, 3, 4} 和集合
print(a - b)               # {1} 差集合

演算子

分類演算子
算術+ - * / // % **7 // 2 = 3、2 ** 10 = 1024
比較== != < > <= >=a == b
論理and or notx > 0 and x < 10
所属in / not in"a" in ["a","b"]
同一性is / is notx is None
代入= += -= *= /=cnt += 1
セイウチ:= (3.8+)if (n := len(a)) > 10:

制御フロー

# if / elif / else
score = 85
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
else:
    grade = "D"

# for ループ
for i in range(5):           # 0 から 4
    print(i)

for fruit in ["apple", "banana"]:
    print(fruit)

for i, fruit in enumerate(["apple", "banana"]):
    print(i, fruit)

# while
n = 0
while n < 5:
    n += 1
    if n == 3:
        continue            # スキップ
    if n == 4:
        break               # 抜ける
    print(n)

# リスト内包表記(Pythonic)
squares = [x ** 2 for x in range(10)]
evens = [x for x in range(20) if x % 2 == 0]

# 辞書内包表記
sq_dict = {x: x ** 2 for x in range(5)}

# match 文 (3.10+)
def http_status(code: int) -> str:
    match code:
        case 200: return "OK"
        case 404: return "Not Found"
        case 500: return "Server Error"
        case _:   return "Unknown"

関数 (def / lambda)

# 基本
def add(a: int, b: int) -> int:
    return a + b

# デフォルト引数
def greet(name: str, msg: str = "Hello") -> str:
    return f"{msg}, {name}!"

greet("Taro")                  # Hello, Taro!
greet("Taro", msg="Hi")        # キーワード引数

# 可変長引数
def total(*args: int) -> int:
    return sum(args)
total(1, 2, 3, 4)              # 10

# キーワード可変長
def config(**kwargs):
    for k, v in kwargs.items():
        print(f"{k} = {v}")
config(host="localhost", port=8080)

# lambda(無名関数)
double = lambda x: x * 2
print(double(5))               # 10

# 高階関数
nums = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, nums))
evens = list(filter(lambda x: x % 2 == 0, nums))

クラス

class User:
    """ユーザクラス"""

    # クラス変数
    count = 0

    def __init__(self, name: str, age: int):
        # インスタンス変数
        self.name = name
        self.age = age
        User.count += 1

    def greet(self) -> str:
        return f"こんにちは、{self.name} です"

    def __str__(self) -> str:
        return f"User({self.name})"

    @classmethod
    def total(cls) -> int:
        return cls.count

    @staticmethod
    def is_adult(age: int) -> bool:
        return age >= 18

# 継承
class AdminUser(User):
    def __init__(self, name: str, age: int, level: int):
        super().__init__(name, age)
        self.level = level

    def greet(self) -> str:
        return f"管理者 {self.name} (Lv.{self.level})"

# dataclass (3.7+) — ボイラープレート削減
from dataclasses import dataclass

@dataclass
class Point:
    x: float
    y: float = 0.0

p = Point(1.0, 2.0)
print(p)                       # Point(x=1.0, y=2.0)

f-string と文字列操作

name = "Taro"
age = 30
pi = 3.14159

# f-string (3.6+) — 推奨
s1 = f"{name} は {age} 歳"
s2 = f"円周率は {pi:.2f}"      # 小数点 2 桁
s3 = f"{age:>5d}"              # 右寄せ 5 桁
s4 = f"{age:0>5d}"             # ゼロ埋め: 00030

# 古い書き方
s5 = "{} は {} 歳".format(name, age)
s6 = "%s は %d 歳" % (name, age)

# 主要メソッド
"Hello".upper()                # "HELLO"
"  abc  ".strip()              # "abc"
"a,b,c".split(",")             # ["a","b","c"]
",".join(["a","b","c"])        # "a,b,c"
"hello".replace("l", "L")      # "heLLo"
"abc".startswith("ab")         # True

例外処理と with 文

# try / except / finally
try:
    n = int(input())
    result = 10 / n
except ZeroDivisionError:
    print("0 で割れません")
except ValueError as e:
    print(f"数値変換エラー: {e}")
except Exception as e:
    print(f"その他: {e}")
else:
    print(f"成功: {result}")
finally:
    print("必ず実行")

# with 文(リソース自動解放)
with open("data.txt", "r", encoding="utf-8") as f:
    content = f.read()
# f.close() 不要

# 複数 with
with open("in.txt") as fin, open("out.txt", "w") as fout:
    fout.write(fin.read())

PEP 8 (公式スタイルガイド)

  • インデントは スペース 4 個(タブ禁止)
  • 1 行 79 文字以内(docstring 72 文字)
  • 変数・関数は snake_case、クラスは PascalCase、定数は UPPER_CASE
  • import は 標準ライブラリ → サードパーティ → 自作の順
  • 関数の間は 2 行空ける、メソッドの間は 1 行
  • black / ruff 等の formatter で自動整形が現代的

FAQ

Q: なぜインデントで構文を表すのか?
A: 「読みやすいコード = 動くコード」の哲学。{ } 不要で視覚的に構造がわかります。

Q: 型ヒントは必須?
A: 任意ですが、規模が大きくなるほど推奨mypy / pyright で静的解析できます。

Q: print デバッグから抜けたい
A: logging モジュール、pdb(標準デバッガ)、VS Code のデバッガを使いましょう。

編集
Post Share
子ページ
  1. 基本的なルール
  2. 変数
  3. 演算子
  4. 標準ライブラリ
  5. 外部ライブラリ
  6. 制御構文
  7. リスト(配列)
  8. タプル
  9. セット
  10. 辞書(dict)
  11. クラスとメソッド
  12. 継承の概念と必要性
  13. 継承の構文
  14. コンストラクタ
  15. cookieの値の設定と取得
  16. 例外処理
  17. 例外を文字列で出力する方法
  18. httpリクエスト(curl)をする方法
  19. Responseオブジェクトの中身の確認
  20. 変数が空かどうか判定する方法
  21. タイムゾーンの設定と現在日時の取得と文字列化
  22. シングルクォーテーションとダブルクォーテーションの違い
同階層のページ
  1. 環境構築
  2. 文法
  3. フレームワーク
  4. ライブラリ
  5. バージョンの確認
  6. エラー一覧
  7. Webスクレイピング
  8. Excelの読み込み/書き込み操作(openpyxl編)
  9. Excelのセルの値を読み込む方法(xlrd編)
  10. ローカルで独立して動くPythonプログラムとパッケージの事前インストール方法
  11. プログラム実行時のパスを取得