注意: 虽然 JavaScript 对于本网站不是必需的,但您与内容的互动将受到限制。请开启 JavaScript 以获得完整的体验。

亮点:Python 2.4

亮点:Python 2.4

以下是 Python 2.4 新功能的(主观)亮点。

更快

Python 2.3 中添加的一些模块(例如 sets 和 heapq)已用 C 语言重写。此外,解释器也进行了一些其他提速。(更多信息请参阅“新增功能”文档的第 8.1 节“优化”。)

新的语言特性

  • 多行导入 - 当使用以下形式的导入时from foo import bar, baz, bing, bang,你可以用括号将导入的名称括起来,它们可以跨行拆分。这是 PEP 328 的一部分。
  • 告别 OverflowWarning - 正如 PEP 237 中所记载的,Python 不再生成 OverflowWarning。
  • 函数/方法装饰器 - 函数和方法装饰器,最初在 PEP 318 中描述,已添加到语言中,使用“pie-decorator”语法。装饰器在“def”之前的行上,并以“@”符号作为前缀。(PEP 318
  • 赋值给 None - 编译器现在将赋值给 None 视为 SyntaxError。
  • 失败导入清理 - 当模块导入失败时,Python 2.4a2 之前的版本会在 sys.modules 中留下一个损坏的模块 - 随后尝试导入失败的模块将悄无声息地成功,但会使用损坏的模块对象。如果导入失败,导入机制现在会从 sys.modules 中删除失败的模块。
  • -m 命令行选项 - python -m modulename 将在标准库中找到一个模块并调用它。例如,python -m pdb 等同于 python /usr/lib/python2.4/pdb.py

新增或升级的内置函数

  • 内置集合 - 在 2.3 中引入的 sets 模块现在已用 C 语言实现,并且 set 和 frozenset 类型可作为内置类型使用 (PEP 218)
  • 整数和长整数的统一 - 返回的数字如果对于整数来说太大,将自动返回一个长整数。 (PEP 237)
  • 生成器表达式 - 生成器表达式类似于列表推导式,但它们不是创建整个结果列表,而是创建一个生成器,逐个返回结果。这允许高效处理非常大的列表。 (PEP 289)
  • reversed() - 一个新的内置函数,接受一个序列并返回一个迭代器,该迭代器以相反的顺序遍历序列的元素 (PEP 322)
  • 新的 sort() 关键字参数 - sort() 现在接受关键字参数 cmp、key 和 reverse
  • sorted() - 一个新的内置函数 sorted() 的行为类似于就地列表的 sort() 方法,但可以在表达式中使用,因为它返回一个排序后的序列副本。
  • 字符串方法 - 字符串新增了 rsplit() 方法,并且字符串方法 ljust()、rjust() 和 center() 接受一个参数来指定填充字符。
  • eval() 现在接受任何表现为映射的对象作为其 locals 参数,而不仅仅是字典。由于这个小小的改变,各种新的和闪亮的“邪恶”都成为可能。

新增或升级的模块和包

  • 一个新的 subprocess 模块,用于以平台无关的方式生成进程(参见 PEP 324)
  • decimal - 一种新的数字类型,允许精确表示浮点数(避免了二进制浮点数的问题) (PEP 327)
  • os.urandom() 已被添加,适用于支持随机数据源(熵)的系统
  • mpz、rotor 和 xreadlines 模块已被移除。
  • difflib 模块现在包含一个 HtmlDiff 类,可以创建一个 HTML 表格,显示两个文本版本的并排比较。
  • socket 模块在支持的系统上获得了 socketpair() 函数。
  • os.path.lexists(),用于测试路径是否为符号链接。
  • doctest 模块经过了大规模重构,添加了许多新功能,并提供了许多用于自定义行为的新钩子。
  • 非阻塞 SSL 套接字再次可用。
  • 当同时指定星期和年份时,time.strptime() 现在可以使用 %U 或 %W(一年中的第几周)推断日期。
  • optparse 模块已更新为 Optik 1.5a1。
  • 新模块 cookielib 支持客户端 HTTP cookie。urllib2 获得了一个新的类 HTTPCookieProcessor,它使用了这个新模块。
  • 由 Hye-Shik Chang 维护的东亚编码器 CJKCodecs 集合已集成到 2.4 中。
  • email 包的 Parser 被完全重写,以更好地处理格式错误的电子邮件消息。它现在应该永远不会解析消息失败,并且会批注已解析的消息以指示在解析过程中发现了哪些问题。还有一个新的 FeedParser,允许在读取消息时将其输入到解析器中。
  • bisect 模块现在有一个底层的 C 实现,以提高性能。
  • 有一个新的 collections 模块,用于各种专门的集合数据类型。目前它只包含一种类型 deque,一个双端队列,支持从两端高效地添加和删除元素。
  • asyncore 模块的 loop() 现在有一个 count 参数,允许您在轮询循环中执行有限次数的传递。默认值仍然是永远循环。
  • curses 模块现在支持 ncurses 扩展 use_default_colors()。在终端支持透明的平台上,这使得使用透明背景成为可能。
  • imaplib 现在支持 IMAP THREAD 命令
  • heapq 有两个新函数 nlargest() 和 nsmallest(),用于查找数据集中 N 个最大或最小的值。
  • itertools 有一个新函数 groupby(),它有点像 SQL 的“GROUP BY”语句。它还获得了一个函数 tee(),返回 N 个独立的迭代器,它们复制作为参数传递的迭代器。
  • logging 包中添加了一个新函数 basicConfig(),以简化日志记录的设置。还有一个新的 TimedRotatingLogFileHandler,它以固定间隔自动轮换日志文件。
  • operator 模块新增了函数 attrgetter() 和 itemgetter()
  • posix 模块(作为 os 可用)有一个新函数 getsid()
  • poplib 支持基于 SSL 的 POP
  • profile 现在可以对 C 扩展函数进行性能分析
  • random 有一个新方法 getrandbits(N) 来返回一个 N 位长的随机整数。
  • re 模块得到了扩展,允许在正则表达式中使用简单的条件表达式。此外,底层的 SRE 引擎现在是非递归的(以前,某些类型的正则表达式会遇到递归问题)。
  • weakref 模块现在支持更广泛的 Python 对象,包括 Python 函数、类实例、集合、不可变集合、双端队列、数组、文件、套接字和正则表达式对象。此外,weakref 类型现在是一个可以被子类化的新式对象。
  • xmlrpclib 现在支持多调用扩展,用于在单个 HTTP 操作中传输多个 XML-RPC 调用。
  • base64 模块现在支持 Base64、Base32 和 Base16 编码和解码,并更完整地支持 RFC 3548。