2012年8月18日星期六

Python中的*和**

这里说的***不是乘法和次幂的运算符,而是函数定义中的形参(parameters)和函数调用中的实参(arguments)。

文档中把它们的用法很简洁得说清楚了。怎么记住***在函数定义和函数调用时的区别呢?简单地概况,就是“定义的压缩,调用的解开”。
  • 若出现在函数定义中,则实际调用时把接收的一串arguments或keyword arguments,压缩成元组或者字典
  • 如出现在函数调用中,则把接收的iteratable或者mapping,解开为一串arguments或者keyword arguments
在下面这个没有做任何装饰的装饰器里面:
def decorator(target):
    def caller(*args, **kwargs):
        return target(*args, **kwargs)
    return caller
可以看到放在定义和调用时的区别。

没有评论:

发表评论