[每日一题]6、Python中的可变参数

点击上方Python3X”,选择“置顶或者星标

第一时间收到精彩推送!


Python Every Day, 第 6 天



在定义函数的时候,有时候会遇到参数比较多或者不确定参数名的情况。这个时候就可以使用可变参数。


可变参数的形式有

*args  : 元组类型参数

**kwargs :字典类型参数

 args和kwargs的参数是自定义的。主要是前面的操作符不能少!


比如看一个简单的常规例子

 
 
def fun(name, age):    print(name)    print(age)if __name__ == '__main__':    fun('tom', 19)    # fun('lily')  # TypeError: fun() missing 1 required positional argument: 'age'
    print(name)
    print(age)

if __name__ == '__main__':
    fun('tom'19)
    # fun('lily')  # TypeError: fun() missing 1 required positional argument: 'age'


定义了一个fun函数,参数有name和age。当调用fun函数时,如果只传一个参数则会报TypeError的错误。


假设我们不光有name、age 还需要传参性别、爱好、职业、电话等参数。一个个写就显得比较繁琐。不够Pythonic。


*args

这样我们就可以通过列表类型的参数进行传递。

 
 
def fun_arr(name, *args):    print(name)    print(args)if __name__ == '__main__':    fun('tom', 19)    # fun('lily')  # TypeError: fun() missing 1 required positional argument: 'age'    fun_arr('tom')  # 输出 tom 、()    # tom    # (20, 'man', '篮球', 'pythoner', '17766666666')    fun_arr('tom', 20, 'man', '篮球', 'pythoner', '17766666666')
    print(name)
    print(args)

if __name__ == '__main__':
    fun('tom'19)
    # fun('lily')  # TypeError: fun() missing 1 required positional argument: 'age'

    fun_arr('tom')  # 输出 tom 、()
    # tom
    # (20, 'man', '篮球', 'pythoner', '17766666666')
    fun_arr('tom'20'man''篮球''pythoner''17766666666')

如上,参数 name 对应的是 tom。而args 则对应的是('tom', 20, 'man', '篮球', 'pythoner', '17766666666')。


**kwargs

字典类型参数,实例如下

 
 
def fun_dict(**kwargs):    # 循环打印字典的键和值    # name tom    # age 18    # mobile 17766666666    for k, v in kwargs.items():        print(k, v)    # 也可通过get的方式取参数的值    # my name is tom i'am 18 years old, my phone number is 17766666666    print("my name is %s i'am %s years old, my phone number is %s"          % (kwargs.get('name'), kwargs.get('age'), kwargs.get('mobile')))if __name__ == '__main__':    fun_dict(name='tom', age=18, mobile='17766666666')
    # 循环打印字典的键和值
    # name tom
    # age 18
    # mobile 17766666666
    for k, v in kwargs.items():
        print(k, v)
    # 也可通过get的方式取参数的值
    # my name is tom i'am 18 years old, my phone number is 17766666666
    print("my name is %s i'am %s years old, my phone number is %s"
          % (kwargs.get('name'), kwargs.get('age'), kwargs.get('mobile')))

if __name__ == '__main__':
    fun_dict(name='tom', age=18, mobile='17766666666')


补充:


可变参数允许多个任意参数,也允许不传参数。

两个可变参数同时存在是,一定要将 *参数 放在 **参数 之前!!!否则编译错误。

通常情况下,都是将可变参数写在最后面


如果写在前面则会将后面的参数也会收集到列表中。如果将可变参数写在前面,则需要指定后面的参数名

如下

 
 
def fun_arr(*args, name):    print(name)    print(args)if __name__ == '__main__':    # 如下写法 则会报错    # TypeError: fun_arr() missing 1 required keyword-only argument: 'name'    fun_arr(20, 'man', '篮球', 'pythoner', '17766666666', 'tom')    # 正确的写法    fun_arr(20, 'man', '篮球', 'pythoner', '17766666666', name='tome')
    print(name)
    print(args)

if __name__ == '__main__':
    # 如下写法 则会报错
    # TypeError: fun_arr() missing 1 required keyword-only argument: 'name'
    fun_arr(20'man''篮球''pythoner''17766666666''tom')

    # 正确的写法
    fun_arr(20'man''篮球''pythoner''17766666666', name='tome')



往期Python Every Day


[每日一题]5、Python中的lambda表达式


[每日一题]4、Python中的迭代器

[每日一题]3、Python实现删除list中重复元素的几种方式

[每日一题]2、Python中的类的定义和装饰器@classmethod与@staticmethod

[每日一题] 1、Python中的可变对象与不可变对象


640?



感谢您的阅读


640?wx_fmt=gif



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值