この記事の例では、Python の詳細な分析 (カリー化関数) について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
1) 2 つのパラメータを受け入れる元の関数を、1 つのパラメータを受け入れる新しい関数に変更するプロセスを指します。新しい関数は、元の 2 番目のパラメーターをパラメーターとして受け取る関数を返します
2) 例: 加算関数のカリー化: ネストによって関数をカリー化関数に変換する方法です。
def add(x,y): return x + y def add(x): def _add(y): return x + y return _add
要件:
追加関数。その機能を強化し、呼び出されたパラメーターと呼び出しに関する情報を出力できるようにしたいです。
def add(x,y): return x + y
ここで情報出力関数
def add(x,y): print('call add,x + y') #log output to the console return x + y
を追加します。上記の追加関数は要件を満たしていますが、以下の3つの欠点があります。
1. print文の結合度が高すぎる。
2. 追加機能はビジネス機能に属しますが、情報を出力する機能は非ビジネス機能コードに属することができ、ビジネス機能追加に配置されるべきではありません。
次に、次の改善を行います:
def add(x,y): return x + y def logger(fn): print('begin') #enhanced output x = fn(4,5) print('end') #enhanced features return x print(logger(add))
上記の改善により、ビジネス機能の分離が達成されますが、fn 関数呼び出しでのパラメーターの受け渡しに問題があります。パラメータを柔軟に渡したいのですが、パラメータは内部関数にあります。この問題を解決するには、柔軟な言語 Python を使用するにはどうすればよいですか?
def add(x,y): return x + y def logger(fn): def _logger(*args,**kwargs): print('begin') c = fn(*args,**kwargs) print('end') return c return _logger logger(add)(2,3)
これで、パラメーターを柔軟に入力できるようになります
より具体的な例を以下に示します:
def ad1(m,n,*,l=909): return m + n + l def loger(fn,*args,**kwargs): print('What\'s the matter?') ret = fn(*args,**kwargs) return ret print(loger(ad1,2,3,l=4)) #Can you currying them?
def add(x,y,*,z=9): return x + y + z def logger(fn,*args,**kwargs): print('This is a stupid function') ret = fn(*args,**kwargs) #after collections it needs to be deconstructed return ret print(logger(add,2,4,z=17))
def ad1(m,n,*,l=909): return m + n + l def loger(fn): def _loger(*args,**kwargs): #append a function as wrapper print('What\'s the matter?') ret = fn(*args,**kwargs) #the function which is be wrapped and transfer args and kwargs return ret return _loger #print(loger(ad1)(2,3,l=4)) also okay t = loger(ad1) #defind the function loger r = t(2,3,l=4) # income parameters and transfer it print(r)
カリー化を学習すると、Python で最も重要かつ不可欠な知識が得られます。 デコレーター。
関連する推奨事項:
以上がPython の詳細な分析 -- カリー化関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。