pythonでの梱包と解包

6801 ワード

pythonでの梱包と解包
*argsと*kwargsはよく使われる2つのパラメータです
  • *args:余分な名前のないパラメータ、メタグループタイプを受け入れるために使用されます.
  • **kwargs:パラメータ、辞書タイプのデータを受け入れるために使用されます.

  • 可変パラメータargs:
    def fun(n, *args):
        print(n)
        print(args)     #    
        print(*args)    #     
    fun(1,2,3,4)

    結果:
    1
    (2, 3, 4)
    2 3 4
  • パラメータの*argsは、データを受信するargsであり、受信したデータをargsメタグループに格納するメタグループである.
  • 関数のargsは依然としてメタグループであり、*argsはメタグループのデータをパケット化し、入力を開始する形式である.

  • キーワードパラメータ**kwargs
    def fun(**kwargs):
        print(kwargs)       #    
        print(*kwargs)  #     
    fun(a=1, b=2)

    結果:
    {'a': 1, 'b': 2}
    a b
  • *argsは余分な未命名パラメータを受け入れるために使用され、*kwargsは命名パラメータを受け入れるために使用されます.
  • パッケージの意味は、未命名のパラメータと命名のパラメータをメタグループまたは辞書に置くことです.

  • かばんを解く
    上にargs,**kwargsのパッケージ作用を紹介しましたが、**という2つのパラメータが機能しています.
    1.                   ,  ,  ,                      。
    2. *    key,   **   key,value。      **          。
    
    a = [1, 2, 3]
    c = {'a': 1, 'b': 2, 'c': 3}
    def fun(*args, **kwargs):
        for arg in args:
            print(arg)
        for k, v in kwargs.items():
            print(k, v)
        print('-'*50)
    fun(a, c)   #       args,   kwargs   
    fun(*a, *c)     #          args     1, 2, 3, 'a', 'b', 'c'
    fun(*a, **c)    # a   args,c   kwargs     1, 2, 3, 'a'=1, 'b'=2, 'c'=3

    結果:
    [1, 2, 3]
    {'a': 1, 'b': 2, 'c': 3}
    --------------------------------------------------
    1
    2
    3
    a
    b
    c
    --------------------------------------------------
    1
    2
    3
    a 1
    b 2
    c 3

    質問:
  • パラメータが入力とき、可変パラメータ(*)の前にパラメータ名
  • を指定することはできない.
    def myfun(a, *b):
        print(a)
        print(b)
    myfun(a=1,2,3,4)
    
    
        myfun(a=1,2,3,4)
                 ^
    SyntaxError: positional argument follows keyword argument

    2.関数が実パラメータに入力された場合、可変パラメータ(*)以降のパラメータはパラメータ名を指定する必要があります.そうしないと、可変パラメータに分類されます.
    def myfun(a, *b, c=None):
        print(a)
        print(b)
        print(c)
    myfun(1,2,3,c=4)
    
    1
    (2, 3)
    4

    3.関数を使用するには、パラメータ名を明示的に指定する必要があります.すべてのパラメータを可変パラメータの後に配置できます.
    def myfun(*, a, b):
        print(a)
        print(b)
    myfun(a=1, b=2)
    
    1
    2

    4.キーワードパラメータはいずれも最後のパラメータとしてのみ使用でき、前のパラメータは位置によって値を付与しても名前によって値を付与してもよい
    def myfun(a, *b, c, **d):
        print(a)
        print(b)
        print(c)
        print(d)
    myfun(1, 2, w=6, c=3, d=4, e=5)     #       (*)         
    
    1
    (2,)
    3
    {'w': 6, 'd': 4, 'e': 5}