Bootstrap

七种不同编程语言的可变参数列表

在编程中,可变参数列表(也称为变长参数列表)是指函数可以接受不确定数量的参数。不同的编程语言支持可变参数列表的方式不同,下面我将为您介绍几种常见编程语言如何处理可变参数列表。

b50236748f3c4636b8e7c188171b680d.jpeg

C 语言

在 C 语言中,可以使用 stdarg.h 头文件来定义和处理可变参数列表。

1#include <stdarg.h>
2#include <stdio.h>
3
4void print(int count, ...) {
5    va_list args;
6    va_start(args, count);  // 初始化可变参数列表
7    for (int i = 0; i < count; i++) {
8        int arg = va_arg(args, int);  // 获取下一个参数
9        printf("%d ", arg);
10    }
11    va_end(args);  // 清理可变参数列表
12    printf("\n");
13}
14
15int main() {
16    print(3, 1, 2, 3);
17    return 0;
18}

C++

C++ 支持 C 风格的可变参数列表,并且还提供了 std::initializer_list 作为另一种方式。

1. C 风格变长参数列表

1#include <cstdarg>
2#include <iostream>
3
4void print(int count, ...) {
5    va_list args;
6    va_start(args, count);
7    for (int i = 0; i < count; i++) {
8        int arg = va_arg(args, int);
9        std::cout << arg << " ";
10    }
11    va_end(args);
12    std::cout << "\n";
13}
14
15int main() {
16    print(3, 1, 2, 3);
17    return 0;
18}

2. 使用 std::initializer_list

1#include <iostream>
2#include <initializer_list>
3
4void print(std::initializer_list<int> list) {
5    for (auto &value : list) {
6        std::cout << value << " ";
7    }
8    std::cout << "\n";
9}
10
11int main() {
12    print({1, 2, 3});
13    return 0;
14}

Python

Python 中的可变参数列表可以通过 *args 和 **kwargs 实现。

1def print_args(*args):
2    for arg in args:
3        print(arg, end=" ")
4    print()
5
6print_args(1, 2, 3)
7
8def print_kwargs(**kwargs):
9    for key, value in kwargs.items():
10        print(f"{key}={value}", end=" ")
11    print()
12
13print_kwargs(a=1, b=2, c=3)

Java

Java 也可以使用可变参数列表。

1public class Main {
2    public static void main(String[] args) {
3        print(1, 2, 3);
4    }
5
6    public static void print(int... numbers) {
7        for (int num : numbers) {
8            System.out.print(num + " ");
9        }
10        System.out.println();
11    }
12}

JavaScript (ECMAScript 6+)

JavaScript 使用剩余参数(rest parameters)来处理可变参数列表。

1function printArgs(...args) {
2    args.forEach(arg => console.log(arg));
3}
4
5printArgs(1, 2, 3);

Ruby

Ruby 使用 *args**kwargs

1def print_args(*args)
2  args.each { |arg| puts arg }
3end
4
5print_args(1, 2, 3)

Go

Go 语言也支持可变参数列表。

1package main
2
3import "fmt"
4
5func print(args ...int) {
6    for _, arg := range args {
7        fmt.Print(arg, " ")
8    }
9    fmt.Println()
10}
11
12func main() {
13    print(1, 2, 3)
14}

以上就是一些常见的编程语言处理可变参数列表的方法。

 

;