您好,登錄后才能下訂單哦!
本篇內容介紹了“Python中星號的使用方法有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
星號* 往往被稱為乘法運算符,是所有程序中最為常用的運算符號之一,在Python 中,星號還有很多隱藏的強大功能。
本文將用最容易理解的例子來解釋星號*的 五個使用場景,從初級用法到高階用法。
最簡單的用法是利用星號作為基本的運算符:
單個 * 用于乘法運算
兩個 ** 表示冪運算
相關樣例用例代碼如下:
>>> 2*3 >>> 6 >>> 2**3 >>> 8
一般來說,函數往往接收固定數量的參數;但是如果我們需要更大的靈活性,比如當不確定將傳遞多少個參數時,此時將是星號* 發揮作用的時候。
def print_genius(*names): print(type(names)) for n in names: print(n) print_genius('Elon Mask', 'Du Fu ', 'Li Bai') # <class 'tuple'> # Elon Mask # Du Fu # Li Bai def top_genius(**names): print(type(names)) for k, v in names.items(): print(k, v) top_genius(Top1="Elon Mask", Top2="Du Fu", Top3="Li Bai") # <class 'dict'> # Top1 Elon Mask # Top2 Du Fu # Top3 Li Bai
如上例所示,在定義函數時,我們可以定義一個以一個或兩個星號為前綴的參數,以捕獲不限制數量的參數輸入。總結如下:
以 一個 * 為前綴的參數可以將任意數量的參數以元組形式傳入
以兩個 ** 為前綴的參數可以將任意數量的參數以字典形式傳入
按照慣例,當我們定義的函數接收不定數量的參數時,我們一般采用以下函數定義形式:
def func(*args, **kwargs): pass
星號* 的一個非常酷的用法是使函數只能接收關鍵字參數。
很難理解,我們舉例來說明:
def genius(*, first_name, last_name): print(first_name, last_name) # genius('Li','Bai') # TypeError: genius() takes 0 positional arguments but 2 were given genius(first_name='Li', last_name='Bai') # Li Bai
上述代碼采用了星號* 限制了星號之后的參數必須采用關鍵字形式來調用上述函數。
實際上,如果我們只是想將一些參數限制為僅以關鍵字形式輸入同時另一部分參數依舊按照位置形式輸入,此時我們可以將位置參數放置在星號之前。
樣例代碼如下:
def genius(age, *, first_name, last_name): print(first_name, last_name, 'is', age) genius(28, first_name='Li', last_name='Bai') # Li Bai is 28
我們可以使用星號* 來解包可迭代對象,這將使我們的程序更加清晰且優雅。
例如,如果我們要將不同的可迭代對象(例如一個列表,一個元組和一個集合)組合成一個新列表,哪種方法最好?
顯然,我們可以使用 for 循環來迭代所有元素并將它們逐一添加到新列表中,樣例代碼如下:
A = [1, 2, 3] B = (4, 5, 6) C = {7, 8, 9} L = [] for a in A: L.append(a) for b in B: L.append(b) for c in C: L.append(c) print(L) # [1, 2, 3, 4, 5, 6, 8, 9, 7]
上述實現方式雖然可以完成我們的目的,但是代碼看起來太冗長了,而且不是很Pythonic 。
推薦的改進方式是使用列表生成式,如下所示:
A = [1, 2, 3] B = (4, 5, 6) C = {7, 8, 9} L = [a for a in A] + [b for b in B] + [c for c in C] print(L) # [1, 2, 3, 4, 5, 6, 8, 9, 7]
上述代碼中,我們將三個 for 循環減少為一行列表生成式。它已經是Pythonic了,但不一定是最簡單的!
是時候看看星號的強大之處啦。
A = [1, 2, 3] B = (4, 5, 6) C = {7, 8, 9} L = [*A, *B, *C] print(L) # [1, 2, 3, 4, 5, 6, 8, 9, 7]
如上所述,我們可以使用星號作為可迭代項的前綴來解包它們的元素。
順便說一句,如果我們利用一個*作為dict 的前綴,它的key 將被解包;如果我們使用雙星號** 作為前綴,其value 將被解包;此時我們必須顯示使用key 來接收解包后的value 。
樣例如下:
D = {'first': 1, 'second': 2, 'third': 3} print(*D) # first second third # print(**D) # TypeError: 'first' is an invalid keyword argument for print() print('{first},{second},{third}'.format(**D)) # 1,2,3
解包的語法可以讓我們的代碼更加簡潔,樣例如下:
L = [1, 2, 3, 4, 5, 6, 7, 8] a, *b = L print(a) # 1 print(b) # [2, 3, 4, 5, 6, 7, 8]
“Python中星號的使用方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。