问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python 函数变量 参数怎么使用

发布网友 发布时间:2022-04-21 04:55

我来回答

1个回答

热心网友 时间:2022-04-18 04:09

刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就不难理解了。
先说说函数定义,我们都知道,下面的代码定义了一个函数funcA
def funcA():
pass

显然,函数funcA没有参数(同时啥也不干:D)。
下面这个函数funcB就有两个参数了,
def funcB(a, b):
print a
print b
调用的时候,我们需要使用函数名,加上圆括号扩起来的参数列表,比如 funcB(100, 99),执行结果是:
100
99
很明显,参数的顺序和个数要和函数定义中一致,如果执行funcB(100),Python会报错的:
TypeError: funcB() takes exactly 2 arguments (1 given)
我们可以在函数定义中使用参数默认值,比如
def funcC(a, b=0):
print a
print b
在函数funcC的定义中,参数b有默认值,是一个可选参数,如果我们调用funcC(100),b会自动赋值为0。
OK,目前为止,我们要定义一个函数的时候,必须要预先定义这个函数需要多少个参数(或者说可以接受多少个参数)。一般情况下这是没问题的,但是也有在定义函数的时候,不能知道参数个数的情况(想一想C语言里的printf函数),在Python里,带*的参数就是用来接受可变数量参数的。看一个例子
def funcD(a, b, *c):
print a
print b
print "length of c is: %d " % len(c)
print c
调用funcD(1, 2, 3, 4, 5, 6)结果是
1
2
length of c is: 4
(3, 4, 5, 6)
我们看到,前面两个参数被a、b接受了,剩下的4个参数,全部被c接受了,c在这里是一个tuple。我们在调用funcD的时候,至少要传递2个参数,2个以上的参数,都放到c里了,如果只有两个参数,那么c就是一个empty tuple。
好了,一颗星我们弄清楚了,下面轮到两颗星。
上面的例子里,调用函数的时候,传递的参数都是根据位置来跟函数定义里的参数表匹配的,比如funcB(100, 99)和funcB(99, 100)的执行结果是不一样的。在Python里,还支持一种用关键字参数(keyword argument)调用函数的办法,也就是在调用函数的时候,明确指定参数值付给那个形参。比如还是上面的funcB(a, b),我们通过这两种方式调用
funcB(a=100, b=99)

funcB(b=99, a=100)
结果跟funcB(100, 99)都是一样的,因为我们在使用关键字参数调用的时候,指定了把100赋值给a,99赋值给b。也就是说,关键字参数可以让我们在调用函数的时候打乱参数传递的顺序!
另外,在函数调用中,可以混合使用基于位置匹配的参数和关键字参数,前题是先给出固定位置的参数,比如
def funcE(a, b, c):
print a
print b
print c
调用funcE(100, 99, 98)和调用funcE(100, c=98, b=99)的结果是一样的。
好了,经过以上铺垫,两颗星总算可以出场了:
如果一个函数定义中的最后一个形参有 ** (双星号)前缀,所有正常形参之外的其他的关键字参数都将被放置在一个字典中传递给函数,比如:
def funcF(a, **b):
print a
for x in b:
print x + ": " + str(b[x])
调用funcF(100, c='你好', b=200),执行结果
100
c: 你好
b: 200
大家可以看到,b是一个dict对象实例,它接受了关键字参数b和c。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
请问我的网络一天了找个部门到现在没有解决请问我上哪投诉? 计算机具备哪几种功能? 计算机有哪些功能是什么 歌词中有丑姑娘的歌曲 驾照不年审会怎样 没开过车驾照年审会通过吗 本来白色的背心放入洗衣机清洗后就变成有黑色斑点 其他一起洗的衣物... ...衣服颜色保持鲜艳(主要是白色衣服洗几次感觉就有点颜色不亮丽了... 为什么登陆lol会叫你解绑 小姨子告诉我说,炒菜时记住这4个小技巧,就是比别人做的好吃 能治好强直性脊柱炎吗或控制病情发展【强直性脊柱炎】 空调制冷却吹出热风? python map函数下参数func怎样才能传入2个参数进去 空调吹热风怎么回事?解决方法介绍 Python 里为什么函数可以返回一个函数内部定义的函数 空调吹的是热风怎么办? python 关于函数的语法 空调不制冷反而吹热风是什么原因? python中TextorFunc具体应该怎么理解 空调开制冷出热风怎么回事 应该如何解 Python编写函数func(x),其功能为判断x是否为字母,如果x是字母则返回true,否则? Python里method和function的区别 function()函数的具体用法 Python中的 fun()是什么意思 python 如何将for循环 的结果写成一个数组 python内嵌函数与闭包里func是不是有位置参数return func(),没有位置参数return func python中function是什么类型 Python代码中func(*args, **kwargs)是什么意思 python 函数语法中的func(variable[,variable]) 怎么理解? 为什么香蕉会很硬 香蕉皮很黄可里面是生的是怎么回事啊? 空调为什么只吹热风? python是什么意思 空调外机为什么出来是热风? python跨模块调用函数的问题? 汽车空调吹出来的是热风怎么回事 import在python中的用法 空调开机一段时间就吹热风? 家用的空调可以吹热风吗 空调热风吹一会就停了,怎么回事? 夏天打开车内空调后,为什么一开始吹出的是热风? 华为手机抖音直播关闭了怎么找回来 为什么抖音直播说发布违规广告后台不提示 看抖音直播看的好好的,突然自动退出怎么回事? 工行贴现利率是多少2021 承兑汇票的贴息率 一般 为多少?怎么算? 两年期承兑汇票贴息率 2013年银行承兑的贴现率一般为多少 半年期银行承兑贴现利率是多少 银行承兑汇票贴现一般是几个点? 承兑汇票的贴息率是多少?有没有明确的规定?