0Pricing
Python Academy · レッスン

第一級関数

関数を渡したり返したりします

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

関数はオブジェクトです

Pythonでは、関数は第一級オブジェクトです。数値や文字列と同じように、変数への代入、データ構造への格納、引数としての受け渡し、他の関数からの返却ができます。

def greet():
    return 'hi'
print(type(greet))
print(greet())

関数を変数に代入する

関数名は単なる参照です。別の名前に代入すれば、その名前を通じて関数を呼び出せます。関数自体を参照するときは、括弧を付けません。

def shout(text):
    return text.upper()
yell = shout
print(yell('hello'))

データ構造内の関数

関数をリストや辞書に格納し、後から検索して動的に呼び出せます。

def add(a, b):
    return a + b
def sub(a, b):
    return a - b
ops = {'+': add, '-': sub}
print(ops['+'](10, 4))
print(ops['-'](10, 4))

関数を引数として渡す

別の関数をパラメーターとして受け取る関数を、高階関数と呼びます。渡される関数が引数です。

def apply(func, value):
    return func(value)
print(apply(str.upper, 'cat'))
print(apply(len, 'cat'))

mapは第一級関数を利用する

mapのような組み込み関数は、関数を受け渡す仕組みに基づいています。ここでは、1つの関数をすべての項目に適用しています。

def square(n):
    return n * n
result = list(map(square, [1, 2, 3, 4]))
print(result)

filterは述語を受け取る

filterは、渡された関数がTrueを返す項目を残します。何を残すかは、その関数が決定します。

def is_even(n):
    return n % 2 == 0
print(list(filter(is_even, range(10))))

関数を返す

関数は別の関数を返すことができます。返された関数は、後から個別に呼び出せます。

def get_greeter():
    def greeter(name):
        return 'Hello ' + name
    return greeter
f = get_greeter()
print(f('Ada'))

ソートキーとしての関数

sortedはkey関数を受け取り、各項目を並べ替えに使用する値へ変換します。

words = ['banana', 'fig', 'cherry']
by_length = sorted(words, key=len)
print(by_length)

手軽な関数としてのラムダ

lambdaは小さな無名関数です。1回限りの引数として使用するのに適しています。

nums = [5, 1, 4, 2]
print(sorted(nums, key=lambda x: -x))

関数には属性があります

関数はオブジェクトなので、__name__のような属性や、__doc__に格納されたdocstringを持ちます。

def hello():
    'Says hello.'
    return 'hi'
print(hello.__name__)
print(hello.__doc__)

ディスパッチテーブルを構築する

これらの考え方を組み合わせると、長いif/elifの連鎖を使わずに、名前から関数を選択するすっきりしたディスパッチテーブルを構築できます。

def start():
    return 'starting'
def stop():
    return 'stopping'
actions = {'start': start, 'stop': stop}
command = 'start'
print(actions[command]())

クイックチェック

Pythonで関数が「第一級」であるとは、どういう意味ですか?

復習:第一級関数

Pythonでは、次のことを学びました。

  • 関数は、代入、格納、受け渡し、返却ができるオブジェクトです。
  • 高階関数は、他の関数を受け取ったり返したりします(map、filter、sortedのkeyなど)。
  • lambdaは、手軽な無名関数を作成します。
  • これにより、長い条件分岐の代わりに、すっきりしたディスパッチテーブルを使用できます。
ops = {'double': lambda x: x * 2}
print(ops['double'](21))

よくある質問

「第一級関数」レッスンは無料ですか?

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

「第一級関数」で何を学びますか?

関数を渡したり返したりします ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「第一級関数」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 第一級関数
  2. クロージャと自由変数
  3. nonlocalと可変状態
  4. 部分関数
← Python Academyに戻る