[资源] What’s New in Python 2.6 翻译 (十七) - 其它的语言变化

其它的语言变化

核心的Python语言有些小变化

  • 当用**语法调用一个函数以提供参数关键字的时候,不再需要用Python dictionary,任何mapping皆起作用。
     >>> def f(**kw):
    ... print sorted(kw)
    ...
    >>> ud=UserDict.UserDict()
    >>> ud['a'] = 1
    >>> ud['b'] = 'string'
    >>> f(**ud)
    ['a', 'b']
    (由Alexander Belopolsky提供;issue 1686487

  • 对一个函数调用来说,在*args参数之后提供一个参数关键字也是合法的。
     >>> def f(*args, **kw):
    ... print args, kw
    ...
    >>> f(1,2,3, *(4,5,6), keyword=13)
    (1, 2, 3, 4, 5, 6) {'keyword': 13}
    以前这将会产生一个句式错误。(由Amaury Forgeot d'Arc提供;issue 3473。)
  • 一个新的内置函数next(iterator, [default])返回了从指定的iterator算起的下一项。如果提供了default参数,当iterator被耗尽时,它将被返回;反之,如果iterator没有耗尽,将会抛出StopIteration异常。(Backported in issue 2719。)

  • 现在Tuples有index()count()方法来匹配list类型的index()count()方法:
     >>> t = (0,1,2,3,4,0,1,2)
    >>> t.index(3)
    3
    >>> t.count(0)
    2
    (由Raymond Hettinger贡献)

  • 现在内置类型已经提高了对extended slicing句法的支持,接受了不同的(start, stop, step)组合。以前,这种支持是部分的,并且对部分corner cases不起作用。(由Thomas Wouters实现。)

  • Properties现在有三种属性,getter,setterdeleter,为已经存在的属性增加getter,setter或者deleter函数提供了有用的快捷方式。你可以这样用:
    class C(object):
    @property
    def x(self):
    return self._x

    @x.setter
    def x(self, value):
    self._x = value

    @x.deleter
    def x(self):
    del self._x

    class D(C):
    @C.x.getter
    def x(self):
    return self._x * 2

    @x.setter
    def x(self, value):
    self._x = value / 2
  • 现在内置类型的一些方法接受多个 iterables:intersection(),intersection_update(),,union(),,update(),difference()difference_update()
     >>> s=set('1234567890')
    >>> s.intersection('abc123', 'cdf246') # Intersection between all inputs
    set(['2'])
    >>> s.difference('246', '789')
    set(['1', '0', '3', '5'])
    (由Raymond Hettinger提供。)

  • 增加了许多浮点型特性。float()函数将string nan变成一个IEEE 754 Not A Number值,将+inf和-inf变成正无穷大或负无穷大。这适用于任何一个IEEE 754 semantics平台。
    (由Christian Heimes提供; issue 1635。)

    math 中的其它函数,isinf()和isnan()来说,如果浮点参数是无穷大或者Not A Number,将返回true。(issue 1640

  • 增加了转换函数,用来将浮点数转换成十六进制字符串(issue 3008)。这些函数将浮点数从string representation转换而来,或者将浮点数转换到string representation中去,没有引入二、十进制转换间的误差化整。Floats的hex()方法返回一个string representation, float.fromhex()方法将string转换回number:
     >>> a = 3.75
    >>> a.hex()
    '0x1.e000000000000p+1'
    >>> float.fromhex('0x1.e000000000000p+1')
    3.75
    >>> b=1./3
    >>> b.hex()
    '0x1.5555555555555p-2'
  • 数字的精确度:在支持符号零的系统上由两个浮点数创建一个复杂的数字时, complex() 构造函数将保留零的符号。(由 Mark T. Dickinson修正; issue 1507

  • 从父类那里继承了__hash__()方法的类可以设置__hash__ = None,来表明该类不是hashable的。这将使得hash(obj)抛出TypeError ,且该类不会实现Hashable ABC。

    当定义了__cmp__()__eq__()方法,用他们的值而不是identity来比较对象时,应当这样设置。对象都有一个默认的hash方法,用id(obj)做为hash值。没有一个简洁的方式用以移除从父类那里继承的 __hash__()方法,因此用指派None的方式做为一个替代。在C level,extensions可以设置tp_hashPyObject_HashNotImplemented。(由Nick Coghlan和Amaury Forgeot d'Arc修正;issue 2235。)

  • PEP 352 中叙述的Exception interface的变化仍会继续。2.6中,message属性不推荐使用,推荐使用args属性。

  • GeneratorExit 异常现在是BaseException而不是Exception的子类。这也意味着异常处理程序不会悄悄的捕获GeneratorExit。(由Chad Austin提供;issue 1537。)

  • 现在Generator对象用gi_code属性来引用原始代码,支持generator。(由Collin Winter提供;issue 1473257。)

  • compile()内置函数如今接受参数关键字,也接受定位参数。(由Thomas Wouters提供;issue 1444529。)

  • complex() 构造函数现在接受包含括号的复数字符串,也就是说complex(repr(cplx))将保存/还原值。例如:complex('(3+4j)')将返回值(3+4j)。

  • 字符串translate()函数接受None作为translation table参数,该参数被认为是identity transformation。这使得只删除字符的操作更加容易。(由Bengt Richter提供,Raymond Hettinger实现;issue 1193128。)

  • 内置的dir()函数检查它所接到的对象的__dir__()方法。该方法必返回字符串列表,包含对该对象来说有效的属性的名字,并让该对象控制dir()产生的值。具有__getattr__()方法或者__getattribute__()方法的对象能够应用这一点为它们的pseudo-attributes做广告。(issue 1591665

  • 对于包含某方法的对象和函数来说,实例方法对象有新的属性;im_self的新同义词是__self__,im_func的是__func__。Python 2.6中仍支持旧名字,而3.0中则不再支持。

  • 一个不太明显的变化:当在class声明中用locals()函数时,结果的dictionary不再返回自由变量。(这里自由变量指在class声明中引用的变量,不是该类的属性。)

优化

  • 在C中warnings模块被重写了。这使得从parser invoke warnings成为可能,也使得interpreter启动的更快。(由Neal Norwitz和Brett Cannon提供;issue 1631171。)

  • 现 在type对象有个cache方法,能减少找到某个class的正确执行方法所需的工作量。;一旦cache了,interpreter不需要遍历整个基 类以找到要调用的方法。如果基类或者类本身修改了,cache会被清掉,因此尽管面对Python的动态特性,cache仍能够保持正确。(原来的优化由 Armin Rigo执行。Python中由Kevin Jacobs更新;issue 1700288。)

    默认情况下,该变化仅适用于包含在核心Python中的types。扩展模块不必和cache兼容,因此为了enable cache方法,必须明确增加Py_TPFLAGS_HAVE_VERSION_TAG到模块的tp_flags field中去。(为了和cache方法兼容,扩展模块的代码不必直接access以及修改)

  • 用参数关键字进行函数调用要快些,因为用的是快速指针比较,通常会节省全部字符串比较的时间。(Antoine Pitrou最初实现后由Raymond Hettinger提供;issue 1819。)

  • 感谢Need For Speed sprint,struct模块里的所有functions在C中都被重写了。(由Raymond Hettinger提供。)

  • 一些标准的内置types现在在他们的types对象里面设置了位。这能更快的检查出一个对象是否是这些types中的一个子类。

  • Unicode字符串现在用更快的代码来发现空格或者换行符;这使得split()方法加快了约25%,splitlines()方法加快了35%。(由Antoine Pitrou提供。)pymalloc用于Unicode字符串数据后,内存占有率减少了。

  • with声明现在存于栈的__exit__()方法中,速度略有提升。(由Jeffrey Yasskin实现。)

  • 为减少内存占有率,当回收到对象的最高generation的时候garbage collector将清除内部free lists。这可以尽快的返回内存给操作系统。

[新闻] Python 3.0发布

12月3日,Python 3.0的最终版终于发布了。

We are pleased to announce the release of Python 3.0 (final), a new production-ready release, on December 3rd, 2008.
Python 3.0 (a.k.a. "Python 3000" or "Py3k") is a new version of the language that is incompatible with the 2.x line of releases. The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed. Also, the standard library has been reorganized in a few prominent places.

我们非常高兴的宣布,一个全新的, production-ready的Python版本,python 3.0(final)在12月3日发布了。

Python 3.0 (也被称作"Python 3000"或"Py3k") 是一个与2.x系列不兼容的一个全新版本。与2.x相比,语言本身几乎是一样的,但是在很多细节上,尤其是内置对象,如字典和字符串的工作原理,已经发生了较大的变化。很多不推荐使用的功能被完全移除了。并且,标准库中一些显著的地方也被重新组织了。

What's new in Python 3000

原文:http://www.python.org/download/releases/3.0/

[资源] What’s New in Python 2.6 翻译 (十六) - PEP 3141: Numbers的类型层次结构

PEP 3141: Numbers的类型层次结构

Python 3.0 参考了Scheme的数字类型结构,在新的版本中给数字类型增加了几个抽象基类。这些类都反向移植到了2.6的numbers模块。

最基本的抽象基类是Number。它没有定义任何操作,它的存在只是为了在执行isinstance(obj, Number)来判断是否是一个数字。

ComplexNumber的一个子类。复数可以进行加、减、乘、除和指数操作,并且你可以取到它的实数部分、虚数部分和变化形式。Python的内置complex类型是Complex的一个实现。

Real继承了Complex,并且添加只针对实数可以工作的方法:floor(), trunc(), 舍入,取余,floor division以及比较。

Rational继承自Real,具有mumeratordenominator属性,并且能够转化为浮点数。Python 2.6在fractions模块里添加了一个简单的有理数类,Fraction

Integer是有理数的一部分,用<<和>>能够进行左移和右移, 也可以和位操作符,如&|,一起使用,也能用于变址寄存器组和分片的边界。

Python 3.0中,PEP稍稍重定义了已存在的内置函数:round()math.floor()math.ceil(),并且添加了新函数math.trunc()math.trunc()已经被反向移植倒了Python
2.6。math.trunc()朝着0的方向取整,返回0和函数参数之间最贴近的整数(Integral)。

参考:
PEP 3141 - A Type Hierarchy for Numbers

PEP 由Jeffrey Yasskin编写


Scheme's numerical tower, from the Guile manual

Scheme's number datatypes from the R5RS Scheme specification.


fractions模块

为了填充数字类型层次,fractions提供了一个有理数类。有理数存了由分子和分母构成的分数,能够准确的表示一个数字,如2/3。而浮点数只能表示个约数。

Fraction的构造函数取两个整数值,作为结果的分数的分子和分母。

>>>from fractions import Fraction 
>>> a = Fraction(2, 3)
>>> b = Fraction(2, 5)
>>> float(a), float(b)
(0.66666666666666663, 0.40000000000000002)
>>> a+b
Fraction(16, 15)
>>> a/b
Fraction(5, 3)

对要转化成有理数的浮点数来说,现在浮点数类型有个as_integer_ratio()方法,能够返回和浮点数同值的分数的分子和分母:

>>>(2.5) .as_integer_ratio() 
(5, 2)
>>> (3.1415) .as_integer_ratio()
(7074029114692207L, 2251799813685248L)
>>> (1./3) .as_integer_ratio()
(6004799503160661L, 18014398509481984L)

注意这个值只能被浮点数约等于,如1./3,不能简化成被约等于的数;fraction试图精确匹配这个浮点数值。

fractions模块基于Sjoerd Mullender长时间以来在Python的Demo/classes/
目录中的实现。该实现被Jeffrey Yasskin做了重要的更新。

[新闻] Python 3.0 rc3发布

Python 3.0 rc3于11月21日发布,此版本对以前的release做了增强以及修改了一些bug。根据计划,final release将于2008年12月发布。

下载链接:

[新闻] Django 1.0.2发布

在上周Django 1.0.1发布之后不久,有人发现用于生成release的打包脚本漏掉了几个Django源码目录,这不仅会到影响单元测试,而且至少有一个被遗漏的文件影响到Django的正常使用。于是Django工作组在11月18号发布Django 1.0.2修正了这些问题。

点击此处下载Django 1.0.2

[新闻] Python Wrapper for Windows Azure已经完成


微软项目经理
Sriram Krishnan已经为Windows Azure数据存储编写了一个Python包装。Windows Azure是微软基于云计算的操作系统,Python是其支持的语言之一。

点击此处阅读原文。

[新闻] Django 1.0.1发布

按照发布计划Django 1.0.1于11月15号正式发布。此版本修改了Django 1.0一些bug。

点击此处下载。

[新闻] Python3.0 rc2发布

[OT] CSDN上的一篇文章——国际观点:鼓励未来的程序员

一篇挺有意思的文章,国际观点:鼓励未来的程序员。相比于Windows,Linux和Apple更适合编程起步。


原文  国际观点:鼓励未来的程序员

[资源] What’s New in Python 2.6 翻译 (十五) - PEP 3129: 类修饰符

PEP 3129: 类修饰符

修饰符(Decorators)已经由函数的支持扩展到类的支持。现在,下面的写法是合法的:

@foo
@bar
class A:
pass

这相当于:

class A:
pass

A = foo(bar(A))

参考

PEP 3129 - Class Decorators
PEP由Collin Winter编写.

阅读最多得文章

Pydev - 基于eclipse的Python IDE (5926)

《Core Python Programming》出版引发争议 (4930)

创建高性能的Django网站 (4069)

NBPython-Netbeans的Python插件 (3844)

Netbeans将支持Python开发 (3267)

Google App Engine正式发布离线版文档 (3154)

Google App Engine全文检索实践 (3080)

Python编码规范 (2918)

Google App Engine Helper for Django User Guide中文版 (2832)

pymox: 一个python的mock框架 (2722)

使用Pydev开发Google App Engine项目 (2676)

Rapid Development with Python, Django, and Google App Engine (2576)

What’s New in Python 2.6 翻译 (一) - Python 3.0 (2563)

准备开始翻译What’s New in Python 2.6 (2563)

What’s New in Python 2.6 翻译 (十五) - PEP 3129: 类修饰符 (2476)

Google App Engine的版本控制 (2345)

Google App Engine更新 (2287)

一些Python的免费电子书 (2245)

Google App Engine Cookbook (2222)

feedsky
抓虾
pageflakes
google reader
bloglines
鲜果
哪吒
有道