python学习随笔(一).python的装包解包(*和**的个人理解)

本文介绍了Python中的*args和**kwargs在函数参数中的应用,包括如何接收不定数量的非字典和字典实参。讨论了与它们相关的形参规则,如不能在它们前面设置指定参数名的实参,以及args后面形参的使用规则。此外,还探讨了*和**在装包解包中的作用,如何迭代容器和字典。
摘要由CSDN通过智能技术生成

一、"*“和”**"应用在函数参数中时:

def fun(*args,**kvargs):
	if args:
		print("传入的第一部分参数为:",end = " ")
		print(args)
		print("它的数据类型为",end = " ")
		print(type(args))
	else:
		print("您没有输入属于第一部分的参数")
	if kvargs:
		print("传入的第二部分参数为:",end = " ")
		print(kvargs)
		print("它的数据类型为",end = " ")
		print(type(kvargs))
	else:
		print("您没有输入属于第二部分的参数")
	print('*'*55)
	if args:
		print("迭代第一部分参数得到:")
		for temp in args:
			print(temp)
	else:
		print("并没有输入属于第一部分参数 ")
	if kvargs:
		print("迭代第二部分参数得到:")
		for k,v in kvargs.items():
			print(k,v)
	else:
		print("并没有输入属于第二部分参数 ")

其中*args表示它可以接收一串不定数量的非字典dict实参,并将它们包装为元组tuple
**kvargs表示它可以一串不定数量的字典dict实参,并将它们包装为字典
1.比如我们先输入三个实参:

fun(1,'a',None)

得到的输出为:

传入的第一部分参数为: (1, 'a', None)
它的数据类型为 <class 'tuple'>
您没有输入属于第二部分的参数
*******************************************************
迭代第一部分参数得到:
1
a
None
并没有输入属于第二部分参数

2.当我们传入一个元组tuple,列表list甚至字典dict时,它们也同样被认为是属于*args的参数:

fun(("a",1,None),[4,"None","rookie"],{"name":"xiaoming","sex":"male","age":12})

输出为:

传入的第一部分参数为: (('a', 1, None), [4, 'None', 'rookie'], {'name': 'xiaoming', 'sex': 'male', 'age': 12})
它的数据类型为 <class 'tuple'>
您没有输入属于第二部分的参数
*******************************************************
迭代第一部分参数得到:
('a', 1, None)
[4, 'None', 'rookie']
{'name': 'xiaoming', 'sex': 'male', 'age': 12}
并没有输入属于第二部分参数

3.只有当我们输入字典dict实参时,才会被**kvargs接收
比如:

fun(name = "xiaoming",age = 12,sex = "male")

输出为:

您没有输入属于第一部分的参数
传入的第二部分参数为: {'name': 'xiaoming', 'age': 12, 'sex': 'male'}
它的数据类型为 <class 'dict'>
*******************************************************
并没有输入属于第一部分参数
迭代第二部分参数得到:
name xiaoming
age 12
sex male

4.下面说一些关于与*args和kvargs有关的形参规则:
第一条规则:*args和
kvargs前面均不能有有指定参数名的实参,比如:

def fun(a,*args,**kvargs)
	print(a)
	print(args)
	print(kvargs)
fun(a=(1,2,3),3,4,5,name = "xiaoming",age = 12,sex = "male")
fun(a=(1,2,3),3,4,5)

这两个的输出都会报错,分别为:

File "D:\Program\Notepad++\workspace\new 2.py", line 5
fun(a=(1,2,3),3,4,5,name = "xiaoming",age = 12,sex = "male")
                 ^
SyntaxError: positional argument follows keyword argument



File "D:\Program\Notepad++\workspace\new 2.py", line 6
fun(a=(1,2,3),3,4,5)
                 ^
SyntaxError: positional argument follows keyword argument

第二条规则:args后面的形参由对应的实参传入时必须指定参数名,否则会被归到args中(如果此时形参还没设定默认值,就会报错)。

def fun(*args,b =1):
	print(args)
	# print(kvargs)
	print(b)
	print("*"*50)
fun(1,2,3,4,b = 1)
fun(1,2,3,4,1)

输出为:

(1, 2, 3, 4)
1
**************************************************
(1, 2, 3, 4, 1)
1
**************************************************

二*和**在装包解包中的应用

在我的理解里
*(容器)就相当于迭代容器中的数据
*迭代字典dict时得到的一串key的值
**迭代字典得到的只能用format输出
下面举例

a=(1,2,3,4)
b=["sex","age",6]
c="abdjlad"
d={"name":"xiaoming","age":12}
print(*a)
print(*b)
print(*c)
print(*d)
print("name:{name},age:{age}".format(**d))

输出:

1 2 3 4
sex age 6
a b d j l a d
name age
name:xiaoming,age:12.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值