python中的arg,*args,args,**kwargs,kwargs的区别
目录
arg就是指一个参数
def func(arg):
print(arg)
func(2)
输出:
2
*args 是用来将参数打包成元组给函数调用的,args即是传给函数的参数所构成的元组
def func(arg, *args):
print(arg, *args)
func(1, 2, 3, 4, 5, 6, 7)
输出:
1( 2, 3, 4, 5, 6, 7)
**kwargs是用来将关键字参数打包成字典给函数调用的,kwargs即是传给函数所构成的字典
def func(arg, *args, **kwargs):
print(arg, args, kwargs)
func(1, 2, 3, 4, 5, 6, 7, name='xiaoming', age=18)
输出:
1( 2, 3, 4, 5, 6, 7){’name’:‘xiaoming’, ‘age’‘18}
*args:可以理解为只有一列的表格,长度不固定。
**kwargs:可以理解为字典,长度也不固定。
继续举例 说明:
首先,args和kwarg不是必须成对出现,也不是必须叫这个名字,也可以叫x和y。写成这样,只是一种约定俗成,比如给别人讲故事:从前有个张三和李四……大家一听就知道你要说什么了,而不能说从前有个马七狗八,大家虽然也能听懂,但总是不太好理解。
先说_args的作用,还是开篇的案例,我们要算不定长的加法,就可以用_args来定义了,当然也可以叫_x,_y。
def Jiafa(*args):
sum = 0
for i in args:
sum = sum + i
print(sum)
Jiafa(1, 3, 5)
Jiafa(2, 4, 6, 8, )
输出结果,9和20。这个案例很简单,用*args定义就可以引入,相当于定义了不定长度的函数,然后在程序中就可以多次使用。
**kwargs的字典呢?先看一下普通的字典,用一对大括号{}就可以创建字典,比如下面3行程序,就可以编一个字典的程序:
dict = {"system": "系统", "China": "中国", "link": "联接"}
x = input("请输入一个英文单词:")
print(dict.get(x, "本字典里没找到!"))
如果输入正确,会得到答案,否则会显示没找到。
在这个程序里,dict = {“system”: “系统”, “China”: “中国”, “link”: “联接”}创建了三对“键和值”(key和value),比如“system”是key,“系统”是key对应的值,也叫键值。
还可以写一个测试单词的小软件。
dict = {"system": "系统", "China": "中国", "link": "联接"}
# 通过Key找value的语句:
y = input("请输入China的中文意思:")
if dict['China'] == y:
print("恭喜你,答对了!")
# 通过value找Key的语句:
z = input("请输入“系统”的英文单词:")
if list(dict.keys())[list(dict.values()).index("系统")] == z:
print("恭喜你,答对了!")
现在问题来了,如果开始不知道字典里都有哪些内容,需要在程序运程中才知道怎么办?这个时候就可以用**kwargs来定义了。我们先用**kwargs来定义一个函数,函数内容先都不用写,再看看下面的小程序:
def dict(**kwargs):
return kwargs
mydict = dict(system="系统", China="中国", link="联接")
x = input("请输入单词:")
if x in mydict.keys():
print("中文意思:", mydict[x])
else:
print("抱歉,没找到。")
用字典也可以达成这样的功能,使用in……keys(),就是判断这个key是不是存在,如果存在就返回它的值。
同样,用**kwargs传递数据的案例,可以设计一个用户登录的程序:
def dict(**kwargs):
return kwargs
userdict = dict(user1="1234", user2="5678")
x = input("请输入用户名:")
if x in userdict.keys():
y = input("请输入密码:")
if userdict[x] == y:
print("完全正确")
else:
print("密码错误!")
else:
print("用户不存在!")
以上的功能,都是最精减的代码能表达出_args和_*kwarg的功能的。