解析Python偏向関数の使い方の全方位実現

3142 ワード

Pythonのfunctoolsモジュールの中に「偏関数」という関数があります。それに接触してから、確かに有用で簡単な関数です。この文章を読み終わったら、お互いに恨む気持ちがあると信じています。
関数の入力は標準値を設定して関数の呼び出しを簡単にすることができますが、偏関数の役割は、入力をデフォルトで塗りつぶし、関数の使用の難しさを低減することです。
int()関数のように、文字型を整数に変換できます。標準は10進数で変換されます。なぜ10進数で変換されますか?バイナリに変換するなら?実は私達はint関数自体の定義偏関数を見てもいいです。

ポイントは二つの使い方が見られます。一つの位置パラメータを伝えることができます。一つのキーワードパラメータbaseを多く伝えることができます。つまりどのようなフォーマットに基づいて変換しますか?デフォルトではbaseパラメータを伝えないのは10進数で変換します。したがって、バイナリ変換はベース=2だけでいいです。

value = int('10000')
print(value)  # 10000
 
value = int('10000', base=2)
print(value)  # 16
毎回変換する文字列の場合はベースパラメータを入力するのが面倒なので、関数の役割が現れます。functools.partial関数を使って再定義できます。

from functools import partial

int2 = partial(int, base=2)
res = int2('10000')
print(res)   # 16

ここまで来て、あなたは偏関数のほんの少しの魅力を感じましたよね。じゃ、私達はもっと多くの角度からそれを見てみます。
カスタム関数の使用

def add(a, b, c):
  print('a=',a,'b=',b,'c=',c)
  return a + b + c

add10 = partial(add, 10)
res = add10(1, 2)   # a= 10 b= 1 c= 2

上記のコードの中で、partial(add,10)は参加してべつにどのキーワードのパラメーターを指定しないで、関数のデフォルトのはこの値を最初のパラメーターaに伝えて、それでは説明して、デフォルトのパラメーターを指定していない時、デフォルトは最初のパラメーターに割り当てて、残りのパラメーターは位置のパラメーターによって値を割り当てます。
パラメータが可変の場合

def sum(*args):
  s = 0
  for n in args:
    s += n
  return s

sum10 = partial(sum, 10)
print(sum10(1))  # 11
print(sum10())   # 10

上記の理解では、デフォルトパラメータが指定されていない場合は、デフォルトで最初のパラメータが付与されます。最初のパラメータは常に10であり、後から参に入ると2番目のパラメータから計算されますので、10+1=11の結果が得られます。同じように、継続しないとデフォルトの10しかないので、結果は10です。
変数のキーワードパラメータに参加すると

D = {'value1':10, 'value2':20}
V = {'Default':100}
def show(**kw):
  for k in kw:
    print(k, kw.get(k))

showDef = partial(show, **V)
showDef(**D)
# Default 100
# value1 10
# value2 20

同じように、この時のパラメータは可変ですので、デフォルトは最初の着信です。Defaultキーワードを印刷します。ここでは関数の書き方に注意してください。変数のキーワードパラメータは(**V)と書きます。
入力が制限されているキーワードパラメータの場合

def student(name, * , age, city):
  print('name:',name, 'age:',age, 'city:',city)

studentAge = partial(student, age=20)
studentAge('Tom','Beijing')
# TypeError: student() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given

私たちは*番号で区切ると、後のキーワードパラメータが必ず伝達されることを示していますので、デフォルトのパラメータに対しても同様に適用されます。即ち、パラメータが必伝の場合、偏関数も各キーワードパラメータに対してデフォルト値を設定する必要があります。したがって、修正後は

studentAge = partial(student, age=20, city='Beijing')
studentAge('Tom') # name: Tom age: 20 city: Beijing
以上のように、偏関数は、ターゲット関数の部分パラメータを固化した後、新たな関数として再定義し、符号化の複雑さを低減し、特にパラメータが多い場合、またはその中のいくつかのパラメータのシーンだけを利用すると、効果がより顕著になります。
ここに来て、あなたは相見晩餐の感じがありますか?簡単な関数の小さい技巧、非常に実用的な偏り関数の使用法は紹介し終わって、更に多くの関連Python偏り関数の内容は私達の前の文章を捜索してあるいは引き続き下の関連している文章をブラウズして下さい。