Python基礎文法まとめ

仮想環境の作成

Windows

python -m venv venv
venv\Scripts\activate

Mac

python3 -m venv venv
source venv/bin/activate

変数とデータ型

変数とは

  • Pythonでは宣言の必要がなく、代入と同時に変数が作られる
x = 10       # 整数を代入
name = "Bob" # 文字列を代入
  • 型は動的に決まり、あとから別の型を代入することも可能
x = 10
x = "Hello"  # 同じ変数に文字列を代入

主なデータ型

  • int:整数
  • float:少数(浮動小数点数)
  • str:文字列
  • bool:TrueまたはFalse
  • list:ミュータブル(=変更可能)な配列
  • tuple:イミュータブル(=変更不可能)な配列
  • set:重複なしの集合
  • dict:キーと値のペアを持つ辞書型(いわゆる連想配列)

データ型を確認する方法

x = 100
print(type(x))  # <class 'int'>

型変換(キャスト)する方法

x = "123"
num = int(x)       # 文字列 → 整数
pi = float("3.14") # 文字列 → 小数
s = str(456)       # 整数 → 文字列

演算子の種類

算術演算子

a = 10
b = 3

print(a + b)   # 足し算 → 13
print(a - b)   # 引き算 → 7
print(a * b)   # 掛け算 → 30
print(a / b)   # 割り算(小数) → 3.333...
print(a // b)  # 割り算(整数) → 3
print(a % b)   # 剰余(あまり) → 1
print(a ** b)  # 累乗 → 1000

比較演算子

値を比べて、結果を True または False で返す

x = 5
y = 10

print(x == y)   # 等しいか → False
print(x != y)   # 等しくないか → True
print(x > y)    # より大きいか → False
print(x < y)    # より小さいか → True
print(x >= y)   # 以上か → False
print(x <= y)   # 以下か → True

論理演算子

条件を組み合わせるときに使う

a = True
b = False

print(a and b)  # 両方とも True → False
print(a or b)   # どちらかが True → True
print(not a)    # 否定 → False

文字列のフォーマット

f文字列(f-strings)

  • Python 3.6以降で使える新しい書き方
  • 文字列の中に直接変数や式を埋め込めるので、読みやすく書きやすい
name = "Alice"
age = 25
print(f"My name is {name}, and I am {age} years old.")
# 出力: My name is Alice, and I am 25 years old.

# 式も書ける
print(f"Next year I will be {age + 1}.")
# 出力: Next year I will be 26.

デバッグにも便利(= オプション)

x = 10
print(f"{x=}")  # 出力: x=10

str.format() メソッド

  • Python 2.7以降、3.x全般で使える
  • プレースホルダー {} を使って埋め込み
name = "Bob"
age = 30
print("My name is {}, and I am {} years old.".format(name, age))
# 出力: My name is Bob, and I am 30 years old.

インデックスや名前でも指定可能

# インデックス指定
print("My name is {0}, and I am {1} years old. {0} likes Python.".format(name, age))

# 名前付き引数
print("My name is {n}, and I am {a} years old.".format(n=name, a=age))

旧式(%演算子)

今のPythonでは f文字列.format() を使うのが主流だが、古いコードで見かける可能性あり

name = "Charlie"
age = 22
print("My name is %s, and I am %d years old." % (name, age))
  • %s → 任意のオブジェクトを文字列化して表示(もっとも柔軟)
  • %d → 整数として表示(小数を渡すと切り捨てではなく型エラー)
  • %f → 浮動小数点数(小数)として表示
  • %x / %o → 16進数 / 8進数として表示

%d に文字列を渡すなど、指定子と型が合わない場合はエラーになる

条件分岐

基本: if / elif / else

x = 10

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

三項演算子(1行で条件分岐)

文法:[Trueの場合] if [条件式] else [Falseの場合]

x = 5
result = "even" if x % 2 == 0 else "odd"
print(result)  # odd

Python 3.10以降: match文(パターンマッチ)

基本例

  • case _: は「デフォルト(switchのdefault)」に相当
status = 404

match status:
    case 200:
        print("OK")
    case 404:
        print("Not Found")
    case 500:
        print("Server Error")
    case _:
        print("Unknown")

複数条件をまとめる

match status:
    case 400 | 401 | 403:
        print("Client Error")
    case 500 | 502 | 503:
        print("Server Error")

構造の分解(Pythonらしい使い方)

リストや辞書の形に応じて分岐できる

point = (3, 4)

match point:
    case (0, 0):
        print("Origin")
    case (x, 0):
        print(f"On X axis at {x}")
    case (0, y):
        print(f"On Y axis at {y}")
    case (x, y):
        print(f"Point at ({x}, {y})")

繰り返し処理

for文

リストや文字列など「イテラブルなオブジェクト」を順番に取り出す

fruits = ["apple", "banana", "cherry"]

for fruit in fruits:
    print(fruit)
# apple
# banana
# cherry

数値の繰り返しには range() が便利

for i in range(5):  # 0から4まで
    print(i)

while文

条件式が True の間、処理を繰り返す

count = 0

while count < 5:
    print(count)
    count += 1

無限ループを作る例

while True:
    cmd = input(">>> ")
    if cmd == "exit":
        break

ループを制御: break / continue / else

break : ループを途中で抜ける(終了する)

for i in range(10):
    if i == 5:
        break
    print(i)
# 0 1 2 3 4

continue : その回の処理をスキップする

for i in range(5):
    if i == 2:
        continue
    print(i)
# 0 1 3 4

else(Python特有)ループが breakせずに正常終了 したときだけ実行

利用例1)値の探索。else があることで「最後まで探したけど見つからなかった」と書きやすくなる

