第一級関数
関数を渡したり返したりします
「第一級関数」は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フィードバックを取得できます。ローカル設定は不要です。