C/C++、Java、Go、Python总结对比26-可变参数

可变参数适用于我们在传入函数参数的时候,不确定传入的参数数量情况下。

每个语言都实现了这个功能。下面来看下各个语言的写法:

c/c++的写法

#include <stdio.h>
#include <stdarg.h>

double average(int num,...)
{

    va_list valist;
    double sum = 0.0;
    int i;

    /* 为 num 个参数初始化 valist */
    va_start(valist, num);

    /* 访问所有赋给 valist 的参数 */
    for (i = 0; i < num; i++)
    {
        sum += va_arg(valist, int);
    }
    /* 清理为 valist 保留的内存 */
    va_end(valist);

    return sum/num;
}

int main()
{
    printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
    printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}

java的写法

public class Args {
    public static void main(String[] args) {
        getAverage(1,2,3);
    }

    public static void getAverage(int... nums) {
        int sum = 0;
        for (int num: nums) {  //同c语言不同,这里nums直接当做数组用
            sum += num;
        }
        double average = sum/nums.length;
        System.out.printf("average is "+average);
    }
}

go的写法

func getAverage(nums... int)  {
	sum := 0
	for _, num := range nums {  //这里nums也当做数组使用
		sum += num
	}
	fmt.Printf("average is %d", sum/len(nums))
}

func main()  {
	getAverage(1,2,3)
}

python的写法

def total(a=5, *numbers, **phonebook):
    #*args 称作为数组参数,**kwargs 称作为字典参数,也就是说带*的参数可以视作数组,带**的参数视作字典
    print('a', a)
    # 遍历元组中的所有项目
    for single_item in numbers:
        print('single_item', single_item)
    # 遍历字典中的所有项目
    for first_part, second_part in phonebook.items():
        print(first_part, second_part)


if __name__ == "__main__":
    print(total(10, 1, 2, 3, Jack=1123, John=2231, Inge=1560))

总结对比:

  1. java、go、python传入可变参数后,函数的内部可以直接拿可变参数作为数组用,而c/c++的使用则稍微麻烦些,需要先进行转化。
  2. python比其他语言多了可以传入字典的功能;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值