numbers = [1, 3, 5, 7]

target = 4
for n in numbers:
    if n == target:
        print("見つかった")
        break
else:
    print("見つからなかった")

利用例2)ループ処理の成功/失敗判定。全試行失敗した場合だけ else が動く

for attempt in range(3):
    print(f"試行 {attempt+1}")
    if some_condition():  # 成功条件
        print("成功")
        break
else:
    print("3回試しても失敗")

例外処理

基本構文

try:
    # エラーが起きるかもしれない処理
    x = int("abc")
except ValueError:
    # 特定のエラーをキャッチ
    print("数値に変換できませんでした")

複数の例外を捕捉

try:
    x = 10 / 0
except ValueError:
    print("数値エラー")
except ZeroDivisionError:
    print("0で割ることはできません")

例外をまとめて捕捉

  • as e で例外オブジェクトを変数に受け取れる
try:
    x = 10 / 0
except (ValueError, ZeroDivisionError) as e:
    print("エラーが発生:", e)

else句

  • 例外が発生しなかったとき に実行される
try:
    x = int("100")
except ValueError:
    print("変換エラー")
else:
    print("成功:", x)

finally句

  • 例外の有無にかかわらず必ず実行される
try:
    f = open("data.txt", "r")
    data = f.read()
except FileNotFoundError:
    print("ファイルが見つかりません")
finally:
    print("終了処理")
    if 'f' in locals():
        f.close()

関数の定義

普通の関数定義

def 関数名(引数): で定義

def greet(name):
    return f"Hello, {name}!"

print(greet("Alice"))  # Hello, Alice!
  • 戻り値がなければ return を省略できる(暗黙に None が返る)
  • デフォルト引数や可変長引数も使える
def greet(name="Guest"):
    print(f"Hello, {name}")

greet()          # Hello, Guest
greet("Bob")     # Hello, Bob
def add(*args):  # 可変長引数
    return sum(args)

print(add(1, 2, 3))  # 6

無名関数(lambda式)

JavaScriptの「アロー関数」に相当するのは、Pythonの lambda です

文法:lambda 引数: 戻り値

# 普通の関数定義
def square(x):
    return x * x

# lambda式で書くと
square = lambda x: x * x

