Pythonのファーストクラス関数は何ですか?



記事議題
この記事は、ファーストクラスオブジェクトとして振る舞う関数のプロパティを理解することに焦点を当てています.以下をカバーします.
  • First Class Object
  • First Class Functions
  • What Next?

  • 導入
    「Pythonでは、すべてはオブジェクトです」という有名なことを聞いたかもしれません.音が聞こえるかもしれませんが、これは絶対に本当です.Pythonでは、すべての単一のエンティティをオブジェクトとして表現します(はい、OOPからのオブジェクトです.この概念は、クロージャとデコレータのようなPythonで多くの方法論と原則を引き起こしました.

    Psst.. あなたが急いでいるならば、あなたは代わりにこのポストの
    さあ、始めましょう.

    ファーストクラスオブジェクト

    それが短くて簡単に保つために、一級のオブジェクトはそうすることができるプログラミング言語の中の実体です:
  • 表情に出る
  • 変数に代入される
  • 議論として使われる
  • 関数呼び出しによって返される
  • それで、あなたは、これの候補であると思いますか?さて、Pythonのデータ型はこれらの基準に合っているので、整数、文字列、ブールなどのデータ型は一階オブジェクトです.それで、私に尋ねさせてください:ループと条件づけは、一流のオブジェクトですか?もちろん、両方とも、複数の基準に失敗しています.最後に、我々は同様に機能を持つすべての上記を達成することができます!したがって、関数も第一種のオブジェクトです.

    一等関数

    PythonのJavaScriptのようなプログラミング言語では、ファーストクラスオブジェクトとして機能します.したがって、関数の正式名はファーストクラス関数です.ファーストクラスの関数は他のオブジェクトとして扱うことができます.つまり、Pythonでは関数を渡すことができ、他の関数に引数として割り当てられ、変数に代入されることもできます.
    以下では、数を1ずつ増分する関数を示します.
    def plusOne(number):
        return number+1
    
    関数を他のオブジェクトとして扱うことができることを証明するために、次のようにこの関数を変更します.
    def plusOne(number):
        return number+1
    
    #renaming the above function
    re = plusOne
    
    #calling both the functions
    plusOne(10)            # 11
    re(10)                 # 11
    
    両方とも、あなたに同じ出力を与えます.この行動に遭遇するのを覚えていますか.さて、次のコードを実行すると、アイデアが得られるかもしれません.
    x = 11
    y = x
    print(x)          # 11
    print(y)          # 11
    
    驚くべきことじゃない?したがって、関数は第一のクラスオブジェクトのように振る舞う.これはC、C +のような他のプログラミング言語が決して持っていなかったユニークです.Pythonの関数は、最初のクラスオブジェクト(文字列、整数など)として扱うことができます.
    今、私はスパイスをするつもりです.これは最初に少し奇妙に思えるかもしれないが、それを理解し、かなり迅速に概念を把握する.
    あなたが覚えているならば、我々はリストのようないくつかの他のデータ構造で最初のクラスオブジェクトを保存することができます、辞書?さて、これは、これらのデータ構造にも機能を格納することができ、それに応じて使用することを意味します.もっと簡単に説明しましょう(リストをデータ構造として使う)
    def plusOne(number):
        return number+1
    
    def plusTwo(number):
        return number+2
    
    def plusThree(number):
        return number+3
    
    def plusFour(number):
        return number+4
    
    # list storing function objects
    func_list = [plusOne, plusTwo, plusThree, plusFour]
    
    # executing each function
    for func in func_list:
        print(func(10))
    
    # It will print out ---> 11, 12, 13, 14
    
    上記のスニペットではfunc_list 関数オブジェクトを格納するリスト.今、私がさらに動く前に、あなたがブラケットでそれを成功させない限り、Pythonが機能への呼び出しをしないと理解するのは、避けられます() . それで、私がこれをするだけであるならば:
    print(plusOne)
    
    # prints out ---> <function plusOne at 0x000001B4FC7FEF70>
    
    Pythonは上記のように関数リファレンスを与えるだけです.さあ、帰ろう.さて、func_list 関数オブジェクトを保持します(まだ実行されていません).そして、forループを実行し、各関数にアクセスし、最後に括弧とパラメータの助けを借りて実行しました.
    偉大なもの!私は今、あなたは機能の本来の行動が何であるかを知るようになったと信じています.本当にこの概念であなたの把握を固めるために、あなたの可能な使用事例を見つけて、それを利用しようとしてください.
    最初のクラス関数のユースケースを試してみましょう.
    def plusOne(number):
        return number+1
    
    def plusTwo(number):
        return number+2
    
    def listModifier(li, func):
        result = []
    
        for element in li:
            result.append(func(element))
    
        return result
    
    # executing listModifier
    print(listModifier([1,2,3,4], plusOne))
    
    # prints out ---> [2,3,4,5]
    
    上記のスニペットでは、関数(plusOne ) 別の関数へのパラメータとして(listModifier ). そこで私は電話をしましたplusOne 内部からlistModifier 関数.これはplusOne 関数と意志をインクリメントし、リストの各値を渡しresult リスト.最後に、上記の操作の後、result .
    さて、いくつかの理由で、クライアントは私に来て、私は1つの要素の各値をインクリメントする代わりに、2でそれを行うと、私は私がする必要があるすべては、単にplusOne パラメータlistModifier to plusTwo 以下のように:
    print(listModifier([1,2,3,4], plusTwo))   # pretty neat eh?
    
    # prints out ---> [3,4,5,6]
    

    次に
    あなたは、この概念を学ぶことによって大きなマイルストーンに到達したことを教えてください.ファーストクラスの機能は、いくつかの他のデザインパターンとクロージャやデコレータなどの概念の基礎を形成する.あなたは最初のクラスの機能の知識を事前にこれらのトピックのより良い理解を持っているでしょう.

    応援してくれませんか.
    私と私のコンテンツをサポートしたい場合は、先に行くとそれを検討する.私は非常に感謝します.

  • ホーム:すべての種類の独特のtutos.

  • GitHub : お楽しみに😉