cv.cm

コーディング · プログラミング言語

Python入門チュートリアル(初心者向け)

約9分で読めます

結論

Pythonは、波括弧ではなくインデントでブロックを表す読みやすい文法が特徴の、汎用のインタープリタ型言語です。Python 3をインストールし、print("Hello, world") を hello.py に保存して python3 hello.py で実行します。動的型付け、def で定義する関数、組み込みのリスト・辞書・集合、try/except による例外処理、そして充実した標準ライブラリが中心的な要素です。

正規表現テストを開く

Pythonとは何か、何に使われるか

Pythonは、1991年にGuido van Rossumが公開した高水準の動的型付け言語です。コードはインタープリタ(標準実装はCPython)で実行されるため、別途コンパイルする手順はありません。データ分析や機械学習(NumPy、pandas、PyTorch)、Webバックエンド(Django、Flask、FastAPI)、自動化スクリプト、科学技術計算、プログラミング教育などに使われています。Python 2は2020年にサポートが終了したので、学ぶならPython 3です。

Pythonのインストールと Hello, world の実行

Windows・macOSではpython.orgからインストーラーをダウンロードし、Linuxではパッケージマネージャーを使います。インストールは python3 --version で確認できます(Windowsでは py や python コマンドであることが多いです)。次のファイルを hello.py として保存します。

print("Hello, world")
python3 hello.py
# Hello, world

ファイルを指定せずに python3 を実行すると対話モード(REPL)が起動し、1行ずつ試すのに便利です。

変数と基本の型

変数は値を代入すると作られます。型の宣言は不要で、値自体が型を持ち、type(x) で確認できます。

