2.7.3 可变参数列表
最后,相对不太频繁常用的方式是调用含有可变参数的方法。这些参数常被包含在元祖中。在可变的参数中,零或更多正式参数都可能出现。
def write_multiple_items(file, separator,*args):
file.write(separator.join(args))
正常来说,这些可变参数常常放在正式参数列表的后面,因为它们会包揽所有传递给该方法的剩余输入参数。任何出现在*args参数后低的正式参数会被认为是关键字参数,意味着它们只能当关键字使用而不是位置参数。
>>> def concat(*args, sep="/"):
... return sep.join(args)
...
>>> concat("earth", "mars", "venus")
’earth/mars/venus’
>>> concat("earth", "mars", "venus", sep=".")
’earth.mars.venus’
2.7.4 分拆参数列表
当参数已经存在列表或者元祖中,但是需要分拆以供要求分离位置参数调用的方法,这是相反的情景出现了。例如:在内置方法range()中期望获得独自的开始和停止参数。如果单独分开它们无法使用,就需要写一个方法用*操作符来调用实现分拆列表或者元祖中的参数。
>>> list(range(3, 6)) # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> list(range(*args)) # call with arguments unpacked from a list
[3, 4, 5]
2.7.5 同样的使用形式,字典可以用** 操作符实现关键字参数。
>>> def parrot(voltage, state=’a stiff’, action=’voom’):
... print("-- This parrot wouldn’t", action, end=’ ’)
... print("if you put", voltage, "volts through it.", end=’ ’)
... print("E’s", state, "!")
...
>>> d = {"voltage": "four million", "state": "bleedin’ demised", "action": "VOOM"}
>>> parrot(**d)
2.7.5 形式
由于普遍需要,在函数程序语言中会发现一个共同的特性,像Python中添加Lisp。 像匿名关键字、小型匿名方法也被创建。下面这个方法返回两个参数的和。Lamdba a,b : a +b.哪儿需要方法时,哪儿就可以使用形式。它们是根据句法限制在一个简单的表达式。在语义上,它们仅是针对正式方法定义的语法补充。像内嵌方法定义中,形式也可通过包含范围中引用变量。
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43
2.7.6 文档字符串
在python中关于文档字符串的内容和格式有个规范。
第一行常常是一句对对象作用的剪短而又准确地总结。尽管简洁,但不能明确声明对象的名称和类型,因为通过其他方法(除了名字恰好是一个描述方法功能的动词)它们依然是可用的。
>>> def my_function():
... """Do nothing, but document it.
...
... No, really, it doesn’t do anything.
... """
... pass
...
>>> print(my_function.__doc__)
Do nothing, but document it.
No, really, it doesn’t do anything.