0Pricing
Python Academy · レッスン

戻り値とスコープ

return 文と変数のスコープ(ローカルとグローバル)を理解します。

「戻り値とスコープ」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

概要

予測可能でバグのないPython関数を書くには、return文と変数のスコープを理解することが基本です。

return文

return expr は関数を終了し、exprを呼び出し元に返します。値を指定しないreturnはNoneを返します。
def double(x):
    return x * 2
print(double(5))

早期return

return文は複数あっても問題ありません。最初に実行されたreturnで関数は終了します。ガード節に便利です。
def abs_val(x):
    if x < 0:
        return -x
    return x
print(abs_val(-7))

ローカルスコープ

関数内で作成した変数はローカル変数であり、関数の外には存在しません。
def f():
    x = 10
    print(x)
f()
# print(x)  # NameError

グローバルスコープ

モジュールレベルで定義された変数はグローバル変数です。関数は宣言なしでグローバル変数を読み取れます。
name = 'Alice'
def greet():
    print('Hello', name)  # reads global
greet()

globalキーワード

関数内でglobal xとすると、グローバル変数に値を書き込めます。コードの動作を把握しにくくなるため、使用は最小限にしてください。
counter = 0
def increment():
    global counter
    counter += 1
increment()
print(counter)

nonlocalキーワード

ネストした関数内でnonlocal xとすると、外側のスコープ(ただしグローバルスコープではない)の変数に値を書き込めます。
def make_counter():
    count = 0
    def inc():
        nonlocal count
        count += 1
        return count
    return inc
c = make_counter()
print(c(), c())

LEGBルール

Pythonは名前を、ローカル → 外側の関数 → グローバル → 組み込みの順に解決します。これがLEGBルールです。
x = 'global'
def outer():
    x = 'enclosing'
    def inner():
        print(x)  # enclosing
    inner()
outer()

複数の値を返す

def f(): return 1, 2, 3 はタプルを返します。a, b, c = f() のようにアンパックできます。
def stats(lst):
    return min(lst), max(lst), sum(lst)/len(lst)
lo, hi, avg = stats([1,2,3,4,5])
print(lo, hi, avg)

関数を返す(クロージャ)

関数は別の関数を返せます。内側の関数は外側のスコープを記憶します。これがクロージャです。
def make_adder(n):
    def adder(x):
        return x + n
    return adder
add5 = make_adder(5)
print(add5(3))

Noneとreturnの省略

値がないことを示す場合は、常にNoneを明示的に返してください。暗黙的なNoneに頼ることも有効ですが、明示したほうが明確です。
def find(lst, val):
    for i, x in enumerate(lst):
        if x == val:
            return i
    return None
print(find([1,2,3], 9))

理解度チェック

LEGBルールでは、最後にどのスコープが調べられますか?

まとめ

returnは値を返して関数を終了します。ローカル変数は外に漏れません。外側のスコープに書き込むにはglobalまたはnonlocalを使います。LEGBはLocal、Enclosing、Global、Built-inの順です。

次へ進む

よくできました。次のレッスンに進み、学習をさらに進めましょう。

よくある質問

「戻り値とスコープ」レッスンは無料ですか?

はい。「戻り値とスコープ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「戻り値とスコープ」で何を学びますか?

return 文と変数のスコープ(ローカルとグローバル)を理解します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「戻り値とスコープ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 関数の定義と呼び出し
  2. デフォルト引数とキーワード引数
  3. args と kwargs
  4. 戻り値とスコープ
← Python Academyに戻る