Pythonでの*と**の違い

2567 ワード

*と**の違い
*用途一:乗算
  • は、数学計算
  • に用いることができる
  • 文字列、リストの繰り返し
  • 
    key="a"*5
    print(key) #aaaaa
    
    word=[2,"3"]*4
    print(word) #[2, '3', 2, '3', 2, '3', 2, '3']
    

    *用途2:複数のパラメータを受け入れる
  • *はメソッドのパラメータとして使用する、パラメータを受信するときに複数のパラメータ
  • を受信することができる.
    
    def sum(*num):
        return num[0]+num[1]+num[2]+num[3]
    print(sum(1, 3, 5, 7)) #16
    
    

    *用途3:実パラメトリックとして渡され、自動的にパケットが解除され、複数の単一変数パラメータに渡されます.
  • test(args):の役割は、シーケンスargsの各要素を位置パラメータとして渡すことです.例えば、上記のコードはargsが(1,2,3)に等しい場合、test(1,2,3)
  • に等価である.
    
    import sys
    
    params=sys.argv
    
    print("cmdLine:\t"+params[0])
    
    # print("  :{0[1]},  :{0[2]},  :{0[3]},  :{0[4]},  :{0[5]},  :{0[6]},  :{0[7]}" \
    #       .format(params))
    print("  :{1},  :{2},  :{3},  :{4},  :{5},  :{6},  :{7}" \
          .format(*params))
    
    
    a=[1,2,3,4]
    print(*a,sep='
    ') ''' 1 2 3 4 '''

    *用途4:キーワードパラメータの命名
  • キーワードパラメータの名前を制限する場合は、キーワードパラメータとしてcityおよびjobのみを受信するなど、名前付きキーワードパラメータを使用できます.
  • ネーミングキーパラメータcityにデフォルト値があるため、呼び出し時にcityパラメータ
  • を入力しなくてもよい.
    
    def person(name, age, *, city='Beijing', job):
        print(name, age, city, job)
    
    person('Jack', 24, job='Engineer')
    Jack 24 Beijing Engineer
    
    
  • 関数定義に可変パラメータが既に存在する場合、後に続く名前付きキーワードパラメータには特別な区切り文字*が必要なくなります.
  • 
    def person(name, age, *args, city, job):
        print(name, age, args, city, job)
    
  • 名前付きキーワードパラメータは、位置パラメータとは異なるパラメータ名に入力する必要があります.パラメータ名が入力されていない場合、呼び出しは
  • とエラーを報告します.
    
    def person(name, age, *args, city, job):
        print(name, age, args, city, job)
        
    person('Jack', 24, 'Beijing', 'Engineer')
    
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: person() takes 2 positional arguments but 4 were given
    
  • 名前付きキーワードパラメータを使用する場合は、特に、可変パラメータがない場合は、特殊な区切り記号として追加する必要があります.欠けている場合、Pythonインタプリタは、位置パラメータと名前付きキーワードパラメータ
  • を認識できません.
    **用途
  • 2**10=1024
  • **重要なパラメータのように値を割り当てる形式の複数の実パラメータを辞書に入れる(すなわち、関数のパラメータを辞書に変換する)
  • .
    
    def demo(**p):
        print(type(p.items()))
        for i in p.items():
            print(i)
    demo(x=1, y=2)
    
    '''
    
    ('x', 1)
    ('y', 2)
    '''
    
  • **は、変数が辞書の場合、それを分解し、関数に個別に渡します.
  • 
    dic={'a':1,'b':2,'c':3}
    string='{a}-{b}-{c}'.format(**dic)
    print(string)
    # 1-2-3