在Python中,为什么不能用lambdas编写累加器生成器?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Python中,为什么不能用lambdas编写累加器生成器?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1537字,纯文字阅读大概需要3分钟。
内容图文
![在Python中,为什么不能用lambdas编写累加器生成器?](/upload/InfoBanner/zyjiaocheng/723/71d86ee83293407c9f4c7e6f11ad3c22.jpg)
保罗格雷厄姆describes以下问题:
We want to write a function that generates accumulators– a function that takes a number n, and returns a function that takes another number i and returns n incremented by i.
他说,虽然这样的函数可以在Lisp / Ruby / Perl中实现,就像它一样
(defun foo (n)
(lambda (i) (incf n i)))
在Python中,它将被编写
class foo:
def __init__(self, n):
self.n = n
def __call__(self, i):
self.n += i
return self.n
所以我的问题是,Python究竟是什么(除了缺乏对多行lambda的支持)阻止你在上面第一个代码示例的简洁风格中实现累加器生成器?正如Paul Graham推测的那样,Python将来会支持这样的事吗?
解决方法:
这个例子首先是人为的.在定义累加器之后,你会在Python中使用它:
acc = foo(6)
acc(2)
acc(4)
有什么用?在Python中你会这样做:
acc = 6
acc += 2
acc += 4
我不知道在lisp中定义一个累加器是否有意义,但在Python中你不需要定义一个,因为你可以把它内置,可以这么说.
其次,你要问的问题是钉在头上.什么阻止Python以“简洁”的方式做到这一点?因为Python的态度是它将成为一种快速开发并且可维护的语言,这意味着易于阅读.代码高尔夫和钝,简洁的代码不是Python的设计的一部分.
但最终,Python永远不会发展这个功能的原因是它依赖于整数是可变的,即你可以做类似的事情:
>>> g = 6
>>> g++
>>> g
7
这不会发生在Python中,整数是不可变的.您不能增加整数的值.这简化了语言和它的使用.例如,如果整数是可变的,则它们不能用作词典中的键.
本质上,这个例子的核心是增加整数的值,这是Python无法做到的.在Python中,当你添加两个整数时,你会得到第三个整数.您不会增加第一个的值.
所以Python永远不会成为lisp,只有那些长时间使用lisp的人认为它应该,或者坚持“python几乎是lisp”的习惯.并且它不能在几行中做累加器,因为它既不需要也不想.
内容总结
以上是互联网集市为您收集整理的在Python中,为什么不能用lambdas编写累加器生成器?全部内容,希望文章能够帮你解决在Python中,为什么不能用lambdas编写累加器生成器?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。