
函数让代码实现了复用,但如果函数参数个数不固定,比如有时需要计算两个数的和,有时需要计算三个数、四个数的和,总不能每次都定义新函数吧?Python的可变参数就能解决这个问题——它允许函数接收任意数量的参数,灵活应对不同场景,而C语言处理可变参数需要借助专门的库函数,语法复杂且容易出错。
可变参数——让函数“按需接收”参数
Python例子:
|
# 定义带可变参数的函数:计算任意个数的和(*args接收位置参数,打包成元组) def sum_all(*args): total = 0 for num in args: total += num return total # 调用函数,传入不同数量的参数 print("两个数的和:", sum_all(3, 5)) # 8 print("三个数的和:", sum_all(1, 2, 3)) # 6 print("四个数的和:", sum_all(10, 20, 30, 40)) # 100 # 定义带关键字可变参数的函数:打印任意键值对(**kwargs接收关键字参数,打包成字典) def print_kwargs(** kwargs): for key, value in kwargs.items(): print(f"{key}:{value}") # 调用函数,传入不同的关键字参数 print_kwargs(name="张三", age=18, score=90) print_kwargs(city="北京", weather="晴朗") |
运行结果:
|
两个数的和: 8 三个数的和: 6 四个数的和: 100 name:张三 age:18 score:90 city:北京 weather:晴朗 |
详细分析:
可变参数可以和普通参数一起使用,但顺序有讲究:普通参数 → *args → **kwargs。例如:
|
def func(a, b, *args, **kwargs): print("普通参数a:", a) print("普通参数b:", b) print("可变位置参数:", args) print("可变关键字参数:", kwargs) func(1, 2, 3, 4, x=5, y=6) # 输出: # 普通参数a: 1 # 普通参数b: 2 # 可变位置参数: (3, 4) # 可变关键字参数: {'x': 5, 'y': 6} |
对比C语言:
C语言通过<stdarg.h>库处理可变参数,语法复杂:
|
#include <stdio.h> #include <stdarg.h> // 必须包含该头文件 // 计算n个数的和(n表示参数个数,后面跟n个int类型的数) int sum_all(int n, ...) { va_list args; // 定义参数列表变量 va_start(args, n); // 初始化参数列表,n是最后一个固定参数 int total = 0; for (int i = 0; i < n; i++) { total += va_arg(args, int); // 按int类型获取下一个参数 } va_end(args); // 清理参数列表 return total; } int main() { printf("两个数的和:%d\n", sum_all(2, 3, 5)); // 8(第一个参数2表示后面有2个参数) printf("三个数的和:%d\n", sum_all(3, 1, 2, 3)); // 6 return 0; } |
主要区别:
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14059/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料