print(square(5))  # 25

lambda は関数を「その場でちょっとだけ」作りたいときに便利。代表例は map, filter, sorted などに渡す場合

nums = [1, 2, 3, 4, 5]

# 各要素を2倍にする
doubled = list(map(lambda x: x * 2, nums))
print(doubled)  # [2, 4, 6, 8, 10]

# 偶数だけ抽出
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)  # [2, 4]

# カスタムソート
words = ["apple", "banana", "cherry"]
sorted_words = sorted(words, key=lambda w: len(w))
print(sorted_words)  # ['apple', 'cherry', 'banana']

クラスの定義

クラスの基本定義

  • selfそのインスタンス自身 を表すキーワード(Javaの this に相当)
  • インスタンス変数は self.変数名 として定義・参照する
class Person:
    # コンストラクタ(インスタンス生成時に呼ばれる)
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # メソッド(インスタンスに属する関数)
    def greet(self):
        return f"My name is {self.name}, and I am {self.age} years old."

インスタンス化して使う例

p1 = Person("Alice", 25)
print(p1.greet())  
# My name is Alice, and I am 25 years old.

クラス変数とインスタンス変数

class Dog:
    species = "Canine"   # クラス変数(全インスタンスで共通)

    def __init__(self, name):
        self.name = name  # インスタンス変数(個別に持つ)

d1 = Dog("Pochi")
d2 = Dog("Koro")

print(d1.species, d1.name)  # Canine Pochi
print(d2.species, d2.name)  # Canine Koro

継承

既存のクラスをもとに新しいクラスを作る方法

class Animal:
    def speak(self):
        print("Some sound")

class Cat(Animal):
    def speak(self):
        print("Meow!")

c = Cat()
c.speak()  # Meow!
  • オーバーライド: 親クラスのメソッドを子クラスで上書きできる
  • super() を使えば親クラスのメソッドを呼び出せる
class Dog(Animal):
    def speak(self):
        super().speak()
        print("Woof!")

特殊メソッド(ダンダーメソッド)

__xxx__ という名前のメソッドを定義すると、クラスの挙動をカスタマイズできます。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):   # printしたときの文字列
        return f"({self.x}, {self.y})"

    def __add__(self, other):  # + 演算子のオーバーロード
        return Point(self.x + other.x, self.y + other.y)

p1 = Point(2, 3)
p2 = Point(4, 5)
print(p1)        # (2, 3)
print(p1 + p2)   # (6, 8)

__name__=="__main__": みたいなやつの意味

仕組み

Pythonファイルを実行すると、そのモジュールには自動的に変数 __name__ が設定される

  • 直接スクリプトとして実行した場合 → __name__ == "__main__"
  • モジュールとして他のファイルにインポートされた場合 → __name__ == "ファイル名"

典型的な使い方

def main():
    print("Hello from main!")

if __name__ == "__main__":
    main()
  • この場合、スクリプトを直接 python myscript.py として実行すると main() が呼ばれる
  • 逆に、他のファイルから import myscript すると main() は実行されない

なぜ書くのか

  1. 再利用性を高めるため
    • ライブラリや関数だけを提供したいときに、テストコードや実行処理を勝手に走らせないようにできる
  2. テストやデバッグを仕込める
    • モジュールを作りながら、その下に if __name__ == "__main__": ブロックを書いておけば、単体テストとして動かせる

書いた方がいい場面

  • スクリプトを「直接実行する場合」と「モジュールとしてインポートする場合」の両方を想定するとき
  • 小規模スクリプトだけなら必須ではないが、学習段階から癖づけておくと良い

まとめ

  • __name__ == "__main__" は「このファイルが直接実行されたときだけ動く部分」を書くための仕組み
  • 再利用性・テスト性を考えると書いた方がベター
  • 実務や共有コードではほぼ標準的に書かれている

つまり「学習用スクリプトだけならなくてもよいが、実践的なコードでは書くのが推奨」という位置づけ

-Python