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

python中什么是位置参数

发布网友 发布时间:2022-04-23 17:29

我来回答

1个回答

热心网友 时间:2022-04-07 13:39

先说说函数定义,我们都知道,下面的代码定义了一个函数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
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? python中 形式参数和实际参数有什么区别 Python什么是命令行参数 简单谈谈Python中函数的可变参数 python中什么是变量什么是参数? Python中参数是传值,还是传引用 Python方法的几种常见参数类型 我想要个繁体字大全,是这种形式的比如:干(乾) 就是有简体也有繁体的 腌咸鸭蛋,盐和鸭蛋的比例是多少?谢谢! 腌鸭蛋的方法30个鸭蛋用多少盐盐? 腌鸭蛋一斤鸭蛋多少盐 腌制咸鸭蛋用粗盐还是细盐? 请问腌鸭蛋盐和水的比,怎么腌? 请问腌制咸鸭蛋盐和水的比例或鸭蛋个数与盐的准确比例是多少 腌制鸭蛋用盐的比例 腌咸鸭蛋水和盐的比例 请问腌鸭蛋,盐和鸭蛋的配比是多少? 微信里收藏的视频,在手机上可以看,ipad上看不了,是什么原因? 盐水腌鸭蛋盐和水的比例是多少 苹果手机微信收藏视频怎么看不了? 腌鸭蛋放多少盐多少水一斤 python中参数是列表怎么使用 python中参数传值问题 python中参数传递的方式是什么 Python函数之参数类型和参数传递(上) iPhone暗黑模式来了,但如何单独关闭微信的深色模式? 安徽,现在还能报专升本吗 请问2019年安徽统招专升本可能什么时候考试呀 2019年专升本的考试时间是什么时候? 专升本考试什么时候考。怎么填志愿啊。 专升本每年考试是什么时侯? 2019年安徽普通专升本招生计划 2019专升本考试时间? 专升本考试时间大概是什么时间? 你好,备用金还上显示有别的逾期不能用了? 2019专升本考试时间 我的备用金逾期一天已经还清 但是还是显示我有花呗借呗网商贷逾期? 备用金逾期了一天还清了但是取用仍显示借呗花呗网商贷等贷款逾期 请结清再试? 安徽医科大学专升本怎么报名 支付宝花呗和备用金有逾期还款后取用备用金总显示没有还清 有欠款 安徽专升本都考什么,都可以报哪些院校