| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- .. _utilities-guide:
- Utilities
- ---------
- :mod:`future` also provides some useful functions and decorators to ease
- backward compatibility with Py2 in the :mod:`future.utils` and
- :mod:`past.utils` modules. These are a selection of the most useful functions
- from ``six`` and various home-grown Py2/3 compatibility modules from popular
- Python projects, such as Jinja2, Pandas, IPython, and Django. The goal is to
- consolidate these in one place, tested and documented, obviating the need for
- every project to repeat this work.
- Examples::
- # Functions like print() expect __str__ on Py2 to return a byte
- # string. This decorator maps the __str__ to __unicode__ on Py2 and
- # defines __str__ to encode it as utf-8:
- from future.utils import python_2_unicode_compatible
- @python_2_unicode_compatible
- class MyClass(object):
- def __str__(self):
- return u'Unicode string: \u5b54\u5b50'
- a = MyClass()
- # This then prints the Chinese characters for Confucius:
- print(a)
- # Iterators on Py3 require a __next__() method, whereas on Py2 this
- # is called next(). This decorator allows Py3-style iterators to work
- # identically on Py2:
- @implements_iterator
- class Upper(object):
- def __init__(self, iterable):
- self._iter = iter(iterable)
- def __next__(self): # note the Py3 interface
- return next(self._iter).upper()
- def __iter__(self):
- return self
- print(list(Upper('hello')))
- # prints ['H', 'E', 'L', 'L', 'O']
- On Python 3 these decorators are no-ops.
|