一文帶你掌握python中*星號的用法
Python
中的 *號是一個特殊的符號,在其他編程語言中,它最廣為人知的用途就是作為乘法運(yùn)算的符號。
而在Python
中,它的用途遠(yuǎn)不止如此。
本文總結(jié)了Python
中*號的所有用途,以供參考。
1. 算術(shù)運(yùn)算
*號用來做算術(shù)運(yùn)算幾乎是所有編程語言采用的方法,
在Python中,*號可作為乘法運(yùn)算和指數(shù)運(yùn)算。
比如:
a = 3 b = 5 print("乘法:3×5 = {}".format(a * b)) print("指數(shù):3的5次方 = {}".format(a**b)) # 運(yùn)行結(jié)果 乘法:3×5 = 15 指數(shù):3的5次方 = 243
2. 構(gòu)造與解構(gòu)
除了基本的算術(shù)運(yùn)算,*號在Python中還可以用在數(shù)據(jù)結(jié)構(gòu)的構(gòu)造和解構(gòu)中。
2.1. 列表的構(gòu)造
如果要在一些數(shù)據(jù)中間的某個位置插入一個現(xiàn)有的列表,來構(gòu)造一個新列表的話,大部分語言只能通過循環(huán)來實現(xiàn)。
而Python
中的*號,可以讓我們用一行代碼就實現(xiàn)。
lst = [1, 2, 3] new_lst = [0, lst, 4, 5] print("不使用*號,構(gòu)造后的列表:{}".format(new_lst)) new_lst = [0, *lst, 4, 5] print("使用*號,構(gòu)造后的列表:{}".format(new_lst)) # 運(yùn)行結(jié)果 不使用*號,構(gòu)造后的列表:[0, [1, 2, 3], 4, 5] 使用*號,構(gòu)造后的列表:[0, 1, 2, 3, 4, 5]
使用*號,可以自動將現(xiàn)有列表中的元素展開。
2.2. 列表的解構(gòu)
簡單來說,解構(gòu)就是將列表中的元素分配給幾個變量。
比如下面的代碼,利用*號,可以迅速將一個列表中的元素分為3個部分:
# 列表解構(gòu) first, *lst, last = new_lst print("列表第一個元素:{}".format(first)) print("列表中間元素:{}".format(lst)) print("列表最后一個元素:{}".format(last)) # 運(yùn)行結(jié)果 列表第一個元素:0 列表中間元素:[1, 2, 3, 4] 列表最后一個元素:5
2.3. 字典的構(gòu)造
字典的構(gòu)造是用 兩個*號。
dict = {"name": "harry", "age": 40} new_dict = {"gender": "male", **dict} print("構(gòu)造后的字典:{}".format(new_dict)) # 運(yùn)行結(jié)果 構(gòu)造后的字典:{'gender': 'male', 'name': 'harry', 'age': 40}
這樣,就把已有字典中的key/value
展開到新的字典中去了。
注意,字典類型的變量如果不加雙*號,是會報錯的,比如:
new_dict = { "gender": "male", dict} # 這樣寫會報語法錯誤
字典只有構(gòu)造的方法,沒有類似列表的解構(gòu)方法。
3. 函數(shù)參數(shù)
*號用在函數(shù)參數(shù)中,可以定義更加靈活的參數(shù)形式。
3.1. 不定長參數(shù)
不定長參數(shù)讓函數(shù)更加靈活,比如 print
函數(shù)的參數(shù)就是不定長的,傳入幾個參數(shù),它就打印幾個。
再比如,我們構(gòu)造一個求和的函數(shù),希望可以對任意數(shù)量的整數(shù)求和,就可以用** *號**來實現(xiàn)。
# 求和函數(shù) def add(*numbers): sum = 0 for number in numbers: sum += number return sum
使用此函數(shù)時,可以傳入任意數(shù)量的參數(shù):
# 可以傳入任意數(shù)目的參數(shù) sum = add(1, 2, 3) print("1~3 求和:{}".format(sum)) sum = add(1, 2, 3, 4) print("1~4 求和:{}".format(sum)) # 運(yùn)行結(jié)果 1~3 求和:6 1~4 求和:10
當(dāng)然,對于有 *號 的參數(shù),也可以傳入列表變量作為參數(shù),不過列表變量前要加 *號。
lst = [1, 2, 3] sum = add(*lst) # 變量 lst 前不加 *號 會報錯 print(sum)
3.2. 不定長的關(guān)鍵字參數(shù)
所謂關(guān)鍵字參數(shù),就是傳入?yún)?shù)的時候,不僅傳入?yún)?shù)的值,還傳入?yún)?shù)的名稱。
比如下面一個模擬改變對象屬性的函數(shù):
def change(obj, **attrs): for key, val in attrs.items(): obj[key] = val
通過參數(shù)**attr
,函數(shù)可以修改obj
對象的任意屬性。
這樣的好處是不用定義多個不同的函數(shù)來修改obj
的不同屬性。
person = {"name": "harry", "age": 30, "gender": "male"} print("修改前:{}".format(person)) # 調(diào)用方式 change(person, age=40, name="jack") print("修改后:{}".format(person)) # 運(yùn)行結(jié)果 修改前:{'name': 'harry', 'age': 30, 'gender': 'male'} 修改后:{'name': 'jack', 'age': 40, 'gender': 'male'}
4. 限制函數(shù)調(diào)用
最后的這個*號的用途比較罕見,如果你知道這個用途的話,我會對你很佩服。
先定義一個示例函數(shù):
def self_introduce(name, age): print("大家好,我是 {}, 今年 {} 歲。".format(name, age))
這個函數(shù)很簡單,傳入name
和age
兩個參數(shù),然后打印一段簡單的自我介紹。
在Python
中,我們可以用下面兩種方式調(diào)用這個函數(shù):
# 方式一 self_introduce("harry", 40) # 運(yùn)行結(jié)果 大家好,我是 harry, 今年 40 歲。 # 方式二 self_introduce(name="harry", age=40) # 運(yùn)行結(jié)果 大家好,我是 harry, 今年 40 歲。
兩種方式的效果是是一樣的。
方式一也可以叫做位置參數(shù)調(diào)用法;
方式二也可以叫做關(guān)鍵字參數(shù)調(diào)用法。
4.1 只能用關(guān)鍵字參數(shù)方式調(diào)用
如果我們想限制self_introduce
只能用方式二(關(guān)鍵字參數(shù))來調(diào)用,可以:
# 函數(shù)的第一個參數(shù)用 * 號 def self_introduce(*, name, age): print("大家好,我是 {}, 今年 {} 歲。".format(name, age))
這樣調(diào)用時,只能使用方式二了。
# 這樣調(diào)用會報錯 self_introduce("harry", 40) # 可以正常執(zhí)行 self_introduce(name="harry", age=40)
4.2 只能用位置參數(shù)方式調(diào)用
如果想限制self_introduce
只能用方式一(位置參數(shù))來調(diào)用,可以:
# 函數(shù)的最后一個參數(shù)用 / 號 def self_introduce(name, age, /): print("大家好,我是 {}, 今年 {} 歲。".format(name, age))
這樣調(diào)用時,只能使用方式一了。
# 可以正常執(zhí)行 self_introduce("harry", 40) # 這樣調(diào)用會報錯 self_introduce(name="harry", age=40)
以上就是一文帶你掌握python中*星號的用法的詳細(xì)內(nèi)容,更多關(guān)于python星號*的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pytorch之關(guān)于PyTorch結(jié)構(gòu)介紹
這篇文章主要介紹了pytorch之關(guān)于PyTorch結(jié)構(gòu)的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09python 3利用BeautifulSoup抓取div標(biāo)簽的方法示例
這篇文章主要介紹了python 3利用BeautifulSoup抓取div標(biāo)簽的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-05-05Python解析JSON數(shù)據(jù)的基本方法實例代碼
JSON (JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式,下面這篇文章主要給大家介紹了關(guān)于Python解析JSON數(shù)據(jù)的基本方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01Python讀取Excel數(shù)據(jù)實現(xiàn)批量生成PPT
我們常常面臨著大量的重復(fù)性工作,通過人工方式處理往往耗時耗力易出錯。而Python在辦公自動化方面具有天然優(yōu)勢。本文將利用讀取Excel數(shù)據(jù)并實現(xiàn)批量生成PPT,需要的可以參考一下2022-05-05python selenium爬取斗魚所有直播房間信息過程詳解
這篇文章主要介紹了python selenium爬取斗魚所有直播房間信息過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08