Python3 - 可接受任意数量参数的函数

问题

构造一个可接受任意数量参数的函数。

解决方案

为了函数接受任意数量的位置参数,使用一个以一个星号(*)开头的参数。例如:

def avg(first, *args):
    return (first + sum(args)) / (1 + len(args))


print(avg(1, 2))
1.5

print(avg(1, 2, 3, 4))
2.5

在这个例子中,agr参数是由所有其他位置参数组成的元组,在代码中把它当成了一个序列来进行后续的计算。

为了接受任意数量的关键字参数,使用一个以2个星号(**)开头的参数。例如:

import html

def make_element(name, value, **kwargs):
    key_vals = [' %s = "%s"' % item for item in kwargs.items()]
    attrs = ''.join(key_vals)
    element = f"""<{name}{attrs}>{value}</{name}>"""
    return element

print(make_element('item', 'Albatross', size='large', quantity=6))
<item size = "large" quantity = "6">Albatross</item>

print(make_element('p', '<spam>'))
<p><spam></p>

在这里,kwargs是一个包含所有被传入进来的关键字参数的字典。

函数能同时接受任意数量的位置参数关键字参数,可以同时使用***。比如:

def anyargs(*args, **kwargs):
    print(args) # A tuple
    print(kwargs) # A dict

使用这个函数时,所有 位置参数 会被放到args元组中,所有 关键字参数 会被放到kwargs字典中。

讨论

位置参数 (*)只能出现在函数的最后一个位置参数后面,而 关键字参数 (**)只能出现在最后一个参数。 位置参数 (*)后面仍然可以定义其他参数。这种参数就是我们所说的强制关键字参数,比如:

def a(x, *args, y):
    pass

def b(x, *args, y, **kwargs):
    pass
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,213评论 17 410
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,120评论 0 10
  • 霞光扑闪着泪水的迷离 低落在一片青青草地 黝黑的土地 羚羊的叹息 雄鹰振奋着双翼 狠狠抓住夜的孤戚 骑士的哨声响起...
    磊磊excuseme阅读 1,339评论 0 5
  • 我住在湖边,这个湖叫做尹山湖,是的,很美的名字 床靠近窗边,每天睁开眼睛第一件事就能看到湖,我想这大概是世界上最幸...
    NewBabyBorn阅读 1,644评论 0 0
  • 前两天跟弟弟视频聊天,不知怎的就聊到了我的前任。 他说"姐,我就想不明白了,你怎么会喜欢那样的人?" 可笑的是我竟...
    彭朗月阅读 3,025评论 0 0