我一直在通过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作为我学习语言的主要资源。我遇到的几个例子是
还有什么我错过的吗?
编辑:正如Bastien在他的回答中指出的那样,我可以阅读What's New in Python页面,但有时在Stack Overflow上发现一个有用的提示很有趣,而不是在官方文档中通过完整,全面的答案答案 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
答案 5 :(得分:0)
我建议您阅读“Python 2.x中的内容?”文档。 可能错过的一些事情:
with
关键字,有助于分配和释放资源。