Python中星號(hào)的五種用法小結(jié)
1. 引言
星號(hào)* 往往被稱為乘法運(yùn)算符,是所有程序中最為常用的運(yùn)算符號(hào)之一,在Python 中,星號(hào)還有很多隱藏的強(qiáng)大功能。
本文將用最容易理解的例子來(lái)解釋星號(hào)*的 五個(gè)使用場(chǎng)景,從初級(jí)用法到高階用法。
閑話少說(shuō),我們直接開始吧!
2. 乘法和冪運(yùn)算符
最簡(jiǎn)單的用法是利用星號(hào)作為基本的運(yùn)算符:
- 單個(gè) * 用于乘法運(yùn)算
- 兩個(gè) ** 表示冪運(yùn)算
相關(guān)樣例用例代碼如下:
>>> 2*3 >>> 6 >>> 2**3 >>> 8
3. 函數(shù)接收數(shù)量不固定的入?yún)?/h2>
一般來(lái)說(shuō),函數(shù)往往接收固定數(shù)量的參數(shù);但是如果我們需要更大的靈活性,比如當(dāng)不確定將傳遞多少個(gè)參數(shù)時(shí),此時(shí)將是星號(hào)* 發(fā)揮作用的時(shí)候。
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
如上例所示,在定義函數(shù)時(shí),我們可以定義一個(gè)以一個(gè)或兩個(gè)星號(hào)為前綴的參數(shù),以捕獲不限制數(shù)量的參數(shù)輸入??偨Y(jié)如下:
- 以 一個(gè) * 為前綴的參數(shù)可以將任意數(shù)量的參數(shù)以元組形式傳入
- 以兩個(gè) ** 為前綴的參數(shù)可以將任意數(shù)量的參數(shù)以字典形式傳入
按照慣例,當(dāng)我們定義的函數(shù)接收不定數(shù)量的參數(shù)時(shí),我們一般采用以下函數(shù)定義形式:
def func(*args, **kwargs): pass
4. 限制函數(shù)入?yún)H以關(guān)鍵字形式輸入
星號(hào)* 的一個(gè)非??岬挠梅ㄊ鞘购瘮?shù)只能接收關(guān)鍵字參數(shù)。
很難理解,我們舉例來(lái)說(shuō)明:
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
上述代碼采用了星號(hào)* 限制了星號(hào)之后的參數(shù)必須采用關(guān)鍵字形式來(lái)調(diào)用上述函數(shù)。
實(shí)際上,如果我們只是想將一些參數(shù)限制為僅以關(guān)鍵字形式輸入同時(shí)另一部分參數(shù)依舊按照位置形式輸入,此時(shí)我們可以將位置參數(shù)放置在星號(hào)之前。
樣例代碼如下:
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
5. 可迭代對(duì)象解包操作
我們可以使用星號(hào)* 來(lái)解包可迭代對(duì)象,這將使我們的程序更加清晰且優(yōu)雅。
例如,如果我們要將不同的可迭代對(duì)象(例如一個(gè)列表,一個(gè)元組和一個(gè)集合)組合成一個(gè)新列表,哪種方法最好?
顯然,我們可以使用 for 循環(huán)來(lái)迭代所有元素并將它們逐一添加到新列表中,樣例代碼如下:
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]
上述實(shí)現(xiàn)方式雖然可以完成我們的目的,但是代碼看起來(lái)太冗長(zhǎng)了,而且不是很Pythonic 。
推薦的改進(jìn)方式是使用列表生成式,如下所示:
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]
上述代碼中,我們將三個(gè) for 循環(huán)減少為一行列表生成式。它已經(jīng)是Pythonic了,但不一定是最簡(jiǎn)單的!
是時(shí)候看看星號(hào)的強(qiáng)大之處啦。
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]
如上所述,我們可以使用星號(hào)作為可迭代項(xiàng)的前綴來(lái)解包它們的元素。
順便說(shuō)一句,如果我們利用一個(gè)*作為dict 的前綴,它的key 將被解包;如果我們使用雙星號(hào)** 作為前綴,其value 將被解包;此時(shí)我們必須顯示使用key 來(lái)接收解包后的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
6. 擴(kuò)展可迭代對(duì)象解包
解包的語(yǔ)法可以讓我們的代碼更加簡(jiǎn)潔,樣例如下:
L = [1, 2, 3, 4, 5, 6, 7, 8] a, *b = L print(a) # 1 print(b) # [2, 3, 4, 5, 6, 7, 8]
7. 結(jié)論
星號(hào)* 是程序中最常用的運(yùn)算符之一。除了用作乘法運(yùn)算符之外,它在Python中還有一些優(yōu)雅而強(qiáng)大的用法,這將幫助我們的代碼變得更加Pythonic 。
本文重點(diǎn)講解了星號(hào)的五種用法,并給出了相應(yīng)的代碼示例,您學(xué)廢了嘛?
到此這篇關(guān)于Python中星號(hào)的五種用法小結(jié)的文章就介紹到這了,更多相關(guān)Python 星號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python傳參時(shí)一個(gè)星號(hào)和兩個(gè)星號(hào)的區(qū)別小結(jié)
- 一文帶你掌握python中*星號(hào)的用法
- Python 中星號(hào)(*)的用法小結(jié)
- Python中的星號(hào)*還能這么用你知道嗎
- python星號(hào)(*)和雙星號(hào)(**)?函數(shù)動(dòng)態(tài)參數(shù)匹配及解包操作方法
- Python中你所不知道的星號(hào)?*?用法
- Python 帶星號(hào)(* 或 **)的函數(shù)參數(shù)詳解
- python 星號(hào)(*)的多種用途
- Python星號(hào)*與**用法分析
- Python參數(shù)傳遞中雙星號(hào)(**)和單星號(hào)(*)是作用
相關(guān)文章
淺談Tensorflow2對(duì)GPU內(nèi)存的分配策略
本文主要介紹了Tensorflow2對(duì)GPU內(nèi)存的分配策略,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Django中傳遞參數(shù)到URLconf的視圖函數(shù)中的方法
這篇文章主要介紹了Django中傳遞參數(shù)到URLconf的視圖函數(shù)中的方法,Django是最具人氣的Python開發(fā)框架,需要的朋友可以參考下2015-07-07Python辦公自動(dòng)化批量處理文件實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Python辦公自動(dòng)化批量處理文件實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06python 在某.py文件中調(diào)用其他.py內(nèi)的函數(shù)的方法
這篇文章主要介紹了python 在某.py文件中調(diào)用其他.py內(nèi)的函數(shù)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06Python selenium的安裝和下載谷歌瀏覽器鏡像驅(qū)動(dòng)
Selenium是一個(gè)用于web自動(dòng)化測(cè)試的框架,在使用Ajax請(qǐng)求數(shù)據(jù)的頁(yè)面中,會(huì)出現(xiàn) sign ,token等密鑰,借助使用Selenium框架來(lái)實(shí)現(xiàn)數(shù)據(jù)爬取很不錯(cuò),本文給大家介紹Python selenium的安裝和下載谷歌瀏覽器鏡像驅(qū)動(dòng),需要的朋友可以參考下2022-11-11基于Python實(shí)現(xiàn)捕獲,播放和保存攝像頭視頻
這篇文章主要為大家分享一下Python操作視頻最基本的操作,包括讀取和播放視頻和保存視頻。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-04-04腳本測(cè)試postman快速導(dǎo)出python接口測(cè)試過(guò)程示例
這篇文章主要介紹了關(guān)于腳本測(cè)試postman快速導(dǎo)出python接口測(cè)試示例的過(guò)程操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09使用python把Excel中的數(shù)據(jù)在頁(yè)面中可視化
最近學(xué)習(xí)數(shù)據(jù)分析,感覺Python做數(shù)據(jù)分析真的好用,下面這篇文章主要給大家介紹了關(guān)于如何使用python把Excel中的數(shù)據(jù)在頁(yè)面中可視化的相關(guān)資料,需要的朋友可以參考下2022-03-03Python通過(guò)串口實(shí)現(xiàn)收發(fā)文件
這篇文章主要為大家詳細(xì)介紹了Python如何通過(guò)串口實(shí)現(xiàn)收發(fā)文件功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11