Pythonは初心者にやさしいと言われますが、それでも学んでいく中で「難しい」と感じるポイントがいくつかあります。
ただし、それらをしっかり理解すれば、Pythonの強力さや便利さも見えてきます。
以下では、Pythonの中でも多くの人が難しいと感じやすいポイントをピックアップし、できるだけ分かりやすく説明します。
インデント(字下げ)の重要性
難しい理由
他の言語(例:JavaScriptやC言語)では波かっこ {}
でブロック(まとまり)を示しますが、Pythonはインデント(空白やタブ)でそれを管理します。
分かりやすい説明
Pythonでは、「字下げされた行はセットで動く」と思ってください。
if
文の中に含めたい処理はすべて同じように字下げする必要があります。
1行でもインデントがずれていると、エラーになります。
ポイント
- スペースとタブの混在に注意! → 基本的にはスペース4つで統一。
- VSCodeやPyCharmなどのエディタを使えば自動補正されるので安心です。
スコープ(変数の有効範囲)
難しい理由
関数の中と外で同じ名前の変数を使った場合、どっちがどっちなのか混乱しやすい。
分かりやすい説明
Pythonでは、変数の有効範囲は「関数内か、外か」で決まります。
x = 10
def show():
x = 5
print(x)
show() # 5が表示される
print(x) # 10が表示される
関数の中の x
と外の x
は別物。
これはスコープ(範囲)のルールに従っているからです。
ポイント
- 関数内で外の変数を変更したいときは
global
を使う。 - ただし、できるだけスコープを分けて使う方が安全です。
イテレータとジェネレータ
難しい理由
for
文で普通に回せるのに、「イテレータ」や「ジェネレータ」という言葉が出てくると急に難しく感じます。
分かりやすい説明
- イテレータ:1つずつ要素を取り出せる仕組み。
- ジェネレータ:大量のデータを効率的に処理するための特殊な関数。
def count_up():
for i in range(5):
yield i
gen = count_up()
print(next(gen)) # 0
print(next(gen)) # 1
yield
は一時停止して値を返す魔法のキーワードです。
ポイント
- メモリ節約になるので、大量データの処理に強い。
yield
を見たら「ジェネレータ関数なんだな」と考える。
クラスとオブジェクト指向
難しい理由
関数は分かりやすいけど、「クラス」や「self」といった用語が出ると混乱する人が多いです。
分かりやすい説明
クラスは「設計図」、オブジェクトはその設計図から作られた「実物」。
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(self.name + "が吠えた!")
p = Dog("ポチ")
p.bark() # ポチが吠えた!
self
は「自分自身のこと」だと思えばOKです。
ポイント
- クラスは複雑な処理をまとめるときに便利。
- 「関数だけでは整理しきれない」と思ったらクラスの出番。
例外処理(try / except)
難しい理由
何かがエラーになったときにどう対処するかを考える必要があります。
分かりやすい説明
「エラーが出そうな処理」を try
の中に書いて、万が一のとき except
で対応する。
try:
x = int(input("数字を入れてください:"))
except ValueError:
print("数字じゃないよ!")
ポイント
- エラーが起きても止まらないようにするための仕組み。
try
はあくまで「試しにやってみる」という感覚で覚えると良い。
まとめ

難しい点 | 覚え方・コツ |
---|---|
インデント | コードの「段落」だと考える |
スコープ | どこで変数が有効か、地図を描くように理解 |
イテレータ・ジェネレータ | 少しずつ取り出す「おにぎり機」だと思う |
クラス・オブジェクト | 設計図と製品、自分(self)は製品そのもの |
例外処理 | トラブル対策用の「保険処理」 |
以上、Pythonの難しいところについてでした。
最後までお読みいただき、ありがとうございました。