Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
48 lines (36 loc) · 1.56 KB

File metadata and controls

48 lines (36 loc) · 1.56 KB
Copy raw file
Download raw file
Edit and raw actions

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.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.