解包kwargs python的封包與解包

2021-10-13 23:59:11 字數 1890 閱讀 1457

將多個值賦值給乙個變數時,python會自動將這些值封裝成元組,這個特性稱之為封包

a = 1, 2, 3

print(a, type(a)) # (1, 2, 3)

當函式返回多個數值時,也會進行封包

def test():

return 1, 2, 3

a = test()

print(a, type(a)) # (1, 2, 3)

實踐中,很少主動使用封包操作

python解包是使用頻率非常高的技術,下面列列舉幾種使用python解包的場景

def test():

return 1, 2, 3

a, b, c = test()

print(a, b, c) # 1 2 3

函式的返回值是乙個元組,左側是三個變數,這樣就會發生解包,a, b, c依次等於元組裡的元素,函式的返回值有3個,被封包成了元組, 賦值語句的左側不一定非得是3個變數

def test():

return 1, 2, 3

a, *b = test()

print(a, b) # 1 [2, 3]

變數a賦值為1, 變數b前面有乙個星號,剩餘的2, 3 將被解包為列表

my_dic = 

for item in my_dic.items():

print(item)

# 解包

for key, value in my_dic.items():

print(key, value)

def func(*args):

print(sum(args))

a = (2, 4, 6)

func(*a) # 將元組解包成可變引數

def func_2(**kwargs):

for key, value in kwargs.items():

print(key, value)

b =

func_2(**b) # 將字典解包成關鍵字引數

使用解包技術,可以將元組解包成可變引數,將字典解包成關鍵字引數,這種技術在實踐中大量應用,比如使用python操作redis時,如果你想一次性向集合中新增多個值,就必須使用解包結束傳入引數

import redis

from conf.redis_conf import redisconfig, queueconfig

r = redis.redis(host=redisconfig.host, port=redisconfig.port,

password=redisconfig.password, db=redisconfig.db)

r.sadd('my_set', *tup)

sadd的方法定義如下

def sadd(self, name, *values):

"add ``value(s)`` to set ``name``"

return self.execute_command('sadd', name, *values)

如果不使用解包技術,就只能在呼叫sadd方法時手動逐個寫入引數,耗時又費力

巧妙的利用解包技術,可以簡單方便的將兩個字典合併到乙個新字典中

dic_1 = 

dic_2 =

dic_3 =

print(dic_3) #

Python中的解包

a,b,c 1 2 3 print a,b,c 1 2 3 a,b,c print a,b,c 1 2 3 2.python中交換變數值實際也是解包的過程。a,b 1,2 a,b b,a print a,b 2 1 a,b,c 1,2,3,4 print a,b,c 1 2 3,4 在函式呼叫時,你...

資料封包解包協議之TCP封包解包

資料封包協議規定 整個資料報包含2位元組長度資訊 資料報體。2位元組長度資訊包含本身著2位元組。如 資料體是 abcdefg 7個位元組,整體封包就是09abcdefg,總共是9個位元組的協議 1 netbus接收到資料後傳送到static void on recv tcp data uv sess...

python 序列解包

當函式或方法返回元組時,將元組中值賦給變數序列中的變數,這個過程就叫做序列解包。1 序列1,2,3被打包到元組values中 values 1,2,3 type values values 1,2,3 2 序列解包,元組values中的值分別被賦給變數序列中的x,y,z x,y,z values p...