来源:Cython
浏览 519
扫码
分享
2020-04-04 08:24:42
0.19 (2013-04-19)
Features added
- New directives
c_string_type
and c_string_encoding
to more easilyand automatically convert between C strings and the different Python stringtypes. - The extension type flag
Py_TPFLAGS_HAVE_VERSION_TAG
is enabled by defaulton extension types and can be disabled using the type_version_tag
compilerdirective. - EXPERIMENTAL support for simple Cython code level line tracing. Enabled bythe “linetrace” compiler directive.
- Cython implemented functions make their argument and return type annotationsavailable through the
annotations
attribute (PEP 3107). - Access to non-cdef module globals and Python object attributes is faster.
Py_UNICODE*
coerces from and to Python unicode strings. This ishelpful when talking to Windows APIs, which use compatible wchar_tarrays for strings. Note that the Py_UNICODE
type is otherwisedeprecated as of CPython 3.3.isinstance(obj, basestring)
is optimised. In Python 3 it only testsfor instances of str
(i.e. Py2 unicode
).- The
basestring
builtin is mapped to str
(i.e. Py2 unicode
) whencompiling the generated C code under Python 3. - Closures use freelists, which can speed up their creation quite substantially.This is also visible for short running generator expressions, for example.
- A new class decorator
@cython.freelist(N)
creates a static freelist of Ninstances for an extension type, thus avoiding the costly allocation step ifpossible. This can speed up object instantiation by 20-30% in suitablescenarios. Note that freelists are currently only supported for base types,not for types that inherit from others. - Fast extension type instantiation using the
Type.new(Type)
idiom hasgained support for passing arguments. It is also a bit faster for types definedinside of the module. - The Python2-only dict methods
.iter()
and .view
()
(requires Python 2.7)are automatically mapped to the equivalent keys/values/items methods in Python 3for typed dictionaries. - Slicing unicode strings, lists and tuples is faster.
- list.append() is faster on average.
raise Exception() from None
suppresses the exception context in Py3.3.- Py3 compatible
exec(tuple)
syntax is supported in Py2 code. - Keyword arguments are supported for cdef functions.
- External C++ classes can be declared nogil. Patch by John Stumpo. This fixestrac ticket 805.
Bugs fixed
- 2-value slicing of unknown objects passes the correct slice when the
getitem
protocol is used instead of the getslice
protocol (especially in Python 3),i.e. None
values for missing bounds instead of [0,maxsize]
. It is alsoa bit faster in some cases, e.g. for constant bounds. This fixes trac ticket 636. - Cascaded assignments of None values to extension type variables failed witha
TypeError
at runtime. - The
defaults
attribute was not writable for Cython implementedfunctions. - Default values of keyword-only arguments showed up in
defaults
insteadof kwdefaults
(which was not implemented). Both are available forCython implemented functions now, as specified in Python 3.x. yield
works inside of with gil
sections. It previously lead to a crash.This fixes trac ticket 803.- Static methods without explicitly named positional arguments (e.g. having only
*args
) crashed when being called. This fixes trac ticket 804. dir()
without arguments previously returned an unsorted list, which nowgets sorted as expected.dict.items()
, dict.keys()
and dict.values()
no longer return listsin Python 3.- Exiting from an
except-as
clause now deletes the exception in Python 3 mode. - The declarations of
frexp()
and ldexp()
in math.pxd
were incorrect.
Other changes