我正在学习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是内部功能的args?
发布于 2021-07-05 11:16:14
如果您清楚地观察到代码,外部函数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只是counter函数中的inner函数。
调用counted_add(10, 20)等同于调用inner(10, 20)
我强烈建议您访问python可视化器以更好地了解流程
干杯!
发布于 2021-07-05 11:26:41
上面的链接完美地解释了一切。我推荐它,因为我曾经用它来学习它是如何工作的。
counted_add = counter(add_num, c)
counted_add(10, 20)我可以解释的最基本的方法是:您‘命名’函数计数器,并将名称设置为counted_add。这就是为什么可以使用counted_add(10,20)调用该函数的原因。如果这说得通的话:我不擅长解释。
https://stackoverflow.com/questions/68254615
复制相似问题