首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的高阶函数

Python中的高阶函数
EN

Stack Overflow用户
提问于 2021-07-05 10:32:36
回答 2查看 70关注 0票数 1

我正在学习python中的高阶函数。我想了解参数是如何从内部函数传递到外部函数的。

说,我们有一个函数,它计算另一个函数运行了多少次。

代码语言:javascript
复制
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?

EN

回答 2

Stack Overflow用户

发布于 2021-07-05 11:16:14

如果您清楚地观察到代码,外部函数counter将返回内部函数inner

参见return innercounter(fn, counters)的末尾

代码语言:javascript
复制
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可视化器以更好地了解流程

干杯!

票数 1
EN

Stack Overflow用户

发布于 2021-07-05 11:26:41

高阶函数的伟大解释

上面的链接完美地解释了一切。我推荐它,因为我曾经用它来学习它是如何工作的。

代码语言:javascript
复制
counted_add = counter(add_num, c)

counted_add(10, 20)

我可以解释的最基本的方法是:您‘命名’函数计数器,并将名称设置为counted_add。这就是为什么可以使用counted_add(10,20)调用该函数的原因。如果这说得通的话:我不擅长解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68254615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档