校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Python函數參數中的*與**運算符

Python函數參數中的*與**運算符

熱門標簽:打印谷歌地圖標注 看懂地圖標注方法 廣東旅游地圖標注 淮安呼叫中心外呼系統如何 京華圖書館地圖標注 佛山通用400電話申請 蘇州人工外呼系統軟件 電話機器人貸款詐騙 電話外呼系統招商代理

問題描述

在閱讀某些代碼時,經常會看到函數定義/調用時的參數前帶有 * 或者 ** 運算符,比較糊涂,今天來探究記錄一番.

函數定義時的 * 和 **

查閱相關資料得知,在參數前面加上* 號 ,意味著參數個數不止一個,而帶一個星號(*)參數的函數傳入的參數存儲為一個元組(tuple),帶兩個(*)號則是表示字典(dict)!

我們定義3個函數來分別測試一下*和**的功能。

第一個函數func1參數列表中有兩個參數,其中參數b前有*
第二個函數func2參數列表中有兩個參數,其中參數b前有**
第三個函數func3參數列表中有三個參數,第二個參數前有*,第三個參數前有**

def func1(a, *b):
  print(a)
  print(b)
  
def func2(a, **b):
  print(a)
  print(b)
  
def func3(a, *b, **c):
  print(a)
  print(b)
  print(c)

然后我們進行參數傳入

func1(1, 2, 3, 4)
print("---"*24)
func2(1, x=1, y=2)
print("---"*24)
func3(1, 2, 3, 4, x=5, y=6)

打印結果為:

$python3 main.py
 
(2, 3, 4)
------------------------------------------------------------------------
1
{'x': 1, 'y': 2}
------------------------------------------------------------------------
1
(2, 3, 4)
{'x': 5, 'y': 6}

可以看到,第一個函數將多余1個的后續參數全部以元組形式賦值給了帶*參數b,第二個函數則將多余參數以字典形式賦值給了帶**參數b,當*和**同時存在時,一個星號(*)參數的函數傳入的參數存儲為一個元組(tuple),帶兩個(*)號則是表示字典(dict)。

如果這里我們不使用賦值形式傳入參數來調用func2時,程序則會報錯,例如

func2(1, 2, 3, 4)
print("---"*24)

將會有如下報錯信息:

Traceback (most recent call last):
  File "main.py", line 18, in module>
    func2(1, 2, 3, 4)
TypeError: func2() takes 1 positional argument but 4 were given

*和**調用時的作用

在調用時,*主要是用來解壓參數列表,對于set、tuple、list、dict(會取其values的值)類型的數據都適用。實驗代碼如下:

def func4(a, b):
  print(a)
  print(b)

params_set = (1, 2)
params_tuple = (1, 2)
params_list = [1, 2]
params_dict = {
  "a": 1,
  "b": 2
}

我們使用*參數方式對其分別進行調用

print("***"*24)
func4(*params_set)
print("***"*24)
func4(*params_tuple)
print("***"*24)
func4(*params_list)
print("***"*24)
func4(*params_dict)
print("***"*24)

打印結果如下:

************************************************************************
1
2
************************************************************************
1
2
************************************************************************
1
2
************************************************************************
a
b
************************************************************************

 可以看到,*將參數按順序一一賦值(set并無順序,因此盲猜結果是隨機的,未實驗驗證),而dict類型則是將字典的keys作為函數參數進行賦值。

**參數方式則要求輸入必須是一個dict,而且變量名稱要與函數定義的變量名稱一致,實驗代碼如下:

params_dict1 = {
  "a": 1,
  "b": 2
}
params_dict2 = {
  "x": 1,
  "y": 2
}

print("---"*24)
func4(**params_dict1)
print("---"*24)
func4(**params_dict2)

打印結果如下:

------------------------------------------------------------------------
1
2
------------------------------------------------------------------------
Traceback (most recent call last):
  File "main.py", line 57, in module>
    func4(**params_dict2)
TypeError: func4() got an unexpected keyword argument 'x'

可以看到,當變量名稱與函數定義的變量名稱不一致時,程序會報錯

參考

Python函數中參數前帶*和**是什么意思?
Execute Python-3 Online (Python v3.6.2),

到此這篇關于Python函數參數中的*與**運算符的文章就介紹到這了,更多相關Python *與**運算符內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python 帶星號(* 或 **)的函數參數詳解
  • 詳解Python 函數參數的拆解
  • Python函數參數定義及傳遞方式解析
  • python+opencv邊緣提取與各函數參數解析
  • Python 限定函數參數的類型及默認值方式
  • python函數參數(必須參數、可變參數、關鍵字參數)
  • python 編碼中為什么要寫類型注解?
  • 深入淺析Python 函數注解與匿名函數
  • Python中typing模塊與類型注解的使用方法
  • Python使用functools實現注解同步方法
  • Python函數參數和注解的使用

標簽:駐馬店 湖州 股票 衡水 呼和浩特 畢節 江蘇 中山

巨人網絡通訊聲明:本文標題《Python函數參數中的*與**運算符》,本文關鍵詞  Python,函數,參數,中的,與,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python函數參數中的*與**運算符》相關的同類信息!
  • 本頁收集關于Python函數參數中的*與**運算符的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 龙泉市| 永吉县| 葵青区| 乌拉特后旗| 阿克陶县| 奉节县| 襄城县| 同德县| 镇原县| 九龙城区| 平安县| 吉木乃县| 岫岩| 监利县| 安仁县| 响水县| 绥棱县| 丽江市| 新邵县| 正定县| 湛江市| 烟台市| 油尖旺区| 庐江县| 永顺县| 博爱县| 长兴县| 舞钢市| 阜南县| 新干县| 文水县| 芮城县| 西充县| 新干县| 喀喇| 武平县| 兴宁市| 乐东| 呼和浩特市| 同心县| 延安市|