show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 我们上次比较完整地了解了三种参数
- 纯位置
- / 之前
- 两可
- / 和 * 之间
- 纯关键字
-
- 之后
-
- 纯位置
- 顾名思义
- 三类形参都有各自接受实参的方式
- 不按方式来就报错
- 手册里还提到了
*
和**args
- 是什么意思?
- 可以接受任意数量的参数
- 用*args的方式装载
def sum(*args):
result = 0
for arg in args:
print(arg)
result += arg
return result
print(sum(1, 2, 3))
- 这个有点是可以接受任意多的变量作为参数
- 1数相加
- 2数相加
- 3数相加
- 100数相加
- 都可以
def concat(*args,sep="/"):
return sep.join(args)
print(concat("oeasy", "o2z", "o3z"))
- 如果我想把sep也修改了
- 应该怎么办?
- 把sep用关键字的方法传递到函数中
- 一般来说这个不定长的*args是最后一个参数
- 如果后面还有参数
- 一定是纯关键字(keyword only)的
- 不定长参数元组搁最后面么?
- 他会把oeasy当做sep
- 那这种情况如何解决?
- 强制将":"赋给sep
- 尝试
- 貌似确实可以
def sum(*args):
result = 0
for arg in args:
print(arg)
result += arg
return result
t = (1, 2, 3)
print(sum(*t))
- 确实可以
- 查看args的type
- 我们这次了解了列表作为参数
- 元组作为形参(args)被定义
- 如果实参传过来是多个元素
- 用逗号隔开
- 函数中可以用对*args解包
- args是一个列表
- 这样我们就可以在调用的时候使用不定长的参数了
- 加法、平均值这样的函数不再是固定参数个数了
- 这很方便
- 如果实参传过来是多个元素
- 元组作为实参被调用的时候
- 如果真的是一个列表变量
- 前面要加上*
- 变成*l
- 可以把列表项作为参数一个个传过去
- 如果真的是一个列表变量
- 文档汇总好像还提到了字典
- 这个怎么用呢?🤔
- 我们下次再说👋