Python-魔法の変数* argsと** kwargs

Pythonを学ぶとき、常に2つの魔法の変数* argsと** kwargsに遭遇しますが、それらは何ですか?

まず第一に、それは書かれる必要はありません*args和**kwargs変数の前にある*(アスタリスク)のみが必要です。一般的な命名規則*var 和**varsとして記述することもでき*args 和**kwargsます。
次に、パラメータグループという名前もあります。これは、プリミティブ(非キーワードパラメータ)またはディクショナリ(キーワードパラメータ)を介してパラメータグループとして関数に渡されます。これらは、明示的に定義されたパラメータのない関数です。

1.*args使用法

*args和**kwargs主に関数定義に使用されます。関数に無制限の数のパラメーターを渡すことができます。

ここでの不確定な意味は次のとおりです。関数ユーザーが渡すパラメーターの数が事前にわからないため、このシナリオではこれら2つのキーワードを使用します。

*argsこれは、キーと値のペアではない可変数のパラメーターリストを関数に送信するために使用されます。
簡単な例:

>>> def func1(*args):
...  print(args)
...
>>> func1()
()
>>> func1('hao')
('hao',)
>>> func1('hao',123)
('hao',123)

この概念を理解するのに役立つ例を次に示します。

def test_args(arg1, *argv):
    print("变量1:", arg1)
    for arg in argv:
        print("变量参数组参数为:", arg)

test_args('1', '2', '3', '4')
出力結果は次のとおりです。

変数1 :: 1
変数パラメーターグループのパラメーターは次のとおりです。2
変数パラメーターグループのパラメーターは次のとおりです。3
変数パラメーターグループのパラメーターは次のとおりです。4

2. ** kwargsの使用法

kwargsを使用すると、可変長のキーと値のペア(辞書)をパラメーターとして関数に渡すことができます。関数で名前付きパラメーターを処理する場合は、 kwargsを使用する必要があります
簡単な例:

>>> def func2(**kwargs):
...  print(kwargs)
...
>>> func2()
{
    
    }
>>> func2(name='tom',age=20)
{
    
    'name':'tom','age'=20}

def test_kwargs(**kwargs):
    for key, value in kwargs.items():
        print("{0} == {1}".format(key, value))

>>> test_kwargs(name="tom")
name == tom

これで、関数内のキーと値のペアのパラメーターをどのように処理するかがわかります。これが**kwargs基本です。

次に、それ*args和**kwargs使用して、パラメーターがリストまたは辞書である関数を呼び出す方法について説明します
3. * argsと** kwargsを使用して関数を呼び出します

それでは、これを使用し*args和**kwargsて関数を呼び出す方法を見ていきます。

  • 関数を呼び出すとき*は、シーケンスオブジェクトの前に追加して、シーケンスオブジェクトを分割します
  • 関数を呼び出すときは、辞書オブジェクトの前に追加し**て、辞書オブジェクトがkey = valの形式に分割されていること示します。

簡単な例1:

単純な関数を定義する

>>>def get_age(name,age):
...	 print('%s is %s years old' %(name,age))
最初に使用する* args:
>>> user = ['tom',20]
>>> get_age(user[0],user[1])
tom is 20 years old
>>> get_age(*user)
tom is 20 years old
** kwargsを使用します:
>>> user_dict = ['name':'tom','age':20]
>>> get_age(name='tom',age=20)
tom is 20 years old
>>> get_age(**user_dict)
tom is 20 years old

例2:
次のような関数があるとします。

def test_args_kwargs(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)

* argsまたは** kwargsを使用して、この関数にパラメーターを渡すことができます。これを行う方法は次のとおりです。

最初に使用する* args:
>>> args = ("two", 3, 5)
>>> test_args_kwargs(*args)
arg1: two
arg2: 3
arg3: 5
** kwargsを使用します:
>>> kwargs = {
    
    "arg3": 3, "arg2": "two", "arg1": 5}
>>> test_args_kwargs(**kwargs)
arg1: 5
arg2: two
arg3: 3

関数で標準パラメーター* argsと** kwargsを同時に使用する場合、順序は次のとおりです
。some_func(fargs、* args、** kwargs)

使用した4シーン

ニーズによって異なります。最も一般的な使用例は、関数デコレータを作成する場合です。

また、モンキーパッチにも使用できます。モンキーパッチとは、実行時に一部のコードを変更することを意味します。たとえば、APIを呼び出して対応するデータを返すget_infoという関数を持つクラスがあります。テストする場合は、API呼び出しをいくつかのテストデータに置き換えることができます。例えば:

import someclass
def get_info(self, *args):
    return "Test data"

someclass.get_info = get_info

おすすめ

転載: blog.csdn.net/weixin_45942735/article/details/104545050