自从潜入Python以来对Python的改变

时间:2009-07-03 20:28:34

标签: python

我一直在通过Mark Pilgrim的Dive Into Python教授自己的Python。我完全推荐它,other Stack Overflow users也是如此。

然而,Dive Into Python的最新更新是在五年前。我期待阅读新的Dive into Python 3当我切换到3.x时,但是现在,使用django意味着我将坚持2.x。

我很想知道我错过了什么Python的新功能,如果我使用Dive Into Python作为我学习语言的主要资源。我遇到的几个例子是

  • itertools
  • ElementTree的

还有什么我错过的吗?

编辑:正如Bastien在他的回答中指出的那样,我可以阅读What's New in Python页面,但有时在Stack Overflow上发现一个有用的提示很有趣,而不是在官方文档中通过完整,全面的答案

6 个答案:

答案 0 :(得分:9)

结帐What's New in Python。它包含2.x系列中的所有版本。根据Alex的评论,你会想要查看所有Python 2.x for x> 2。

日常编码的重点:

枚举:而不是:

for i in xrange(len(sequence)):
    val = sequence[i]
    pass

你现在可以更简洁地写一下:

for i, val in enumerate(iterable):
    pass

这一点非常重要,因为它适用于非getitemable迭代(否则你必须使用递增索引计数器和值迭代)。

日志记录:基于打印的调试的理想替代方案,在Log4j样式的库模块中标准化。

布尔:正确与错误,为清晰起见而添加:return True意图比return 1更明确。

Generators :一种表达形式的懒惰评估

evens = (i for i in xrange(limit) if i % 2 == 0)

扩展切片:Builtins支持切片中的步幅。

assert [1, 2, 3, 4][::2] == [1, 3]

设置:对于O(1)查找语义,您不再需要这样做:

pseudo_set = {'foo': None, 'bar': None}
assert 'foo' in pseudo_set

您现在可以:

set_ = set(['foo', 'bar'])
assert 'foo' in set_

反向迭代reversed(sequence)sequence[::-1]更具可读性。

子流程:统一调用子流程的所有方式 - 捕获输出,提供输入,阻塞或非阻塞。

条件表达式:成语存在问题:

a and b or c

即,当b是假的。 b if a else c解决了这个问题。

上下文管理:通过with语句简化资源获取/发布。

with open(filename) as file:
    print file.read()
# File is closed outside the `with` block.

更好的字符串格式:描述太多 - 请参阅str.format()下的Python文档。

答案 1 :(得分:6)

马克(这本书的作者)对此有some comments。我在这里无耻地复制了相关段落:
“”如果你选择Python 2,我只能推荐“Dive Into Python”第2-7章,第13-15页和第17章。本书的其余内容已经过时了。“”“

答案 2 :(得分:3)

以下是我想到的那种答案的几个例子:

条件表达式

而不是and-or trick,2.5提供了一种写conditional expressions的新方式。

#and-or trick:
x = condition and 'true_value' or 'false_value'

#new in 2.5:
x = 'true_value' if condition else 'false_value'

测试字典中的键

has_key()is deprecated支持d。

中的键
>>>d={'key':'value','key2':'value2'}
>>>'key1' in d
 True

答案 3 :(得分:2)

在2.4中添加了一些“次要”功能,并且在新的2.x python代码中普遍存在:decorator(2.4)和try / except / finally子句。在你不能做之​​前:

try:
    do_something()
except FunkyException:
    handle_exception():
finally:
    clean_up()

两者本质上都是语法糖,因为你可以做同样的事情,只需要更多的代码。

答案 4 :(得分:1)

import antigravity

See the documentation

答案 5 :(得分:0)

我建议您阅读“Python 2.x中的内容?”文档。 可能错过的一些事情:

  • 新式类(允许标准类型子类型,属性......)。
  • with关键字,有助于分配和释放资源。