Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで引数をパックおよびアンパックしますか?


Pythonで少しプログラミングを行ったことがあれば、Python関数で「**args」と「**kwargs」という単語を見たことがあるでしょう。しかし、それらは正確には何ですか?

*演算子と**演算子は、使用している場所に応じて相互に補完する異なる操作を実行しました。

したがって、メソッド定義でそれらを使用する場合、-

def __init__(self, *args, **kwargs):
pass

上記の操作は、このメソッド呼び出しがargsと呼ばれるタプルに受け取る単一の変数にすべての引数をパックするため、「パッキング」と呼ばれます。 args以外の名前を使用することもできますが、argsは最も一般的でPython的な方法です。単一の変数を入力する理由を理解するには、以下の例を検討してください。

3つの引数を取る関数があり、関数のすべての引数を持つサイズ3のリストがあると仮定します。ここで、単にリストを関数に渡そうとすると、呼び出しは機能せず、エラーが発生します。

例1

#function which takes three argument
def func(a,b,c):
print("{} {} {}".format(a, b, c))

#list of arguments
lst = ['python', 'java', 'csharp']

#passing the list
func(lst)

結果

TypeError: func() missing 2 required positional arguments: 'b' and 'c'

変数を「選択」したら、通常のタプルでは不可能なことを実行します。 Args [0]、args [1]、およびargs [2]は、それぞれ1番目、2番目、および3番目の引数を与えます。 argsタプルをリストに変換すると、その中のアイテムを変更、削除、および変更する操作を実行できるためです。

これらのパックされた引数を別のメソッドに渡すには、アンパックを実行する必要があります-

def __init__(self, *args, **kwargs):
#some code here
car(VehicleClass, self).__init__(self, *args, **kwargs)
#some code below

ここでも*演算子がありますが、今回はメソッド呼び出しのコンテキストにあります。現在、args配列を分解し、各変数が独立しているかのようにメソッドを呼び出します。以下は、明確に理解するための別の例です-

例2

def func1(x, y, z):
print(x)
print(y)
print(z)

def func2(*args):
#Convert args tuple to a list so we can do modification.
args = list(args)
args[0] = 'HTML'
args[1] = 'CSS'
args[2] = 'JavaScript'
func1(*args)

func2('Python', 'Java', 'CSharp')

結果

HTML
CSS
JavaScript

上記の出力から、func1に渡す前に3つの引数すべてを変更できます。

同様に、example1にあるTypeErrorメッセージを解決できます。

例:1_1

#function which takes three argument
def func(a,b,c):
print("{} {} {}".format(a, b, c))

#list of arguments
lst = ['python', 'java', 'csharp']

#passing the list
func(*lst)

結果

python java csharp

したがって、Python関数に渡す必要のある引数の数がわからない場合は、パッキングを使用してすべての引数をタプルにパックできます。

#Below function uses packing to sum unknown number of arguments
def Sum(*args):
sum = 0
for i in range(0, len(args)):
   sum = sum + args[i]
return sum

#Driver code
print("Function with 2 arguments & Sum is: \n",Sum(9, 12))
print("Function with 5 arguments & Sum is: \n",Sum(2, 3, 4, 5, 6))
print("Function with 6 arguments & Sum is: \n",Sum(20, 30, 40, 12, 40, 54))

結果

Function with 2 arguments & Sum is:
21
Function with 5 arguments & Sum is:
20
Function with 6 arguments & Sum is:
196

以下は、両方のパッキングとアンパックの使用法を示す別のプログラムです。

#function with three arguments
def func1(x,y,z):
print("Argument One: ",x)
print("\nArgument Two: ",y)
print("\nArgument Three: ",z)

#Packing- All arguments passed to func2 are packed into tuple *args
def func2(*args):
#To do some modification, we need to convert args tuple to list
args = list(args)

#Modifying args[0] & args[1]
args[0] = 'Hello'
args[1] = 'TutorialsPoint'

#Unpacking args and calling func1()
func1(*args)

#Driver code
func2("I", "Love", "Coding")

結果

Argument One: Hello

Argument Two: TutorialsPoint

Argument Three: Coding

辞書には**を使用

# Program to demonstrate unpacking of dictionary items using **
def func(x,y,z):
print("Dicionary first item: ",x)
print("\nDictionary second item: ",y)
print("\nDictionary third item: ",z)
d = {'x': 27, 'y': 54, 'z': 81}
func(**d)

結果

Dicionary first item: 27

Dictionary second item: 54

Dictionary third item: 81

アプリケーション

  • 不明な(無限の)数のリクエストをサーバーに送信する必要があるソケットプログラミングで使用されます。

  • djangoなどのWebフレームワークで、関数を表示するための変数引数を送信するために使用されます。

  • 変数引数を渡す必要があるラッパー関数で使用されます。


  1. Pythonでの相関と回帰

    相関とは、2つのデータセット間の依存関係を含むいくつかの統計的関係を指します。線形回帰は、従属変数と1つ以上の独立変数の間の関係を確立するための線形アプローチです。単一の独立変数は線形回帰と呼ばれ、複数の独立変数は重回帰と呼ばれます。 相関 依存する現象の簡単な例としては、親と子孫の外見の相関関係、製品の価格と供給量の相関関係などがあります。seabornpythonライブラリで利用可能なアイリスデータセットの例を取り上げます。その中で、3種のアヤメの花のがく片と花びらの長さと幅の相関関係を確立しようとしています。見つかった相関関係に基づいて、ある種を別の種から簡単に区別する強力なモデルを作

  2. =+と+=はPythonで何をしますか?

    + =演算子は、object .__ iadd __()関数のシンタックスシュガーです。 Pythonドキュメントから: これらのメソッドは、拡張された算術割り当て(+ =、-=、* =、@ =、/ =、// =、%=、** =、)を実装するために呼び出されます。 =、&=、^ =、| =)。これらのメソッドは、その場で操作を実行し(自己を変更)、結果を返すようにする必要があります(自己である可能性がありますが、そうである必要はありません)。 例 だからあなたが次のようなことをするとき- a = 5 b = 10 a += b print(a) 出力 これにより、出力が得られます- 15