2026年8月7日に加筆・統合しました
前編・後編に分けていた記事を1本にまとめ、コードが正しく表示されていなかった箇所を修正しました(<class 'int'> の山かっこが消えていました)。
この記事について
Pythonは、AIの話題とともに一気に広まった言語です。ただ、機械学習だけの言語ではなく、書きやすさと、ライブラリの多さから、いろいろな場所で使われています。
この記事では、変数の作り方からクラスまでを一度に扱います。C言語と比べながら書いているので、他の言語を触ったことがある方は違いが見えやすいと思います😊
Pythonとは
1991年に登場した言語で、読みやすさを重視して設計されています。C言語が「機械に近い側」だとすると、Pythonは「人に近い側」です。
| C言語 | Python | |
|---|---|---|
| 型の宣言 | 必要(int x = 10;) | 不要(x = 10) |
| ブロックの区切り | 波かっこ { } | インデント(字下げ) |
| 行末 | セミコロン必須 | 不要 |
| 実行のしかた | 翻訳してから実行 | そのまま実行できる |
| メモリの管理 | 自分で借りて返す | 自動で片づけてくれる |
書く量が減るぶん、実行する速さはC言語に及びません。そのため、重い計算の部分だけC/C++で書かれたライブラリを呼ぶ、という使い方が一般的です。機械学習でPythonが使われているのも、この形が取れるからです。
変数とデータ型
# 変数(型を書かない。入れた値で決まる)
x = 10
name = "eight"
flag = True
# あとから別の型を入れてもよい
x = "十" # C言語ではできない
# 型の確認
print(type(x)) # <class 'str'>
print(type(name)) # <class 'str'>
型を書きません。入れた値によって決まり、あとから別の種類を入れても構いません。楽な反面、思っていたのと違う型が入っていても実行するまで気づけないという面もあります。
| 型 | 中身 | 例 |
|---|---|---|
int | 整数 | 10 |
float | 小数 | 3.14 |
str | 文字列 | "eight" |
bool | 真偽 | True / False |
list | 並び(変えられる) | [1, 2, 3] |
dict | 名前と値の対 | {"name": "eight"} |
tuple | 並び(変えられない) | (10, 20) |
リスト・辞書・タプルの使い分け
numbers = [1, 2, 3, 4, 5] # list … 順番があり、あとから変えられる
person = {"name": "eight", "age": 30} # dict … 名前で引く
point = (10, 20) # tuple … 順番があり、変えられない
numbers.append(6) # list は追加できる
print(person["name"]) # eight
# point[0] = 99 # ← tuple なのでエラーになる
使い分けの目安はこうです。
- list … あとから足したり並べ替えたりするもの
- dict … 「名前で引きたい」もの。設定やデータのまとまりに向く
- tuple … 変えたくないもの。座標や、関数から複数の値を返すときによく使う
print と f文字列
print("Hello, World!")
x = 42
print(f"xの値は{x}です") # f文字列(先頭のfが目印)
print(f"計算もできます:{x * 2}") # 84
# 桁を揃えたいとき
pi = 3.14159
print(f"{pi:.2f}") # 3.14
C言語の printf は %d のような記号で型を指定しましたが、Pythonのf文字列は中かっこの中にそのまま式を書けます。型を気にしなくてよく、計算も書けるので、慣れるとかなり楽です😊
★インデントがブロックになる
Pythonでいちばん最初に戸惑うのがここだと思います。波かっこがなく、字下げの深さがそのままブロックの範囲になります。
# Python はインデント(字下げ)がそのままブロックの範囲になる
if x > 0:
print("A") # if の中
print("B") # if の中
print("C") # if の外
# ★ずれるとエラーになるか、意図と違う動きになる
⚠ タブとスペースを混ぜない
見た目が同じでも、タブとスペースが混ざると Python はエラーにします。スペース4つに統一するのが一般的です。エディタの設定で「タブをスペースに変換」しておくと事故りません。
条件分岐
x = 10
if x > 0:
print("正の数")
elif x == 0:
print("ゼロ")
else:
print("負の数")
# 3.10以降なら match 文も使える(C言語の switch に近い)
match x:
case 1:
print("one")
case 10:
print("ten")
case _:
print("other")
else if ではなく elif と書きます。また、長らくPythonには switch がありませんでしたが、3.10から match 文が使えるようになりました。単なる値の一致だけでなく、形が一致するかまで見られるので、switchより少し賢い作りになっています。
繰り返し
# for文:範囲や中身をひとつずつ取り出す
for i in range(5): # 0,1,2,3,4
print(i)
for name in ["A", "B", "C"]:
print(name)
# 番号もいっしょに欲しいとき
for i, name in enumerate(["A", "B", "C"]):
print(i, name)
# while文:条件が満たされる間
n = 0
while n < 5:
print(n)
n += 1
Pythonの for は「回数」ではなく「中身をひとつずつ取り出す」という考え方です。リストでも文字列でもファイルの各行でも、同じ書き方で回せます。番号もほしいときは enumerate を使うのが定番です。
関数
def greet(name):
return f"こんにちは、{name}さん!"
print(greet("eight"))
# 既定値を持たせられる
def greet2(name, suffix="さん"):
return f"こんにちは、{name}{suffix}!"
print(greet2("eight")) # こんにちは、eightさん!
print(greet2("eight", "先生")) # こんにちは、eight先生!
# 個数の決まらない引数
def total(*numbers):
return sum(numbers)
print(total(1, 2, 3, 4)) # 10
戻り値の型を書かないのはC言語との大きな違いです。既定値を持たせられるので、引数を省略できる関数が簡単に書けます。
クラスと継承
データと、それを扱う処理をひとまとめにする仕組みです。C言語では構造体とポインタで似た形を作りましたが、Pythonには最初から用意されています。
class Animal:
def __init__(self, name): # 生成されたときに呼ばれる
self.name = name # self は「この個体自身」
def speak(self):
print(f"{self.name}が鳴いています")
class Dog(Animal): # Animal を受け継ぐ
def speak(self): # 同じ名前で上書きできる
print(f"{self.name}:ワン!")
animal = Animal("なにか")
animal.speak() # なにかが鳴いています
dog = Dog("ポチ")
dog.speak() # ポチ:ワン!
ポイントは2つです。
__init__… 生成されたときに1回だけ呼ばれます。ここで初期値を入れますself… 「この個体自身」を指します。メソッドの第1引数に必ず書くのがPythonの流儀です
class Dog(Animal): と書くと Animalの機能を受け継ぎます(継承)。同じ名前のメソッドを書けば上書きできるので、「動物はみんな鳴くが、鳴き方は種類ごとに違う」という書き方ができます。
まとめ
Pythonの基本をひととおり見てきました。
- 型を書かない。入れた値で決まり、あとから変えてもよい
- ★インデントがそのままブロックの範囲。スペース4つに統一する
- list(変えられる)・tuple(変えられない)・dict(名前で引く)を使い分ける
- f文字列なら中かっこに式をそのまま書ける
forは回数ではなく中身をひとつずつ取り出すもの- クラスでは
__init__とselfが要点。継承でメソッドを上書きできる
書きやすさのぶん実行は速くありませんが、やりたいことを短く書けるのがPythonの持ち味です。このあと MediaPipeを使った画像認識 でも、実際に短いコードで動くものを作っています😊
それでは、今回はここまで。最後までありがとうございました😊