Python中*與**的區別


*與**的區別


*用途一:乘法


  • 可用於數學計算

  • 字符串,列表的重復


key="a"*5
print(key) #aaaaa

word=[2,"3"]*4
print(word) #[2, '3', 2, '3', 2, '3', 2, '3']

*用途二:接受多個參數


  • *用作方法的形參,在接收參數時可接收多個參數

def sum(*num):
    return num[0]+num[1]+num[2]+num[3]
print(sum(1, 3, 5, 7)) #16


*用途三:作為實參傳遞,自動進行解包然后傳遞給多個單變量參數


  • 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='\n')

'''
1
2
3
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 "<stdin>", line 1, in <module>
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)

'''
<class 'dict_items'>
('x', 1)
('y', 2)
'''

  • **,若變量為字典,將其拆解出來,單獨傳給函數。

dic={'a':1,'b':2,'c':3}
string='{a}-{b}-{c}'.format(**dic)
print(string)
# 1-2-3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM