美文网首页
Python3 - 可接受任意数量参数的函数

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

作者: 惑也 | 来源:发表于2018-12-23 19:55 被阅读30次

问题

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

解决方案

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

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

相关文章

  • 函数

    函数 可接受任意数量参数的函数 可以使用 * 使函数接收任意数量的位置参数, * 只能是函数的最后一个位置参数 ...

  • 函数的常用参数定义及返回

    问题1:我们想编写一个可接受任意数量参数的函数 解决方案: 1、要编写一个可接受任意数量的位置参数的函数,可以使用...

  • 第七章:函数

    用def语句定义的函数是所有程序的基石; 1.编写可接受任意数量参数的函数 解决方案:要编写一个可接受任意数量的位...

  • python 编写可接受任意数量参数的函数

    7.1 编写可接受任意数量参数的函数 使用*开头的参数,就可以接受任意数量的参数 上述方法中,rest是一个元组结...

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

    问题 构造一个可接受任意数量参数的函数。 解决方案 为了函数接受任意数量的位置参数,使用一个以一个星号(*)开头的...

  • 函数

    1、可接受任意数量参数的函数 **参数只能出现在最后一个参数。有一点要注意的是,在 * 参数后面仍然可以定义其他参...

  • python防遗忘复习练手之:函数参数的顺序

    python函数参数的顺序依次为:位置参数带默认值的位置参数任意数量的位置参数任意数量的关键字参数 代码: 运行结果:

  • 深入函数参数

    函数参数 Python允许具有可变长参数的函数。使用*args作为函数参数,可以将任意数量的参数传递给该参数。然后...

  • 深入理解ES6之函数

    一:关于函数的参数: 可以接受任意数量的参数而无视函数声明的参数数量是js函数的独特之处。 1:参数默认值 ES6...

  • 深入理解ES6之函数

    一:关于函数的参数: 可以接受任意数量的参数而无视函数声明的参数数量是js函数的独特之处。 1:参数默认值 ES6...

网友评论

      本文标题:Python3 - 可接受任意数量参数的函数

      本文链接:https://www.haomeiwen.com/subject/lebnkqtx.html