見出し画像

プログラミング学習~Python上級編~


はじめに

本記事ではPython学習の上級編として、「三項演算子」、「内包表記」、「ジェネレータ」について学習します。Python学習の初級編①~②、中級編の内容を理解していることを前提に進めていきますので、まだ読んでいない方は、ぜひ初級編①~②、中級編を読んでから本記事をご覧ください。

三項演算子

三項演算子とは?

Pythonの三項演算子(または条件演算子)は、条件分岐を単一の行で記載する方法になります。三項演算子は、単一の行で記載できるため従来の条件式よりもコンパクトにする事ができます。

三項演算子の使い方①

三項演算子は、<真の場合の値> if <条件式> else <偽の場合の値>の様にコーディングしていきます。

# 変数「traffic_light 」を用意
traffic_light = "blue"

if traffic_light == "blue":
    print("歩いて道を渡る")
else:                            
    print("止まる")

# 三項演算子
action = "歩いて道を渡る" if traffic_light == "blue" else "止まる" 
print(action)

三項演算子の使い方②

また、複数の条件が存在する場合は<真の場合の値> if <条件式> else (<真の場合の値> if <条件式> <偽の場合の値>」の様にコーディングしていきます。

# 変数「traffic_light 」を用意
traffic_light = "blue"

if traffic_light == "blue":  
    print("歩いて道を渡る")
elif traffic_light == "red":                             
    print("止まる")
else:
    print("走って道を渡る")

# 三項演算子
action = "歩いて道を渡る" if traffic_light == "blue" else ("止まる" if traffic_light == "red" else "走って道を渡る")
print(action)

内包表記

内包表記とは?

Pythonの内包表記は、リストや辞書、セットを簡潔に作成するための強力な機能です。内包表記を使うと、ループや条件分岐を一行で書くことができ、コードの可読性と効率性が向上します。

内包表記の使い方(リスト内包表記)

リスト内包表記とは、[式 for 要素 in イテラブル]の様にコーディングしていきます。また、リストに条件式を含む場合は[式 for 要素 in イテラブル if 条件]の様にコーディングしていきます。

# 2乗の計算結果をリストに格納する
ans = []
for num in range(1, 10):
  ans.append(num**2)
print(ans)

# リスト内包表記
ans = [num**2 for num in range(1, 10)]
print(ans)

# 2乗の計算結果が偶数の値をリストに格納する
ans = []
for num in range(1, 10):
  if num**2 % 2 == 0:
    ans.append(num**2)
print(ans)

# リスト内包表記(結果が偶数の値のみ格納)
ans = [num**2 for num in range(1, 10) if num % 2 == 0]
print(ans)

内包表記の使い方(辞書内包表記)

辞書内包表記とは、{キー: 値 for 要素 in イテラブル}の様にコーディングしていきます。また、条件式を含む場合は{キー: 値 for 要素 in イテラブル if 条件}の様にコーディングしていきます。

# 2乗の計算結果を「value」に、平方根を「key」とした辞書を作成
ans = {}
for num in range(1, 6):
  ans[num] = num **2
print(ans)

# 辞書内包表記
ans = {num: num**2 for num in range(1, 6)}
print(ans)  

# 2乗の計算結果が偶数の値を「value」に、平方根を「key」とした辞書を作成
ans = {}
for num in range(1, 6):
  if num**2 % 2 == 0:
    ans[num] = num **2
print(ans)

# 辞書内包表記(結果が偶数の値のみ格納)
ans = {num: num**2 for num in range(1, 6) if num % 2 == 0}
print(ans)  

ジェネレータ

ジェネレータとは?

Pythonのジェネレータは、データのシーケンスを逐次的に生成するための特殊な関数です。ジェネレータは、大量のデータを一度にメモリに読み込むことなく、必要なときにデータを一つずつ生成するため、メモリ効率が高く、大規模なデータ処理に非常に有用です。ジェネレータは、yield文を使って値を返します。簡単に言うと、「次のデータが必要になったら、そのときにデータをつくる」というものです。ジェネレータが呼び出されると、関数が実行されて値を返し、関数は一時停止する。次に呼び出されると、一時停止した箇所から再開されます。

ジェネレータの使い方

ジェネレータ関数は、通常の関数と同じように定義しますが、、return文の代わりにyield文を使って値を返します。ジェネレータ関数を呼び出すと、関数全体が実行されるのではなく、イテレータが返されます。このイテレータは、__next__()メソッドを呼び出すたびにジェネレータ関数の実行を再開し、次のyield文で停止します。

# 1~10を表示する場合
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# この時で1~10までのリストがメモリに保存される
print(numbers [0])
print(numbers [1])
print(numbers [2])

# ジェネレータを使用する
def generate_numbers():
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    for num in numbers:
        yield num

numbers = generate_numbers()
# この時点では1から10までの数値はまだ生成されていない

# `next`で呼ばれるたびに1つずつ数値を生成する
print(next(numbers))  
print(next(numbers))  
print(next(numbers))  

まとめ

この記事では、Pythonの「三項演算子」、「内包表記」、「ジェネレータ」という3つの重要な機能について詳しく説明しました。これらの機能を理解し、活用することで、Pythonプログラムの効率性と可読性を大幅に向上させることができます。実際の業務では「可読性」、「効率性」がとても重視されます。今後の学習でもこの様な部分を意識していきましょう。

この記事が気に入ったらサポートをしてみませんか?