型例備考
int42, -7, 10**20任意の大きさの整数
float3.14, 1e-364ビット浮動小数点数
boolTrue, False先頭は大文字
str"hi", 'hi'変更できないUnicode文字列
NoneNone値がないことを表す
name = "Ada"
age = 36
height = 1.65
print(f"{name} is {age} years old")  # Ada is 36 years old
print(7 / 2, 7 // 2, 7 % 2)          # 3.5 3 1
print(int("12") + 1)                 # 13

制御構文:if、for、while

ブロックはコロンで始まり、インデントで範囲を決めます(慣例では半角スペース4つ)。for ループは任意のシーケンスを順に処理し、range(n) は0からn−1までの数を返します。

score = 72
if score >= 90:
    grade = "A"
elif score >= 70:
    grade = "B"
else:
    grade = "C"
print(grade)  # B
for i in range(3):
    print(i)  # 0, then 1, then 2
n = 10
while n > 1:
    n = n // 2
print(n)  # 1

関数

関数は def で定義します。引数にはデフォルト値を設定でき、呼び出し側は名前を指定して渡せます。return のない関数は None を返します。

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"
print(greet("Lin"))                 # Hello, Lin!
print(greet("Lin", greeting="Hi"))  # Hi, Lin!
square = lambda x: x * x
print(square(5))                    # 25

def area(w: float, h: float) -> float: のような型ヒントは、意図を明示し、mypyなどのツールでコードを検査できるようにしますが、インタープリタ自体は型を強制しません。

リスト、タプル、辞書、集合

型リテラル順序変更可能主な用途
list[1, 2, 3]はいはい変更していく列
tuple(1, 2)はいいいえ固定された値のまとまり
dict{"a": 1}挿入順はいキーから値を引く
set{1, 2}いいえはい重複のない要素、所属判定
nums = [3, 1, 2]
nums.append(5)
nums.sort()
print(nums, nums[0], nums[-1], nums[1:3])  # [1, 2, 3, 5] 1 5 [2, 3]
ages = {"ann": 31, "bob": 25}
ages["cy"] = 40
for person, age in ages.items():
    print(person, age)
print(ages.get("zed", 0))  # 0
squares = [x * x for x in range(5) if x % 2 == 0]
print(squares)  # [0, 4, 16]

最後の行は内包表記(リスト内包表記)で、Pythonを代表する機能の一つです。ループと任意の条件を1つの式にまとめてリストを作れます。辞書や集合の内包表記も同じ書き方です。

特徴的な機能:アンパック、with、ジェネレータ

a, b = 1, 2
a, b = b, a            # swap without a temporary
first, *rest = [1, 2, 3, 4]
print(first, rest)     # 1 [2, 3, 4]
with open("notes.txt", "w", encoding="utf-8") as f:
    f.write("line one\n")   # file is closed automatically
def countdown(n):
    while n > 0:
        yield n
        n -= 1
print(list(countdown(3)))  # [3, 2, 1]

with 文は準備と後始末の処理を代わりに実行します(ここではエラーが起きてもファイルを確実に閉じます)。yield を使う関数はジェネレータで、値を1つずつ遅延生成するため、大きなデータでもメモリを節約できます。

try と except によるエラー処理

エラーは例外として送出されます。想定する例外の種類を指定して捕捉し、必ず実行したい処理には finally を使います。

def parse_age(text):
    try:
        age = int(text)
    except ValueError:
        print(f"not a number: {text!r}")
        return None
    if age < 0:
        raise ValueError("age cannot be negative")
    return age
print(parse_age("41"))   # 41
print(parse_age("abc"))  # not a number: 'abc', then None

小さな完成プログラム:単語カウンター

このスクリプトは、コマンドラインで指定したテキストファイルを読み、出現回数の多い単語を上位5件表示します。標準ライブラリだけを使います。

import sys
from collections import Counter
def top_words(path, n=5):
    with open(path, encoding="utf-8") as f:
        words = f.read().lower().split()
    cleaned = [w.strip(".,;:!?\"'()") for w in words]
    return Counter(w for w in cleaned if w).most_common(n)
if __name__ == "__main__":
    if len(sys.argv) != 2:
        sys.exit("usage: python3 count.py FILE")
    try:
        for word, count in top_words(sys.argv[1]):
            print(f"{count:5}  {word}")
    except FileNotFoundError:
        sys.exit(f"file not found: {sys.argv[1]}")

python3 count.py notes.txt で実行します。if __name__ == "__main__": の判定により、このファイルをモジュールとしてimportしても、スクリプト部分は実行されません。

初心者がよくやる間違い

  • タブと空白の混在や不揃いなインデントは IndentationError の原因になります。エディタで半角スペース4つを挿入するよう設定しましょう。
  • = は代入、== は比較です。is は None との比較(if x is None)にだけ使います。
  • input() は常に文字列を返します。計算の前に int() や float() で変換してください。
  • b = a ではリストはコピーされず、両方の名前が同じリストを指します。コピーには b = a.copy() か b = list(a) を使います。
  • パッケージはシステムのPythonではなく、仮想環境(python3 -m venv .venv)の中にインストールしましょう。

次のステップ

公式のPythonチュートリアルを一通り読み、ライブラリリファレンスで pathlib、json、datetime、itertools などのモジュールを調べてみましょう。サードパーティのパッケージを使うために pip と仮想環境を学び、unittest やpytestでテストを書きます。その後は、Web(DjangoまたはFastAPI)、データ分析(pandas)、自動化のいずれかに進みましょう。

よくある質問

Pythonは初心者に向いていますか?

はい。文法が短く自然な英語に近いこと、エラーメッセージが分かりやすいこと、REPLで1行ずつ試せることが理由です。実務でも広く使われているため、身につけたスキルが長く役立ちます。

Pythonはコンパイル言語ですか、インタープリタ言語ですか?

CPythonはソースコードをバイトコードにコンパイルし、そのバイトコードを解釈実行します。スクリプトを実行すると自動で行われるので、別にコンパイルする手順は不要です。

リストとタプルの違いは何ですか?

リストは変更可能で、要素の追加・削除・変更ができます。タプルは変更不可なので、固定された値のまとまりに使われ、辞書のキーにもできます。

Pythonのコードが遅いのはなぜですか?

純粋なPythonのループはコンパイル言語より遅くなります。組み込み関数や内包表記、内部のループをCで実行するNumPyなどのライブラリを使いましょう。

コマンドラインでは python と python3 のどちらを使うべきですか?

macOSや多くのLinuxでは python3 を使ってください。python は存在しなかったり、別のものを指していたりすることがあります。Windowsでは py ランチャーが一般的です。

コーディング講座の一覧