C++和Python实现可变参数

1. 使用 std::initializer_list
  • 适用场景:适用于传递一组相同类型的参数,在编译时参数数量就已经确定。
  • 示例代码
#include <iostream>
#include <initializer_list>

// 计算一组整数的和
int sum(std::initializer_list<int> numbers) {
    int total = 0;
    for (int num : numbers) {
        total += num;
    }
    return total;
}

int main() {
    // 调用函数并传递可变数量的整数
    int result = sum({1, 2, 3, 4, 5});
    std::cout << "Sum: " << result << std::endl;
    return 0;
}
  • 代码解释
    • std::initializer_list<int> 表示接受一个由 int 类型元素组成的列表。
    • 在函数内部,通过范围 for 循环遍历这个列表并累加元素的值。
2. 使用可变参数模板
  • 适用场景:可以处理不同类型的参数,并且参数数量可以在运行时确定。
  • 示例代码
#include <iostream>

// 递归终止函数
template<typename T>
T sum(T value) {
    return value;
}

// 可变参数模板函数
template<typename T, typename... Args>
T sum(T first, Args... args) {
    return first + sum(args...);
}

int main() {
    int result = sum(1, 2, 3, 4, 5);
    std::cout << "Sum: " << result << std::endl;
    return 0;
}

def sum_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

# 调用函数并传递可变数量的参数
result = sum_numbers(1, 2, 3, 4, 5)
print(f"Sum: {result}")

2. 使用 **kwargs 传递任意数量的关键字参数

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

# 调用函数并传递可变数量的关键字参数
print_info(name="Alice", age=25, city="New York")

3. 同时使用 *args**kwargs

def func(*args, **kwargs):
    print("Positional arguments:")
    for arg in args:
        print(arg)
    print("Keyword arguments:")
    for key, value in kwargs.items():
        print(f"{key}: {value}")

func(1, 2, 3, name="Bob", age=30)
  • 代码解释
    • 第一个 sum 函数是递归终止函数,当参数列表中只剩下一个元素时调用。
    • 第二个 sum 函数是可变参数模板函数,它接受一个参数 first 和一个可变参数包 args,然后递归调用 sum 函数处理剩余的参数。
    • Python 实现可变参数

  • 1. 使用 *args 传递任意数量的位置参数
  • 适用场景:用于传递任意数量的位置参数,这些参数会被打包成一个元组。
  • 示例代码
  • 代码解释
    • *args 表示接受任意数量的位置参数,在函数内部,args 是一个包含所有传递进来的位置参数的元组。
    • 通过 for 循环遍历 args 并累加元素的值。
  • 适用场景:用于传递任意数量的关键字参数,这些参数会被打包成一个字典。
  • 示例代码
  • 代码解释
    • **kwargs 表示接受任意数量的关键字参数,在函数内部,kwargs 是一个包含所有传递进来的关键字参数的字典。
    • 通过 items() 方法遍历字典并打印键值对。
  • 适用场景:可以同时接受任意数量的位置参数和关键字参数。
  • 示例代码
  • 代码解释
    • 函数先处理位置参数 *args,再处理关键字参数 **kwargs
    • 分别遍历位置参数元组和关键字参数字典并打印相应信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值