编写可接受任意数量参数的函数
要编写一个可接受任意数量的位置参数的函数,可以使用以*开头的参数。示例如下:
def avg(first, *rest):
return (first + sum(rest)) / (1+len(rest))
print(avg(1, 2)) # 1.5
print(avg(1,2,3,4)) # 2.5
如果要接受任意数量的关键字参数,可以使用以**开头的参数。示例如下:
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
def d(**kargs):
print(kargs)
d(a=1,b=2)
# {'a': 1, 'b': 2}
如果想要函数能同时接受任意数量的位置参数和关键字参数,只要联合使用*和**即可。示例如下:
def anyargs(*args, **kwargs):
print(args) # A tuple
print(kwargs) # A dict
在这个函数中,所有的位置参数都会放置在元组args中,而所有的关键字参数都会放置在字典kwargs中。
编写只接受关键字参数的函数
我们希望函数只通过关键字的形式接受特定的参数。
如果将关键字参数放置在以打头的参数或者是一个单独的之后,这个特性就很容易实现。示例如下:
def recv(maxsize, *, block):
'Receives a message'
pass
recv(1024, True) # TypeError
recv(1024, block=True) # Ok
这项技术也可以用来为那些可接受任意数量的位置参数的函数来指定关键字参数。示例如下:
def mininum(*values, clip=None):
m = min(values)
if clip is not None:
m = clip if clip > m else m
return m
mininum(1, 5, 2, -5, 10) # Returns -5
mininum(1, 5, 2, -5, 10, clip=0) # Returns 0
如果你想检查多种匹配可能,只需要将所有的匹配项放入到一个元组中去,然后传
给startswith() 或者endswith() 方法:
>>> import os
>>> filenames = os.listdir('.')
>>> filenames
[ 'Makefile', 'foo.c', 'bar.py', 'spam.c', 'spam.h' ]
>>> [name for name in filenames if name.endswith(('.c', '.h')) ]
['foo.c', 'spam.c', 'spam.h'
>>> any(name.endswith('.py') for name in filenames)
True
>>>
字符串匹配和搜索
字符串的搜索和替换
函数