Python中?*?號的用法總結
1. 算術運算
*號用來做算術運算幾乎是所有編程語言采用的方法,
在Python中,*號可作為乘法運算和指數(shù)運算。
比如:
a = 3 b = 5 print("乘法:3×5 = {}".format(a * b)) print("指數(shù):3的5次方 = {}".format(a**b)) # 運行結果 乘法:3×5 = 15 指數(shù):3的5次方 = 243
2. 構造與解構
除了基本的算術運算,*號在Python中還可以用在數(shù)據(jù)結構的構造和解構中。
2.1. 列表的構造
如果要在一些數(shù)據(jù)中間的某個位置插入一個現(xiàn)有的列表,來構造一個新列表的話,大部分語言只能通過循環(huán)來實現(xiàn)。
而Python
中的*號,可以讓我們用一行代碼就實現(xiàn)。
lst = [1, 2, 3] new_lst = [0, lst, 4, 5] print("不使用*號,構造后的列表:{}".format(new_lst)) new_lst = [0, *lst, 4, 5] print("使用*號,構造后的列表:{}".format(new_lst)) # 運行結果 不使用*號,構造后的列表:[0, [1, 2, 3], 4, 5] 使用*號,構造后的列表:[0, 1, 2, 3, 4, 5]
使用*號,可以自動將現(xiàn)有列表中的元素展開。
2.2. 列表的解構
簡單來說,解構就是將列表中的元素分配給幾個變量。
比如下面的代碼,利用*號,可以迅速將一個列表中的元素分為3個部分:
# 列表解構 first, *lst, last = new_lst print("列表第一個元素:{}".format(first)) print("列表中間元素:{}".format(lst)) print("列表最后一個元素:{}".format(last)) # 運行結果 列表第一個元素:0 列表中間元素:[1, 2, 3, 4] 列表最后一個元素:5
2.3. 字典的構造
字典的構造是用 兩個*號。
dict = {"name": "harry", "age": 40} new_dict = {"gender": "male", **dict} print("構造后的字典:{}".format(new_dict)) # 運行結果 構造后的字典:{'gender': 'male', 'name': 'harry', 'age': 40}
這樣,就把已有字典中的key/value
展開到新的字典中去了。
注意,字典類型的變量如果不加雙*號,是會報錯的,比如:
new_dict = { "gender": "male", dict} # 這樣寫會報語法錯誤
字典只有構造的方法,沒有類似列表的解構方法。
3. 函數(shù)參數(shù)
*號用在函數(shù)參數(shù)中,可以定義更加靈活的參數(shù)形式。
3.1. 不定長參數(shù)
不定長參數(shù)讓函數(shù)更加靈活,比如 print
函數(shù)的參數(shù)就是不定長的,傳入幾個參數(shù),它就打印幾個。
再比如,我們構造一個求和的函數(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)) # 運行結果 1~3 求和:6 1~4 求和:10
當然,對于有 *號 的參數(shù),也可以傳入列表變量作為參數(shù),不過列表變量前要加 *號。
lst = [1, 2, 3] sum = add(*lst) # 變量 lst 前不加 *號 會報錯 print(sum)
3.2. 不定長的關鍵字參數(shù)
所謂關鍵字參數(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)) # 運行結果 修改前:{'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) # 運行結果 大家好,我是 harry, 今年 40 歲。 # 方式二 self_introduce(name="harry", age=40) # 運行結果 大家好,我是 harry, 今年 40 歲。
兩種方式的效果是是一樣的。
方式一也可以叫做位置參數(shù)調(diào)用法;
方式二也可以叫做關鍵字參數(shù)調(diào)用法。
4.1. 只能用關鍵字參數(shù)方式調(diào)用
如果我們想限制self_introduce
只能用方式二(關鍵字參數(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中 * 號的用法總結的文章就介紹到這了,更多相關Python * 號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python判斷一組數(shù)呈上升還是下降趨勢的操作方法
要判斷一組數(shù)(數(shù)列)是呈上升趨勢、下降趨勢還是無明顯趨勢,我們可以比較數(shù)列中相鄰元素的差值,這篇文章主要介紹了python?如何判斷一組數(shù)呈上升還是下降趨勢,需要的朋友可以參考下2024-06-06python 中os模塊os.path.exists()的用法說明
這篇文章主要介紹了python 中os模塊os.path.exists()的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Python實現(xiàn)將sqlite數(shù)據(jù)庫導出轉成Excel(xls)表的方法
這篇文章主要介紹了Python實現(xiàn)將sqlite數(shù)據(jù)庫導出轉成Excel(xls)表的方法,結合實例形式分析了Python針對sqlite數(shù)據(jù)庫的連接、讀取及使用寫操作包(xlwt)生成Excel表的相關實現(xiàn)技巧,需要的朋友可以參考下2017-07-07