zoukankan      html  css  js  c++  java
  • Noah的学习笔记之Python篇:函数“可变长参数”

    Noah的学习笔记之Python篇:

      1.装饰器

      2.函数“可变长参数”

      3.命令行解析

     注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/)

      这次来聊聊Python中函数的“可变长参数”,在实际中经常会用到哦~

     一、什么是“可变长参数”

      “可变长参数”就是向一个函数传入不定个数的参数。比如我写一个函数:传入一个学生参加各科目考试的成绩,求平均分,如两个学生分别传入(92, 91, 88)和(88, 95),因为每个学生参加的考试个数不同,因此传入的参数个数也就不同了,遇到这种情况,我们在定义函数的时候,可以使用“可变长参数”。

    二、在定义函数时使用“可变长参数”

    # 完整打印函数的可变参数
    def func(*args, **kwargs):
        print(args)
        print(kwargs) 
    
    
    func(1, 'hello', a=2, c='world')
    
    
    >>>
    (1, 'hello')
    {'a': 2, 'c': 'world'}

      

      以上代码定义了一个最简单的分别接收两种“可变长参数”的函数,一种是“非关键字参数”,数据结构为:元组注:元组不能被修改);另一种是“关键字函数”,数据结构为:字典

      此时,我们就可以依次传入数个非关键字参数和数个关键字参数,不能混搭传入~我们可以用如下这段代码依次打印出接收到的参数:

    # 依次打印函数的可变参数
    def func(*args, **kwargs):
        for arg in args:
            print('arg:', arg)
        for value in kwargs:
            print('%s:' % value, kwargs[value])
    
    
    func(1, 'hello', a=2, c='world')
    
    
    >>>
    arg: 1
    arg: hello
    a: 2
    c: world

    三、在调用函数时使用“可变长参数”

      我们也可以在调用函数时传入一个“可变长参数”,如下所示:

    def func(name1, name2, name3):
        print('第一个人:%s' % name1)
        print('第二个人:%s' % name2)
        print('第三个人:%s' % name3)
    
    
    name_tuple1 = ('Mary', 'John', 'Jane')
    name_tuple2 = ('Rose', 'Mike')
    func(*name_tuple1)
    func('Luna', *name_tuple2)
    
    
    >>>
    第一个人:Mary
    第二个人:John
    第三个人:Jane
    第一个人:Luna
    第二个人:Rose
    第三个人:Mike

      在这段代码中,我定义func函数的参数个数为3,所以请确保在调用该函数时传入的参数数量也是3哟~

    四、实际应用

    #:假设传入一个班级的名字、班级所获荣誉,以及各位任课老师的名字和年龄
    def welcome(name, *args, **kwargs):
        print('%s共获得了%d项荣誉,分别是:' % (name, len(args)))
        for i in range(len(args)):
            print('%d. %s' % (i+1, args[i]))
    
        age_sum = 0  # 年龄和
        print('该班共有%d名老师,他们的名字和年龄如下:' % len(kwargs))
        for value in kwargs:
            age_sum += kwargs[value]
            print('%s: %d岁' % (value, kwargs[value]))
        print('老师们的平均年龄是%.1f岁
    ' % (age_sum/len(kwargs)))
    
    
    welcome('计算机1班', '校优秀班级', '最佳凝聚力', Mary=27, Peter=35, John=32)
    welcome('软件2班', '上海市优秀班级', '校合唱比赛冠军', '最佳凝聚力', Peter=34, Rose=28, Hans=33)
    
    
    >>>
    计算机1班共获得了2项荣誉,分别是:
    1. 校优秀班级
    2. 最佳凝聚力
    该班共有3名老师,他们的名字和年龄如下:
    Peter: 35岁
    John: 32岁
    Mary: 27岁
    老师们的平均年龄是31.3岁
    
    软件2班共获得了3项荣誉,分别是:
    1. 上海市优秀班级
    2. 校合唱比赛冠军
    3. 最佳凝聚力
    该班共有3名老师,他们的名字和年龄如下:
    Peter: 34岁
    Rose: 28岁
    Hans: 33岁
    老师们的平均年龄是31.7岁

      

      这个例子也是自己编的,能帮助大家理解主题内容就好~

  • 相关阅读:
    Dev中出现Error 0: 操作成功完成。
    找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有没有鞍点。
    oracle 日常删除多余数据
    java程序练习:输入数字转换成中文输出(金额相关)
    linux压缩和解压文件命令
    一篇文章搞定Git——Git代码管理及使用规范
    读书心得(1)-20191108
    回表查询的说明
    Java 8新特性解读
    java-try catch中return在finally之前 还是之后执行
  • 原文地址:https://www.cnblogs.com/noahzn/p/4301209.html
Copyright © 2011-2022 走看看