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

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

另外可以了解下 Python 中的装饰器,用函数实现的装饰器,非常典型,把要装饰的函数作为参数,返回一个 wrapper 函数,而且它还是个闭包。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX