Python関数の基本概念と実践的な活用方法

関数を使用するメリット

  1. モジュール化と構造化: コードを論理的な単位に分割し、可読性と保守性を向上させる
  2. コード再利用: 同じ処理を繰り返し記述する必要がなくなる
  3. 抽象化とカプセル化: 内部実装を隠蔽し、「何をするか」に集中できる
  4. パラメータ化: 異なる入力に対応できる柔軟性
  5. テスト容易性: 入力と出力に焦点を当てた単体テストが可能

奇数判定関数の実例

def check_odd(number):
    if number % 2 != 0:
        print(f"{number} は奇数です")
        return True
        
for i in range(10):
    if not check_odd(i):
        print(f"{i} は偶数です")

関数定義の基本構造

基本構文

def 関数名(引数):
    処理内容

スコープ規則

Pythonの変数探索順序(LEGBルール):

  • L: Local(関数内スコープ)
  • E: Enclosed(外側の関数スコープ)
  • G: Global(モジュールスコープ)
  • B: Built-in(組み込みスコープ)

可変長引数の扱い

def process_data(*args, **kwargs):
    print("位置引数:", args)
    print("キーワード引数:", kwargs)

process_data(1, 2, 3, name="Alice", age=25)

ラムダ式の活用

# 数値リストのソート例
numbers = [3, 1, 4, 2]
sorted_numbers = sorted(numbers, key=lambda x: x % 2)
print(sorted_numbers)

クロージャの実装

def power_generator(exponent):
    def inner(base):
        return base ** exponent
    return inner

square = power_generator(2)
cube = power_generator(3)

print(square(5))  # 25
print(cube(5))    # 125

ジェネレータ関数

def fibonacci_sequence(limit):
    a, b = 0, 1
    while a < limit:
        yield a
        a, b = b, a + b

for num in fibonacci_sequence(100):
    print(num)

高階関数の応用

map関数の使用例

temperatures = [('東京', 25), ('大阪', 28), ('札幌', 20)]
celsius_to_f = lambda data: (data[0], (9/5)*data[1] + 32)
converted = list(map(celsius_to_f, temperatures))
print(converted)

filter関数の使用例

scores = [75, 82, 58, 91, 64, 53]
passing_scores = list(filter(lambda x: x >= 60, scores))
print(passing_scores)

reduce関数の使用例

from functools import reduce
product = reduce(lambda x, y: x * y, range(1, 6))
print(product)  # 120 (5の階乗)

タグ: Python 関数 ラムダ式 クロージャ ジェネレータ

5月14日 00:05 投稿