將多個值賦值給乙個變數時,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...