如果我已经知道Python 3,我该如何学习Python 2?
我有一些Python 3的知识(我不是初学者,但我不是专家)。我对Web开发感兴趣,所以我想使用Django。这两个Python版本有什么区别?我应该如何从3切换到2.x?如果我已经知道Python 3,我该如何学习Python 2?
之间的区别,他们是不是那么回事了很多详细信息。几乎你在Python 3中学到的所有东西都会转移到Python 2.我建议你简单地跳入。偶尔你会看到一条错误消息,但大多数情况下它们都是不言自明的。
我敢打赌,学习Django会比习惯的Python 2
如果要编写代码,是稳健向后兼容您可能会发现six
库有用的方法更难。否则,我只能想到以下两件事,在你回溯到Python 2时可能很重要:
-
避免使用旧式类。在Python 3,你可以宣布这样的一类,没有任何问题:
class Foo: pass
在Python 2,如果你这样做,你会得到一个旧式类,你可能不希望。但是你不会得到关于这个的任何错误消息,所以微妙的继承错误可能会出现并且在导致问题之前保持隐藏很长时间。所以在Python 2,请记住从
object
明确继承:class Foo(object): pass
避免使用
range(n)
,至少对于n
大值。在Python 3中,range
返回智能迭代器,但在Python 2中,range
返回实际列表。对于大范围,它会消耗大量的内存。要在Python 2中获取Python 3的行为range
,请使用xrange(n)
。类似的注意事项适用于字典keys()
,values()
和items()
方法。他们都在Python 2中返回列表。使用iterkeys()
,itervalues()
和iteritems()
方法来节省内存。
有这个问题的几个其他优秀的答案,涵盖其他一些细节,如unicode
支持。
如果你已经是熟悉Python 3,则有近没有同时,你会担心在Python 2。最明显的差异编码时已经与细节做声明的print
,你可能不会用于Django。
所以,只写代码,并询问了有关可能遇到的任何具体问题。
另一个很大的区别是Python 3如何处理unicode - 在Python 3中的所有内容都是unicode字符串或二进制数据,而在Python 2中,unicode字符串和8位字符串之间存在区别。
以下页面有关于Python 2和3 http://docs.python.org/release/3.0.1/whatsnew/3.0.html
通读此:http://python3porting.com/differences.html
注意,有很多事情只是从Python 2中取出,如适用(),所以你不必担心。另外,正如senderle所指出的那样,你可以使用对象的子类(这也在Python 3中推荐,也可能是因为它实际上在Python 2中有所不同)。
谢谢。我可能会犯这样的错误,甚至没有意识到这一点。 – Orcris