• Python的位置参数、默认参数、关键字参数、可变参数之间的区别


    Python的位置参数、默认参数、关键字参数、可变参数之间的区别

    转自https://www.cnblogs.com/bingabcd/p/6671368.html

    1. 位置参数

    • 调用函数时需根据定义的参数位置来传参
    • def print_hello(name, sex):
          print('hello %s %s, welcome to python world!' % (name, '先生'))
      print_hello('Nick', '先生')
      # 输出:hello Nick 先生, welcome to python world!

       位置参数必须严格按照顺序传参

    2. 关键字参数

    • 在函数调用时,通过"键值对"形式作为函数的形参,不用按照位置给函数传参
    • 注意:
      • 关键字参数必须在位置参数右边→
      • 对同一个形参不能重复传值
    • # 按照顺序为函数形参传值
      def msg(name, age, sex):
          print("Hello, your name is %s, age is %s, sex is %s" % (name, age, sex))
      msg('Nick', 23, 'male')
      # 输出:Hello, your name is Nick, age is 23, sex is male
      
      # 有位置参数和关键字参数时,关键字参数在位置参数后面
      msg('Tony', 12, sex='male')
      
      # 参数中有多个关键字参数时,关键字参数不分先后顺序
      msg(sex='female', name='Amy', age=56)

    3. 默认参数

    • 在定义函数时,可以为形参提供默认值。对于有默认值的形参,调用函数时如果为该参数传值,则使用传入值,否则使用默认值
    • 注意:
      • 在调用函数时可以不给有默认值的形参传值
      • 无论函数的定义还是调用,默认参数的定义应该在位置形参右边
      • 只在定义时赋值一次
      • 默认参数通常应该定义成不可变类型
      • # 正确的默认参数定义方式-->位置参数在前,默认参数灾后
        def print_hello(name, city='Shenzhen'):
            print('%s live in %s' % (name, city))
        print_hello('Henry')
        # 输出:Henry live in Shenzhen
        
        # 错误的定义方式
        # def print_hello2(city='Shenzhen', name):
        #     pass
        # 如果使用的是PyCharm IDE,输入完函数头部时就会提示出错
        
        # 调用时传入city值,则默认值不会被使用
        print_hello('Kevin', 'Beijing')
        # 输出:Kevin live in Beijing 

     4.  可变参数

    • 定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也行)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递。
      • 包裹位置传递
      • def func(*args):
            print(type(args))  # 传入的参数会被视作一个元组
            print(args)
            for x in args:
                print(x)
        func(1)
        func(1, 2, 3)
        # 输出:
        # <class 'tuple'>
        # (1,)
        # 1
        # <class 'tuple'>
        # (1, 2, 3)
        # 1
        # 2
        # 3
      • 包裹关键字传递
      • def func(**kwargs):
            print(type(kwargs))
            print(kwargs)
            for k, v in kwargs.items():
                print(k, ": ", v)
        
        func(a=1)
        func(a=1, b=2, c=3)
        # 输出:
        # <class 'dict'>
        # {'a': 1}
        # a :  1
        # <class 'dict'>
        # {'a': 1, 'b': 2, 'c': 3}
        # a :  1
        # b :  2
        # c :  3
      • 位置参数,默认参数,可变参数的混合使用,使用顺序是:位置参数 --> 默认参数 --> 包裹位置参数 --> 包裹关键字(定义和调用都要遵循)

      • def func(name, age, sex=1, *args, **kwargs):
            print('位置参数:')
            print(args)
        
            print('默认参数')
            print(sex)
            print('*args参数(即可变参数--被当做元组处理)')
        
            for x in args:
                print(x)
        
            print('**kwargs参数(被当做字典处理)')
        
            for k, v in kwargs.items():
                print(k, ": ", v)
        
        func('Cate', 14, 0, 'friendly', 'talented', 'easy-going', company='Apache', salary=30000)
        # 输出:
        # 位置参数:
        # ('friendly', 'talented', 'easy-going')
        # 默认参数
        # 0
        # *args参数(即可变参数--被当做元组处理)
        # friendly
        # talented
        # easy-going
        # **kwargs参数(被当做字典处理)
        # company :  Apache
        # salary :  30000

          

  • 相关阅读:
    【转】前端防止 JS 调试技巧
    反爬虫 js怎样判断是真实点击事件还是模拟点击事件?
    js 前端 滑动验证
    【转】pyspider运行卡死在result_worker starting 的解决办法
    【转】pyspider all命令报错如下:ImportError: cannot import name 'DispatcherMiddleware' from 'werkzeug.wsgi'
    【转】pyspider中async关键字问题
    【转】Windows python3.7 下安装运行pyspider
    如何修改11g RAC集群名称
    Exadata健康检查工具EXAchk
    XD刷机中执行reclaimdisks.sh的作用
  • 原文地址:https://www.cnblogs.com/swordsman180309/p/11802011.html
Copyright © 2020-2023  润新知