0
0

More than 3 years have passed since last update.

関数を戻り値とするタイプの高階関数

Last updated at Posted at 2020-06-02

外でも結構されてる説明

を、もう少しわかりやすい命名にしたつもりです。

def k_minus_x(k):
    # もととなる関数。こいつが高階関数。
    def f(x):
        return k - x
    return f

five_minus_x = k_minus_x(5)    # x_minus_3は新しい関数と捉えてOK
print(five_minus_x(3))         # 2

print(k_minus_x(7)(3))         # 4

真価は場合分けのときなのでは?

試しに書いたのは、じゃんけんするだけのコード。
関数の中で関数を宣言しなくても使えるみたい。
当然もっとシンプルにできるけど、複雑な処理をさせたいときは結構使えそう。

def janken(hand: str):
    # もととなる関数。こいつが高階関数。
    if(hand == 'rock'):
        return print_paper
    elif(hand == 'paper'):
        return print_scissors
    elif(hand == 'scissors'):
        return print_rock


def print_rock():
    print('rock')


def print_paper():
    print('paper')


def print_scissors():
    print('scissors')


print('パターン1。返ってきた関数をそのまま実行する')
janken("rock")()    # paper
janken("paper")()    # scissors
janken("scissors")()    # rock

print('パターン2。一旦新しい関数として保存してから実行する')
show_enemy_hand_against_rock = janken("rock")
show_enemy_hand_against_rock()      # paper

show_enemy_hand_against_paper = janken("paper")
show_enemy_hand_against_paper()     # scissors

show_enemy_hand_against_scissors = janken("scissors")
show_enemy_hand_against_scissors()  # rock

パターン1。返ってきた関数をそのまま実行する
paper
scissors
rock
パターン2。一旦新しい関数として保存してから実行する
paper
scissors
rock

でも毎回このレベルのわけ方してたらだるいなぁ。。。今回のケースなら、returnせずに直接printしちゃう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0