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

Python中的高阶函数
EN

Stack Overflow用户
提问于 2015-12-24 19:52:10
回答 1查看 106关注 0票数 5

对于一些人可能认为这是一个基本问题,我表示歉意。在以下简单代码中:

代码语言:javascript
复制
def greet(name):
    def say_hi():
        print('Preparing to greet...')
        print('Hi', name, '!')       
        print('Greeting given.')
    return say_hi

使用正式参数调用'greet‘时,解释器遇到'say_hi’函数时,事件的顺序是什么?我看到返回了对它的引用(形成一个闭包吗?),但是是执行内部函数还是简单地‘读’,直到程序员编写如下代码时才调用:

代码语言:javascript
复制
f = greet('Caroline')
f()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-24 20:00:59

因为python中的每一件事都是关于运行时的(除了编译时任务,比如peephole优化器等等),所以python不调用您的函数,除非您调用它。

通过使用来自dis模块的dis函数可以看到这种行为,该模块返回函数的相对字节码:

代码语言:javascript
复制
>>> def greet(name):
...     def say_hi():
...         print('Preparing to greet...')
...         print('Hi', name, '!')       
...         print('Greeting given.')
...     return say_hi
... 
>>> import dis
>>> 
>>> dis.dis(greet)
  2           0 LOAD_CLOSURE             0 (name)
              3 BUILD_TUPLE              1
              6 LOAD_CONST               1 (<code object say_hi at 0x7fdacc12c8b0, file "<stdin>", line 2>)
              9 MAKE_CLOSURE             0
             12 STORE_FAST               1 (say_hi)

  6          15 LOAD_FAST                1 (say_hi)
             18 RETURN_VALUE  

正如您在第6部分中看到的,python只是在CONST值中以代码对象的形式加载函数。

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

https://stackoverflow.com/questions/34457331

复制
相关文章

相似问题

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