参数(parameter)让函数变得灵活。相同函数可以接收不同输入,得到不同结果。
默认参数
参数可以有默认值。这样的参数叫默认参数(default parameter)。如果调用函数时没有传入对应参数,就使用默认值。
def format_date(year=1970, month=1, day=1):
return "%04d/%02d/%02d" % (year, month, day)
def main():
print(format_date(2022, 12, 16))
print(format_date(2022, 12))
print(format_date(2022))
print(format_date())
if __name__ == "__main__":
main()运行结果:
2022/12/16
2022/12/01
2022/01/01
1970/01/01默认参数必须放在普通参数后面。否则 Python 无法判断调用时传入的值应该对应哪个参数。
知识测验
题目
默认参数的作用是什么?
可变参数
如果参数数量不固定,可以使用可变参数(variable argument)。
*args 会把多个位置参数(positional argument)打包成一个元组。
def multiply(*args):
product = 1
for arg in args:
product *= arg
return product
print(multiply(1, 2, 3))
print(multiply(4, 2, 6, 1, 2))运行结果:
6
96**kwargs 会把多个关键字参数(keyword argument)打包成一个字典。
def get_score_info(name, **kwargs):
info = "[%s]\n" % name
for subject, score in kwargs.items():
info += "%s: %d\n" % (subject, score)
info += "平均分:%.2f" % (sum(kwargs.values()) / len(kwargs))
return info
print(get_score_info("Alice", Python=85, Math=80))运行结果:
[Alice]
Python: 85
Math: 80
平均分:82.50互动实验
函数参数传递实验
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
*args 会把多个位置参数打包成什么?
知识测验
题目
**kwargs 在函数内部是什么类型?
动手练习
把一维列表打印成二维表格
编写 print_2d_list(lst, row, col),按指定行列打印列表。
- 检查列表长度与 row * col。
- 使用双层循环。
- 逐行打印。
动手练习
编写灵活的收据函数
在一个函数中同时使用普通参数、*items 和 **options。
- 定义 receipt(customer, *items, **options)。
- 打印每个商品。
- 从 options 安全读取 tax 和 currency。