可迭代对象的应用
一个*、迭代对象的解包
可以对字符串、元组、列表等可迭代对象进行解包
fruit = ['apple','pear','grape','banana']
*x,y=fruit
print(f"x={x},y={y}")
x=['apple', 'pear', 'grape'],y=banana
可以把list最后一个元素赋给y,其余的赋给x
对于元组同理
*x,y=(1,2,3,4,5)
print(f"x={x},y={y}")
x=[1, 2, 3, 4],y=5
一个*、可迭代对象的合并
list1 = [1,2]
list2 = ['a','b']
print(f"list1={list1},list2={list2}")
list1=[1, 2],list2=['a', 'b']
相当于解包之后再合并,最后的结果还是一维列表。对于列表来说相当于extend
print([*list1,*list2])
[1, 2, 'a', 'b']
列表中也可做extend操作,但是会改变列表的值
list1.extend(list2)
print(f"list1={list1},list2={list2}")
list1=[1, 2, 'a', 'b'],list2=['a', 'b']
两个*、字典合并
两个星号**把字典解包成关键字参数
dict1 = {"name":"jack"}
dict2 = {"age":10}
{**dict1,**dict2}
{'name': 'jack', 'age': 10}
key不能重复。。。
dict2.update(dict1)
dict2
{'age': 10, 'name': 'jack'}
update直接改变原变量,有时候不合适。可以考虑上面的方法。
定义函数中星号
一个*
def test2(a, *b):
print(f"a={a},b={b}")
print(b)
print(*b)
test2(1, 2, 3)
a=1,b=(2, 3)
(2, 3)
2 3
- 对函数传递的参数进行打包(成元组、列表或者字典)和拆解(分成单个元素),其中单用于元组和列表的打包和解包(非关键字参数)
- 2,3作为tuple传给参数b
- print(*b)时,对元组b做解压
test2(1, 2, 3,4)
a=1,b=(2, 3, 4)
(2, 3, 4)
2 3 4
两个*
def test3(a, **kwargs):
print(f"a={a},kwargs={kwargs}")
print(kwargs)
test3(a=1, b=20, c=30)
a=1,kwargs={'b': 20, 'c': 30}
{'b': 20, 'c': 30}
- ** 就是针对关键字参数和字典的
- 调用test3(a=1, b=20, c=30), kwargs 的值就是 {‘b’: 20, ‘c’: 30} 了。
混用
def test4(a, b=10, *args, **kwargs):
print( a)
print( b)
print( args)
print( kwargs)
test4(1, 2, 3, 4, e=5, f=6, g=7)
1
2
(3, 4)
{'e': 5, 'f': 6, 'g': 7}
print(*[1,2,3])
1 2 3
2022-03-08 于南京市江宁区九龙湖