V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
yaoqiang123
V2EX  ›  Python

Python 里为什么函数可以返回一个函数内部定义的函数?

  •  
  •   yaoqiang123 · 2018-04-26 17:44:20 +08:00 · 3847 次点击
    这是一个创建于 2429 天前的主题,其中的信息可能已经有所发展或是发生改变。
    13 条回复    2018-04-27 07:02:47 +08:00
    bulshit
        1
    bulshit  
       2018-04-26 17:47:12 +08:00 via Android   ❤️ 1
    因为都是对象
    THP301
        2
    THP301  
       2018-04-26 17:52:48 +08:00
    看看 Python 的源码就知道了
    vipppppp
        4
    vipppppp  
       2018-04-26 18:13:03 +08:00
    #1 正解
    万物皆对象
    大 py 就是这么神奇
    Hopetree
        5
    Hopetree  
       2018-04-26 18:15:57 +08:00
    装饰器?
    whoami9894
        6
    whoami9894  
       2018-04-26 18:16:54 +08:00 via Android
    闭包函数的定义
    mec
        7
    mec  
       2018-04-26 18:40:44 +08:00
    closure
    Leigg
        8
    Leigg  
       2018-04-26 18:54:08 +08:00 via Android
    js 中的闭包是说用来在外面访问函数内部的变量。python 应该异曲同工之妙,其实写法非常像。
    ltoddy
        9
    ltoddy  
       2018-04-26 20:48:19 +08:00
    python 中所有的东西,在底层对应的是 Py_Object 的这个结构体指针,既然你可以返回比如字符串之类,为什么不能返回函数呢,大家都是 Py_Object* 呀。
    lolizeppelin
        10
    lolizeppelin  
       2018-04-26 23:28:34 +08:00 via Android
    这么说吧 如果不能这样 得多麻烦 全部专门定义一个累来返回实例么
    Minys
        11
    Minys  
       2018-04-26 23:57:56 +08:00 via iPhone
    这种结构叫闭包( encloser ),是函数式编程相关。因为 Python 里啥都是对象,如果用 C 写 Python 拓展就知道(虽然我没写过),不管啥都是 Py_object*,底层来看是一样的,就相当于根据外层函数的参数和运行定制了内层函数(也可以理解成成员变量)并返回。
    feixchow
        12
    feixchow  
       2018-04-27 01:55:56 +08:00
    函数式编程语言特性,函数是第一公民。函数和变量、对象这些都是同等处理的。
    guoli100
        13
    guoli100  
       2018-04-27 07:02:47 +08:00 via iPhone
    Python 有函数式编程特性。函数式编程里,函数是 first class,函数可以作为参数传入,也可以作为返回值返回,这样的函数一般叫高阶函数。如果你了解一下柯里化,就知道把函数作为值返回的作用。

    另外可以了解下 Python 中的装饰器,用函数实现的装饰器,非常典型,把要装饰的函数作为参数,返回一个 wrapper 函数,而且它还是个闭包。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1314 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:45 · PVG 07:45 · LAX 15:45 · JFK 18:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.