============================
7.1 可接受任意数量参数的函数
============================
----------
问题
----------
你想构造一个可接受任意数量参数的函数。
----------
解决方案
----------
为了能让一个函数接受任意数量的位置参数,可以使用一个*参数。例如:
.. code-block:: python
def avg(first, *rest):
return (first + sum(rest)) / (1 + len(rest))
# Sample use
avg(1, 2) # 1.5
avg(1, 2, 3, 4) # 2.5
在这个例子中,rest是由所有其他位置参数组成的元组。然后我们在代码中把它当成了一个序列来进行后续的计算。
为了接受任意数量的关键字参数,使用一个以**开头的参数。比如:
.. code-block:: python
import html
def make_element(name, value, **attrs):
keyvals = [' %s="%s"' % item for item in attrs.items()]
attr_str = ''.join(keyvals)
element = '<{name}{attrs}>{value}{name}>'.format(
name=name,
attrs=attr_str,
value=html.escape(value))
return element
# Example
# Creates '
<spam>
' make_element('p', '