在看python学习手册的时候,看到了一个关于传递参数的例子,比较杂,初看有点不解,实际敲了一遍,在pycharm上debug一下才知道实际情况。
代码如下:
def tracer(func, *pargs, **kargs):
print('calling:', func.__name__)
return func(*pargs, **kargs)
def func(a, b, c, d):
return a+b+c+d
print(tracer(func, 1, 2, c=3, d=4))
运行顺序如下:
1、运行print(tracer(func, 1, 2, c=3, d=4)),
2、来到第一行,将1和2传递给pargs,将c=3和d=4传递给kargs,得到
pargs: (1, 2)
kargs: {'c': 3, 'd': 4}
3、然后输出
calling: func
4、到第3行,将pargs和kargs作为参数,运行func函数,func函数得到参数:
a: 1, b: 2, c: 3, d: 4
5、func函数返回a+b+c+d,即10,再将这10返回给调用tracer()函数的地方,也就是一开始的print,从而打印出10
完整结果如下:
calling: func
10
代码运行顺序(数字代表行号):
8->1->2->3->5->6->3->8