我对Python 3有一些了解(我不是初学者,但我不是专家)。我对web开发很感兴趣,所以我想使用Django。两个版本的Python有什么区别?我应该如何从3切换到2.x?
答案 0 :(得分:5)
如果您已熟悉Python 3,那么在使用Python 2进行编码时,您将不得不担心几乎没有 no 差异。用户可见的最大差异与详细信息有关。 print
声明,无论如何你可能不会用于Django。
因此,只需编写代码,并询问您可能遇到的任何特定问题。
答案 1 :(得分:5)
他们并没有那么不同。几乎你在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
支持。
答案 2 :(得分:3)
另一个很大的区别是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
答案 3 :(得分:1)
通读:http://python3porting.com/differences.html
请注意,很多事情都是从Python 2中删除的,比如apply(),因此您无需担心。
另外,正如senderle所指出的,你使用了来自object的子类(这在Python 3中也是推荐的,可能是因为它实际上在Python 2中有所不同)。
答案 4 :(得分:0)