我正在学习 Python 中的高阶函数。 我想了解参数如何从内部函数传递到外部函数。
假设我们有一个函数可以计算另一个函数运行了多少次。
def counter(fn, counters):
print("Creating Outer Function - counter")
cnt = 0
def inner(*args, **kwargs):
print("Creating Inner Function")
nonlocal cnt
cnt +=1
counters[fn.__name__] = cnt
return fn(*args, **kwargs)
return inner
c = dict() # This is a dictionary that contains functions and count how many times they ran.
def add_num(a, b):
return a+b
counted_add = counter(add_num, c)
counted_add(10, 20) # THIS PART I DON'T UNDERSTAND!!!
上面代码的最后一行我不明白……外部函数是如何理解10和20是内部函数的参数的?
答案 0 :(得分:1)
如果你看清楚代码,外层函数counter
返回的是内层函数inner
见return inner
末尾的counter(fn, counters)
def counter(fn, counters):
print("Creating Outer Function - counter")
cnt = 0
def inner(*args, **kwargs):
print("Creating Inner Function")
nonlocal cnt
cnt +=1
counters[fn.__name__] = cnt
return fn(*args, **kwargs)
return inner ## HERE
返回的内部函数被分配给 counted_add
在
counted_add = counter(add_num, c
)
现在 counted_add
只不过是 inner
函数内的 counter
函数
调用counted_add(10, 20)
相当于调用inner(10, 20)
我强烈建议您访问 python visualizer 以更好地了解流程
干杯!
答案 1 :(得分:1)
Great explanation of high order functions
上面的链接完美地解释了一切。我推荐它,因为我过去曾使用它来了解它是如何工作的。
counted_add = counter(add_num, c)
counted_add(10, 20)
我可以解释的最基本的方法是:您“命名”函数计数器并将名称设置为 counted_add。这就是为什么您可以使用 counted_add(10, 20) 调用该函数的原因。如果这有任何意义 :D 我不擅长解释。