*argsと*kwargs

6349 ワード

pythonの勉強を始めたばかりの頃、*argsと*kwargsの2つの変数の具体的な意味を明らかにしたいと思っていましたが、最後にargsとkwargsの2つの変数はこのように書かなければならないわけではありません.ただ、変数の前のこの(星号)は必要で、後ろの変数名は自分で定義することができます.このargsと*kwargsはただ通俗的な命名規則にすぎない.
まず*argsの使い方を見てみましょう.*argsと*kwargsは主に関数定義に使われています.不定数のパラメータを関数に渡すことができます.関数の使用者がどれだけのパラメータを渡すかは知らなかったので、このシーンでこの2つのキーワードを使用します.*argsは、非キー値ペアの可変数のパラメータリストを関数に送るためのものである.例:
def test_var_args(f_arg, *argv):
	print("first normal arg:", f_arg)
	for arg in argv:
		print("another arg through *argv:", arg)
test_var_args('yasoob', 'python', 'eggs', 'test')

これにより、次のような出力が得られます.
first normal arg: yasoob
another arg through *argv: python
another arg through *argv: eggs
another arg through *argv: test

another arg through*argv:test次は**kwargsの使い方を見てみましょう.kwargsでは、パラメータとして関数に不定長のキー値ペアを渡すことができます.名前付きパラメータを1つの関数で処理する必要がある場合は、kwargsを使用します.
例:
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の使用順序には特に注意が必要である.この関数でこの3つのパラメータが同時に使用されている場合、この3つのパラメータの順序は、標準パラメータ、args、*kwargs、some_などです.func(fargs,*args,**kwargs)では、これらのパラメータをどのように使用するかについては、自分のニーズに応じなければなりません.各関数に使用者の3つのパラメータが必要なわけではありません.一般的には、関数装飾器を使用するときに使用されるべきです.また、サルパッチ(monkey patch)にも使用できます.サルパッチとは、プログラム実行時にコードを変更することを意味します.例えばgetというクラスがありますinfoの関数は、APIを呼び出し、応答のデータを返します.テストしたい場合は、API呼び出しをいくつかのテストデータに置き換えることができます.例:
import someclass
def get_info(self, *args):
return "Test data"
someclass.get_info = get_info

参考:[1]https://www.jianshu.com/p/821492b3d3c6