首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3函数可变输入参量

python3函数可变输入参量

作者头像
DechinPhy
发布2021-05-21 15:46:40
1.2K0
发布2021-05-21 15:46:40
举报
文章被收录于专栏:Dechin的专栏Dechin的专栏

技术背景

通常我们在python中定义一个函数的时候,需要给出明确的函数输入参量,比如对于一个数学函数

z=f(x,y)

就表示,

z

是关于

x

y

的一个函数。但是如果对于未知参量的函数,比如函数形式可以是

z=f(x,y)

,但也可以是

z=f(x,y,m,n,i,j,k)

,在不确定入参的时候,就可以采用python中的*args**kwargs参数。

*args参数的使用方法

首先用一个例子来说明一下*args的基本用法,这个参量可以替代函数括号中的固定变量,从数据结构上说是一个可变长度的tuple:

# test_args.py

def fargs(*args):
    s = 0
    for variable in args:
        s += float(variable)
    return s

if __name__ == '__main__':
    import sys
    args_string = ''
    for number in sys.argv[1:]: # 从命令行获取任意长度的参数
        args_string += number
        args_string += ','
    s = eval('fargs({})'.format(args_string)) # 直接用字符串执行函数
    print ('The sum of {} is: {}'.format(args_string, s))

在这个案例中,我们不仅介绍了*args的使用方法,也利用了命令行参数获取eval函数这两个python中常见的使用技巧。其中关于获取命令行参数的使用技巧,可以参考这一篇博客。上述代码的执行效果如下所示:

[dechin@dechin-manjaro args]$ python3 test_args.py 1 2 3 3.14
The sum of 1,2,3,3.14, is: 9.14
[dechin@dechin-manjaro args]$ python3 test_args.py 1 2 3 3.14 0.86
The sum of 1,2,3,3.14,0.86, is: 10.0

这里给了两个不同长度的输入,通过函数fargs完成了求和的工作,并且输入的长度是可变的。

**kwargs的用法

**kwargs的用法是类似于上面介绍的*args的,区别在于**kwargs本质上是传入了一个“字典”,或者称之为一个键值对。需要注意的是,这里每一个键值对的数据格式都是tuple类型的,而不是python中的字典类型,所以上面说到“字典”时加了引号。参考示例如下:

# test_kwargs.py

def fkwargs(**kwargs):
    s = 0
    print ('Key values input: ',kwargs)
    for key, variable in kwargs.items():
        s += float(variable)
    return s

if __name__ == '__main__':
    import sys
    args_string = ''
    for number in sys.argv[1:]:
        args_string += number
        args_string += ','
    s = eval('fkwargs({})'.format(args_string))
    print ('The sum of {} is: {}'.format(args_string, s))

这里的场景我们设置为一个买菜购物计算总价格的函数,输入的参数是每一个购买的物品及其价格,最后的输出是购买总价格,测试结果如下所示:

[dechin@dechin-manjaro args]$ python3 test_kwargs.py egg=20 beaf=60 milk=10
Key values input:  {'egg': 20, 'beaf': 60, 'milk': 10}
The sum of egg=20,beaf=60,milk=10, is: 90.0
[dechin@dechin-manjaro args]$ python3 test_kwargs.py egg=20 water=1
Key values input:  {'egg': 20, 'water': 1}
The sum of egg=20,water=1, is: 21.0

总结概要

为了使得输入参数的可扩展性更好,python中自带了args和kwargs两种方法,可以用于表示一个tuple类型的可变长度入参。其中args是一系列的一元变量的输入,kwargs是一系列键值对的输入,可以认为是一个二元变量的输入。虽然这两种方案也都可以用自行实现的tuple来替代,但是直接使用这两种定义会节省很多自定义可变入参的繁琐。

版权声明

本文首发链接为:https://cloud.tencent.com/developer/article/1827463

作者ID:DechinPhy

更多原著文章请参考:https://www.cnblogs.com/dechinphy/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 技术背景
  • *args参数的使用方法
  • **kwargs的用法
  • 总结概要
  • 版权声明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档