亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用python不定長參數*args和**kwargs

發布時間:2021-11-22 11:29:44 來源:億速云 閱讀:259 作者:iii 欄目:大數據

本篇內容主要講解“怎么使用python不定長參數*args和**kwargs”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用python不定長參數*args和**kwargs”吧!

在python語言寫成的模塊中的函數里,常常可以看到函數的參數表列里面有這兩個參數,形如:

def some_function(*args, **kwargs):
    to do list
    return 0

首先,解釋星號的作用,一個星號*的作用是將tuple或者list中的元素進行unpack,分開傳入,作為多個參數;兩個星號**的作用是把dict類型的數據作為參數傳入。

kwargs是keyword argument的縮寫,args就是argument。我們知道,在Python中有兩種參數,一種叫位置參數(positional argument),一種叫關鍵詞參數(keyword argument),關鍵詞參數只需要用 keyword = somekey 的方法即可傳參,而位置參數只能由參數位置決定。這也就決定了位置參數一定要在前面,否則關鍵詞參數數量的變化(比如有些kwargs有默認值因此沒有傳參或者在后面傳參的),都會使得位置無法判斷。因此常見的也是*args**kwargs 前面。

題目描述:

1、怎么理解不定長參數?
2、*args**kwargs 是什么意思?為什么要使用它們?

答案要點如下:

1、函數參數可為分如下幾種:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數

2、當我們在定義和調用一個函數時,如果包含所有的參數類型,則必須按照:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數的順序。但是在實際開發中,不建議包含過多的參數類型,會影響代碼的可讀性

3、必選參數很簡單,就是函數中必須要接受的參數

4、默認參數,即給參數賦一個默認值,我們在傳遞時,可省略對該參數的傳值操作。如:

def print_test(title, msg="world"):
    print(title, msg)

print_test("hello") # hello world
print_test("hello", "demon") # hello demon
print_test("hello", msg="demon") # hello demon

# 錯誤調用示例
# print_test( msg="demon","hello") # 這樣是不對的

5、可變參數,在定義函數是用 *args 來接受,其中 * 是規定的,args可用其他名稱替換,但一般習慣用 args 來表示。可變參數在傳入函數后,被封裝成一個 tuple 來進行使用。所以我們在函數內部,可以通過操作 tuple 的方法來操作參數,示例如下:

def print_numbers(*args):            
    print(type(args))  # tuple
    for n in args:
      print(type(n))   # int

print_numbers(1, 2, 3, 4)

6、如果在函數外已經得到一個 list 或者 tuple,想調用一個可變參數,也可以用 *+變量名 的形式進行調用,(這種用法有點類似 C語言 中的指針),示例如下:

def print_numbers(*args):            
    print(type(args))  # tuple
    for n in args:
      print(type(n))   # int

l = [1, 2, 3, 4]
print_numbers(*l)  # *l,等價于 print_numbers(1, 2, 3, 4)
print_numbers(l)   # 將 l 作為一個整體傳入,這樣函數接受到的其實只有一個參數,且參數類型為 list

7、關鍵字參數使用 kwargs 來標識,是規定,而kwargs可替換,它將不定長參數轉換為 dict 傳入函數。它用于擴展函數的功能。比如我們要實現用戶注冊,有必輸項和非必輸項,這些非必輸項就可以用關鍵字參數來接受。示例如下:

def register(name, email, **kwargs):
    print('name:%s, age:%s, others:%s', (name, email, kwargs))

register("demon", "1@1.com") # name:%s, age:%s, others:%s ('demon', '1@1.com', {})
register("demon", "1@1.com", addr="shanghai") # name:%s, age:%s, others:%s ('demon', '1@1.com', {'addr': 'shanghai'})

8、如果函數外已經獲得一個 dict ,想進行函數調用,只需用 **+變量名 傳入即可。并且 dict示例如下:

def register(name, email, **kwargs):
    print('name:%s, age:%s, others:%s', (name, email, kwargs))

d = {"addr":"shanghai"}
register("demon", "1@1.com", **d)

d = {"name":"yrr", "email":"1@1.com", "addr":"shanghai"}
register(**d)

d = {"email":"yrr", "name":"1@1.com", "addr":"shanghai"}
register(**d)

9、命名關鍵字參數用于限制調用函數可傳入的屬性。這里的限制是假限制,因為仍然可以傳入,只是函數體中對限制外的參數不作任何處理。命名關鍵字參數用一個 * 號分隔,* 后面的參數都被視為命名關鍵字參數。如:

def person(name, age, *, city, job):
    print(name, age, city, job)

10、如果函數中已經有了一個可變參數的定義,后面的命名關鍵字參數則不需要再添加 * ,如:

def person(name, age, *args, city, job):
    print(name, age, args, city, job)

11、關鍵字參數和命名關鍵字參數在調用時必須用 key=value 的形式來調用,這類參數我們稱之類名稱參數,而不需要指定參數名稱的參數,也稱為位置參數。必輸參數和可變參數都可以通過位置參數來匹配。如:

def register(name, email, **kwargs):
    print('name:%s, age:%s, others:%s', (name, email, kwargs))

# 錯誤調用:
register("123","123","123")
# 它會把第三個參數 "123">

12、最后一個比較特殊,也是一個結論:對于任意函數,都可以通過func_name(*args, **kw)的形式來進行調用其中 args 是一個已經獲得的列表或者元組,而 kw 是一個已經獲得的字典。列表傳入會按順序對必輸參數賦值,多余的參數會當成可變參數傳入,而字典傳入會根據 key 來匹配所有參數。如:

def test1(a, b, c=0, *args, **kwargs):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kwargs)

def test2(a, b, c=0, *args, d, **kwargs):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'args=', args, 'kw =', kwargs)

# 定義一個元組和字典用作參數傳入
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}

test1(*args, **kw)
# a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}
test2(*args, **kw)
a = 1 b = 2 c = 3 d = 99 args= (4,) kw = {'x': '#'}

到此,相信大家對“怎么使用python不定長參數*args和**kwargs”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富阳市| 汽车| 澳门| 河西区| 南康市| 三河市| 修武县| 大名县| 富蕴县| 南陵县| 达尔| 宿州市| 崇礼县| 九龙城区| 乳山市| 凤冈县| 佛冈县| 澜沧| 东海县| 壤塘县| 麟游县| 岐山县| 钦州市| 邵阳县| 徐水县| 莱芜市| 威宁| 奉新县| 庄浪县| 九江县| 连州市| 山丹县| 永丰县| 南通市| 万源市| 上犹县| 连南| 鄂伦春自治旗| 云浮市| 卢氏县| 澄城县|