python 函数参数

函数的参数

  • 位置参数:调用函数时根据函数定义的参数位置来传递参数。

    • 形参和实参的个数和书写位置必修一致

      def user_info(name, age, gender):
          print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
      
      user_info('TOM', 20, '男')
      
  • 缺省参数

    • 缺省参数就是默认参数

    • 调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

      def student_name_and_age(name, age='不愿透露'):
          "设置默认参数"
          print('姓名:%s 年龄 %s' %(name, age))
      
  • 关键字参数

    • 特点:形参和实参的书写顺序可以不一致,关键字参数必须书写在位置参数的后面

    • 函数调用,通过“键=值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

      def user_info(name, age, gender):
          print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')\
      user_info('Rose', age=20, gender='女')
      user_info('小明', gender='男', age=16)
      
  • 可变参数

    • 可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
    • 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。
    • 包裹位置传递
    def user_info(*args):
        print(args)
    #('TOM',)
    user_info('TOM')
    #('TOM', 18)
    user_info('TOM', 18)
    

    注意:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。

    • 包裹关键字传递
    def user_info(**kwargs):
        print(kwargs)
    
    # {'name': 'TOM', 'age': 18, 'id': 110}
    user_info(name='TOM', age=18, id=110)
    

    传进的所有参数都会被kwargs变量收集,它会根据传进参数的位置合并为一个字典(dict),kwargs是字典类型,这就是包裹关键字传递。

    综上:无论是包裹位置传递还是包裹关键字传递,都是一个组包的过程。

  • 命名关键字参数

    • 作用:限制关键字参数的名字
      def print_person_info(name, age, *, height, weight):
          print('我的名字叫:', name, '年龄:', age,'身高', height, '体重', weight)
    
    print_person_info('张三', 18, height=180, weight=75)
    

    只能传入限制关键字名字的dict

  • 参数的组合

    • 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
    def student_info(name, age=18, *books, **kw):
        print('我的名字叫:', name, '年龄:', age,'其它信息:',kw)
        if 'city' in kw:
            print('来自:', kw['city'])
        for book in books:
            print('我有',book,'书')
    
    student_info('张三', 18, '语文','数学','计算机', city='北京', height=180, weight=75)
    
    def student_info(name, age=18, *books, city, **kw):
        # 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
        print('我的名字叫:', name, '年龄:', age,'其它信息:',kw)
        print('来自:', city)
        for book in books:
            print('我有',book,'书')
    
    student_info('张三', 18, '语文','数学','计算机', city='北京', height=180, weight=75)
    
posted @ 2021-12-09 13:52  莳苡  阅读(57)  评论(0)    收藏  举报