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}"""
    return element

print(make_element('item', 'Albatross', size='large', quantity=6))
Albatross

print(make_element('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

你可能感兴趣的:(Python3 - 可接受任意数量参数的函数)