python——*和**

python中’*‘和’**'的使用分兩個方面,一個是計算,另一個是參數傳遞過程中元素的打包解包


計算中的運用
'*‘和’**'在python中最常見的作用分別是‘相乘’和‘乘冪’,如下:
>>> a  = 2
>>> b = 3
>>> c = 5*6
>>> d = 4**3
>>> e = a*b
>>> f = a**b

需要注意的是在numpy中星號和雙星號對於array和matrix是不同的,參見Numpy的array與Python的list的異同以及numpy的array與matrix的異同。簡單來說星號和雙星號對於array都是點乘,對於matrix都是矩陣乘。

參數傳遞中的打包和解包
對函數傳遞的參數進行打包(打包成元組tuple或字典dictionary)和拆解(分解成單個元素),其中元組tuple的打包和解包使用單星號‘*’,字典dictionary的打包和拆解使用‘**’。
注:非關鍵字參數和關鍵字參數1

打包

打包就是將傳遞給函數的任意多個(也可以是零個)非關鍵字參數/關鍵字參數打包成一個元組/字典(元組只能接收非關鍵字參數,字典只能接收關鍵字參數)
元組打包的例子

#!/usr/bin/env python
#coding=utf-8
def tuple_pack(a, *b):
    print(a)
    print(b)
tuple_pack(1,2,3,4,5)

輸出的結果是:
(2,3,4,5)

在該例子中,‘*b’這個位置可以接收任意多個(也可以是零個)非關鍵字參數,並將收集到的參數轉換成一個元組。
字典打包的例子

#!/usr/bin/env python
#coding=utf-8
def dictionary_pack(a, **b):
    print(a)
    print(b)
dictionary_pack(1,one=1,two=2,three=3,four=4)

輸出的結果是:

{'four':4,'one':2,'three':4,'two':3}

在該例子中,‘**b’這個位置可以接收任意多個(也可以是零個)關鍵字參數,並將收集到的參數轉換成一個字典。
元組和字典混合的例子

#!/usr/bin/env python
#coding=utf-8
def tuple_dictionary_pack(*a, **b):
    print(a)
    print(b)
tuple_dictionary_pack(1,2,3,one=2,two=2)

輸出的結果是:

(1,2,3)
{'one':4,'two':5}

在該例子中,‘*a’這個位置負責接收任意多個非關鍵字參數,‘**b’這個位置可以接收任意多個關鍵字參數,注意二者在函數定義中的順序不能顛倒。

拆解

拆解就是將傳遞給函數的一個列表、元組或字典拆分成獨立的多個元素然後賦值給函數中的參變量(包括普通的位置參數,關鍵字參數,元組也即‘*’非關鍵字參數,字典也即‘**’關鍵字參數)。在解字典時會有兩種解法,一種使用‘*’解,解出來傳給函數的只有鍵值(.key)另一種是用**解,解出來的是字典的每一項。
位置變量和元組混合拆解的例子

#!/usr/bin/env python
#coding=utf-8
def variable_tuple_unpack(a,b,c,*d):
    print(c)
    print(d)
ee = [1,2,3,4,5]
variable_tuple_unpack(*ee)

輸出的結果是:

(4,5)

元組和字典混合的例子

#!/usr/bin/env python
#coding=utf-8
def tuple_dictionary_unpack(*a,**b):
    print(a)
    print(b)
ee = (1,2,3)
ff = {'one':1,'two':2,'three':3} 
tuple_dictionary_unpack(*ee,**ff)

輸出的結果是:

(1,2,3)
{'one':1,'three':3,'two':2}

字典的鍵值解成元組的例子

#!/usr/bin/env python
#coding=utf-8
def tuple_dictionary(*a):
    print(a)
ff = {'one':1,'two':2,'three':3} 
tuple_dictionary(*ff)

輸出的結果是:

('one','three','two')
1
非關鍵字參數指的就是位置參數,在函數參數傳遞中根據順序對變量賦值;關鍵字參數可以根據變量的關鍵字亂序賦值,關鍵字參數也會在函數定義中賦予初值。另外,非關鍵字參數不可以通過關鍵字賦值,但是關鍵字參數可以通過位置參數賦值;而且在函數定義時,關鍵字參數後不能有非關鍵字參數。 ↩︎
————————————————
版權聲明:本文爲CSDN博主「xiaoquinNUDT」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xiaoqu001/article/details/78823498

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章