学习笔记,有错必纠 收集关键词参数 我们知道一个函数可以接收不定个数的参数,以*开头的参数名会收集所有的参数到一个元组上,例如,printall接收任意个数的参数并打印
学习笔记,有错必纠
收集关键词参数
我们知道一个函数可以接收不定个数的参数,以*开头的参数名会收集所有的参数到一个元组上,例如,printall接收任意个数的参数并打印它们:
def printall(*args):print(args)
printall("aer", 10, True)
输出:
('aer', 10, True)
*号操作符并不会搜集关键词实参:
In [24]: printall(1, 2, b = 'as')TypeError: printall() got an unexpected keyword argument 'b'
要收集关键词实参,可以使用**操作符:
def printall2(*args, **kwargs):print(args, kwargs)
printall2(1, 2, b = 'as')
输出:
(1, 2) {'b': 'as'}我们看到kwargs收集到的结果是一个将关键词映射到值的字典。
如果我们有一个关键词映射到值的字典,我们可以使用分散操作符**来调用函数:
class Point:def __init__(self, x = 0, y = 0, z = 0):
self.x = x
self.y = y
self.z = z
def __str__(self):
return "({}, {}, {})".format(self.x, self.y, self.z)
d = dict(x = 1,y = 2,z = 3)
p = Point(**d)
print(p)
输出:
(1, 2, 3)