Python 3000 FAQ

分类:PHP_Python| 发布:camnprbubuol| 查看: | 发表时间:2012/1/6

Q. 我想学 Python。我应该学 Python 2.6还是Python 3.0?

A. 绝对是学 Python 2.x(最新出的版本是 2.5)。我期望在你需要学习 Python 3.0之前先学两年2.x,并且从一个初学者的角度来看两个版本间的差异并不是很大:在2.x中学到的绝大多数内容仍然可以用在3.0中。

Q. 既然你打算去掉 reduce(),为什么还保留 map()和 filter()呢?

A. 不是因为讨厌函数式编程我才去掉 reduce()。我去掉它是因为几乎所有用到 reduce() 的代码的可读性比起使用一个 for 循环和累积变量的实现来说可读性差多了。而对于 map()和 filter()来说,它们有用得多,并且当与一个已经存在的函数(如内置函数)一起使用时比起使用list comprehension或generator表达式来说更清晰一些。(不过不建议使用lambda,否则使用list comprehension要更清晰和更快。)

Q. 多核处理器将成为标准甚至在不久的将来对于笔记本也是如此。那么 Python 3.0会不会想得到这样的好处而去掉 GIL(全局解释器锁)吗?

A. 不会。我们不打算过多的修改 CPython 的实现。去掉 GIL 将会造成对解释器的大量的重写,因为所有内部的数据结构(和引用计数操作)都将不得不设计成线程安全的。这种做法以前曾经尝试过(在90年代末由Greg Stein进行的),结果得到的解释器的运行速度慢了两倍。如果你有多个 CPU,并且你想全部用上,你可以创建象 CPU 一样多的进程。(你所写的 web 应用应该容易被扩展,不是吗?所以,如果你能够在不同的机器上运行几个拷贝,对于在一台机器上运行多个 server 的拷贝就不算什么了。)如果你想要的是“真正的”多线程,那么使用 Jython 或 IronPython。JVM 和 CLR 的确支持多 CPU 线程。当然要准备好面对:死锁、活动锁(live-locks)、竟争条件(race conditions)和所有其它伴随着多线程代码而来的有损害的东西。

Q. 我比较喜欢使用相同的源代码用在 2.x 和 3.0中,我实在是不想使用 2to3 源代码转换工具。为什么你不能实现它呢?

A. 看你自已了。2.6 与 3.0 之间的交集的很大,但是还有有些事情你做不了:你既不能使用 Unicode literals (只在2.6中有),也不能使用bytes literals(只在3.0中有)。唯一可以在两个版本中同样工作的 print 语法是 print(x)。当你捕获异常时,你不能检查它们的值,因为 2.6 的语法使用 ’,’,而 3.0 的语法使用 as。你不能使用 .iterkeys(),但是在 2.6 和 3.0 中 .keys() 工作是有区别的。你不能使用元类(metaclass),因为指明元类的语法在 3.0 中完全变了。等等。把自已控制在两个版本的交集中是非常痛苦和有局限的。我们在 3.0 中不会引入向后兼容性的语法,因为这会干扰我们的目标(我们永远会在 2.x 中保持向后兼容性,而 3.0 的整个出发点就是收拾残局。

另外,另一批的 Q/A 参阅后续内容

来源:http://blog.csdn.net/gvanrossum/article/details/1733610
365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/php-python/516.html

相关文章