Pythonで* argsと** kwargsを使いすぎないようにする

UnsplashのMatthewHenryによる写真
UnsplashのMatthewHenryによる写真

ホリバーがありましょう!args / kwargsを使用するか、使用しないかは、プロフェッショナリズムまたは基本的な知識の指標であり、それなしでは恥ずべきことですか?多くの場合、さまざまなプロジェクトのgithubをめくって、関数にこれらの引数が存在することに遭遇します。そして、この記事は私にこのトピックについて話すように促しました。一般的に、私は実際には制御されていない議論を使用しないようにしていますが、このプログラミング方法はどのくらい一般的ですか?コメントで共有します。そして、あなたの読書をお楽しみください。






, *args



**kwargs



Python. , , . , .





!





. , , , .





?






Python :





  • , .





  • , .





def foo(start, end):
    print(start, end)
      
      



, foo ('Hi', end = 'Bye!')



"Hi"



"Bye!"



, end



foo



. ; , , . .





*args



. *



- . .





def foo(*args):
    print(type(args))
    for arg in args:
        print(arg)
        
foo(1, 2, 'end')

# <class 'tuple'>
# 1
# 2
# end
      
      



, **kwargs



. , .





def foo2(**kwargs):
    print(type(kwargs))
    for keyword, value in kwargs.items():
        print(f'{keyword}={value}')
        
foo2(a=1, b=2, z='end')

# <class 'dict'>
# a=1
# b=2
# z=end
      
      



UnsplashのSusanHoltSimpsonによる写真
Photo by Susan Holt Simpson on Unsplash

*args



**kwargs



. , ?





, , , .





, . - Python






- ?

: , . , , . , , , , , ..





, *args



/ **kwargs



, , , .





, . , , .





, Python , , , .





UnsplashのAlexanderSchimmeckによる写真
Photo by Alexander Schimmeck on Unsplash

次の例では



、ヘルスチェックとして実行されている関数の名前を出力するものを作成します。デコレータは、@trace



以下に示すように、関数の上を使用て関数に適用されます。このデコレータを任意の数の引数を持つ任意の関数に適用するため*args



、とを使用する必要があり**kwargs



ます。





def trace(func):
    def print_in(*args, **kwargs):
        print('Executing function', func.__name__)
        return func(*args, **kwargs)
    return print_in
  
@trace
def calc(a,b):
    print(f'a+b is {a+b}, a-b is {a-b}.')  

calc(1,2)
# Executing function calc
# a+b is 3, a-b is -1.

@trace
def add_all(*args):
    print(reduce(lambda a,b:a+b, args))

a = add_all(1,2,3,4,5)
# Executing function add_all
# 15
      
      




結論

可能であればそれらを避けてください。





args



kwargs



は単に合意によって呼ばれることに注意してくださいあなたはそれらを好きなように呼ぶことができます。まさに力*



**



与える機能を与えるのは星です








All Articles