Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自深入Python以来对Python的更改_Python - Fatal编程技术网

自深入Python以来对Python的更改

自深入Python以来对Python的更改,python,Python,我一直在通过MarkPilgrim的工作自学Python。我完全推荐它,我也是 然而,最近一次深入Python的更新是在五年前。我期待着在切换到3.x时阅读新版本,但现在,使用django意味着我将坚持使用2.x 如果我曾经将深入研究Python作为学习该语言的主要资源,我很想知道我错过了Python的哪些新特性。我遇到的几个例子是 itertools 元素树 还有什么我错过的吗 编辑:正如巴斯蒂安在他的回答中指出的那样,我可以只阅读页面,但有时发现一个关于堆栈溢出的有用提示,而不是在官方文

我一直在通过MarkPilgrim的工作自学Python。我完全推荐它,我也是

然而,最近一次深入Python的更新是在五年前。我期待着在切换到3.x时阅读新版本,但现在,使用django意味着我将坚持使用2.x

如果我曾经将深入研究Python作为学习该语言的主要资源,我很想知道我错过了Python的哪些新特性。我遇到的几个例子是

  • itertools
  • 元素树
还有什么我错过的吗


编辑:正如巴斯蒂安在他的回答中指出的那样,我可以只阅读页面,但有时发现一个关于堆栈溢出的有用提示,而不是在官方文档中费力地完成完整、全面的答案,这是一件很有趣的事。

我建议您阅读“Python 2.x中的内容”文档。 一些可能遗漏的内容:

  • 新样式类(允许标准类型、子类型、属性等)
  • 带有关键字的
    ,有助于分配和释放资源
马克(这本书的作者)对这一点有自己的看法。我无耻地抄袭了这里的相关段落:

“如果你选择Python 2,我只能推荐“深入Python”第2-7章、第13-15章和第17章。这本书的其余部分已经非常过时了。”

以下是一些我所想到的答案示例:

条件表达式 2.5提供了一种新的编写方式,而不是传统的

字典中键的测试 将_key()改为d中的键

>>>d={'key':'value','key2':'value2'}
>>>'key1' in d
 True
退房。它拥有2.x系列中的所有版本。根据Alex的评论,您需要查看所有Python2.x for x>2

日常编码要点:

枚举:而不是执行以下操作:

for i in xrange(len(sequence)):
    val = sequence[i]
    pass
现在,您可以更简洁地编写:

for i, val in enumerate(iterable):
    pass
这一点很重要,因为它适用于不可获取项的iterables(否则您必须在值迭代的同时使用递增索引计数器)

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

布尔值:True和False,为清晰起见添加:
返回True
返回1
更清晰

生成器:惰性求值的一种表现形式

evens = (i for i in xrange(limit) if i % 2 == 0)
扩展切片:内置支持切片中的跨步

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是falsy时<代码>b,如果其他c解决了该问题

上下文管理:通过
with
语句简化资源获取/释放

with open(filename) as file:
    print file.read()
# File is closed outside the `with` block.
更好的字符串格式:太多了,无法描述——请参阅
str.format()

下的Python文档。2.4中添加了一些“次要”功能,这些功能在新的2.x Python代码中非常普遍:decorator(2.4)和try/except/finally子句。在你做不到之前:

try:
    do_something()
except FunkyException:
    handle_exception():
finally:
    clean_up()
不过,这两种语言本质上都是语法上的甜点,因为您也可以这样做,只需多编写一点代码

import antigravity

Dict comprehensions——但你必须等待Python 3来解决这些问题。因此,在最糟糕的情况下——到目前为止有三个答案,但每个答案都是错误的(要么提到了2.2版本中已经出现的功能,要么是在你明确表示坚持使用Python 2时提到了Python 3。*现在——cheez)。2.2版本中已经有了新的类(马克在写这篇文章)。这是一个很好的建议。如果我以前读过的话,我可能会更快地跳过XML和SOAP章节。我还应该注意到,生成器现在不仅仅是一种惰性评估的表现形式——它们支持完整的协程行为。用前一种方式描述它们更简单。:-)哦,通过
yield
,简单生成器可以让您在日常工作中非常轻松地编写简单的状态机。这对于自定义迭代器之类的东西很方便。这可能是问题的一部分,作为您正在寻找的答案类型的示例。(但我有点苦涩,因为这比我的答案有更多的赞成票。;-)@cdleary我认为这样回答你自己的问题没有什么错。我的答案实际上是一个答案,因为在问了这个问题之后,我在Python文档的What's New in Python中发现了这两个示例。我喜欢你的答案,并投了赞成票。我很高兴我对您提到的大部分内容都很熟悉——这表明,深入Python学习并没有让我编写过时的2.2代码。
import antigravity