[资源] 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 (6185)

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

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

NBPython-Netbeans的Python插件 (3991)

Netbeans将支持Python开发 (3431)

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

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

Python编码规范 (3072)

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

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

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

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

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

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

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

Google App Engine的版本控制 (2558)

Google App Engine更新 (2394)

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

Google App Engine Cookbook (2341)

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