第5章: メソッドとスコープ

5-method-scope

この章では、Pythonにおけるメソッド(関数)とスコープ(変数の有効範囲)について学びます。関数はコードの再利用や可読性の向上に非常に重要な役割を果たし、スコープは変数がどこで利用できるかを決定します。これらの概念を理解することで、複雑なプログラムを効率的に作成できるようになります。

目次

5.1 メソッド(関数)の定義と基本的な使用法

Pythonでは、defキーワードを使って関数を定義します。関数は、コードのブロックに名前をつけて、何度も繰り返し使用できるようにする仕組みです。

関数の基本構文

def 関数名(引数):
    # 関数が呼び出されたときに実行されるコード
    return 戻り値

例:関数の定義と呼び出し

def greet(name):
    return f"Hello, {name}!"

# 関数の呼び出し
message = greet("Alice")
print(message)

この例では、greetという関数がnameという引数を受け取り、「Hello, name!」というメッセージを返しています。

5.2 メソッドの引数と戻り値

関数は、引数(パラメータ)を受け取り、処理を行った結果を戻り値として返すことができます。引数を渡すことで、関数に対して特定のデータを処理させることができます。

引数のある関数

def add(a, b):
    return a + b

result = add(5, 3)
print(result)  # 8

戻り値がない関数

戻り値がない関数は、return文を省略するか、return Noneを明示的に指定します。戻り値がない関数は通常、何らかの動作を行うだけで結果を返しません。

def print_message():
    print("This is a message.")

print_message()  # "This is a message."が出力される

5.3 パラメーター修飾子 (ref, out, params)

Pythonには、他の言語にあるようなrefout修飾子はありませんが、同じような動作をさせることは可能です。たとえば、リストなどの可変オブジェクトを引数として渡すことで、関数内でそのオブジェクトを変更することができます。

リストを引数として渡す例

def modify_list(my_list):
    my_list.append(4)

numbers = [1, 2, 3]
modify_list(numbers)
print(numbers)  # [1, 2, 3, 4]

この例では、リストnumbersを関数modify_listに渡すと、その内容が変更されます。これは、リストが可変オブジェクトであるためです。

5.4 メソッドのオーバーロードとオーバーライド

Pythonでは、関数のオーバーロード(同じ関数名で異なる引数の組み合わせを持つ関数を定義すること)はサポートされていません。しかし、可変長引数を使って同じような動作を実現できます。

可変長引数を使ったオーバーロード風の関数

def add(*args):
    return sum(args)

print(add(1, 2))         # 3
print(add(1, 2, 3, 4))   # 10

オーバーライドは、サブクラスが親クラスから継承したメソッドを再定義することです。Pythonではクラスを使うと、簡単にオーバーライドができます。

例:メソッドのオーバーライド

class Animal:
    def speak(self):
        return "Animal sound"

class Dog(Animal):
    def speak(self):
        return "Woof!"

dog = Dog()
print(dog.speak())  # "Woof!"

この例では、DogクラスがAnimalクラスのspeakメソッドをオーバーライドしています。

5.5 ローカル変数のスコープと生存期間

スコープとは、変数が有効な範囲のことです。Pythonには、ローカルスコープグローバルスコープがあり、関数内で定義された変数はローカルスコープに属し、関数外でアクセスすることはできません。

ローカル変数の例

def my_function():
    local_var = 10  # ローカルスコープ内の変数
    print(local_var)

my_function()  # 10と表示される
print(local_var)  # エラー: local_varはスコープ外

ローカル変数は関数内でしか存在せず、関数が終了すると変数も消滅します。

グローバル変数の例

global_var = 20  # グローバルスコープの変数

def my_function():
    print(global_var)  # グローバル変数にアクセス可能

my_function()  # 20と表示される

グローバル変数は、関数の外で定義され、プログラム全体で使用することができます。ただし、グローバル変数は予期しない影響を与える可能性があるため、注意が必要です。

globalキーワード

関数内でグローバル変数を変更するには、globalキーワードを使用します。

counter = 0

def increment():
    global counter  # グローバル変数を修正
    counter += 1

increment()
print(counter)  # 1

この例では、globalキーワードを使って関数内でグローバル変数counterを変更しています。

まとめ

この章では、Pythonにおけるメソッド(関数)の定義、引数と戻り値、スコープ(変数の有効範囲)について学びました。これらの概念を理解することで、プログラムの可読性や再利用性を向上させることができます。次の章では、クラスとオブジェクト指向プログラミングについて詳しく学びます。

目次