| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
future is the missing compatibility layer between Python 3 and Python 2. It allows you to maintain a single, clean Python 3.x-compatible codebase with minimal cruft and run it easily on Python 2 without further modification.
future is designed to be imported at the top of each Python module together with Python's built-in __future__ module like this:
from __future__ import (absolute_import, division,
print_function, unicode_literals)
from future import standard_library
from future.builtins import *
followed by standard Python 3 code. The imports allow this code to run unchanged on Python 3 and Python 2.7.
For example, after these imports, this code runs identically on Python 3 and 2.7:
# Support for renamed standard library modules via import hooks
from http.client import HttpConnection
from itertools import filterfalse
import html.parser
import queue
# Backported Py3 bytes object
b = bytes(b'ABCD')
assert list(b) == [65, 66, 67, 68]
assert repr(b) == "b'ABCD'"
# These raise TypeErrors:
# b + u'EFGH'
# bytes(b',').join([u'Fred', u'Bill'])
# Backported Py3 str object
s = str(u'ABCD')
assert s != b'ABCD'
assert isinstance(s.encode('utf-8'), bytes)
assert isinstance(b.decode('utf-8'), str)
assert repr(s) == 'ABCD' # consistent repr with Py3 (no u prefix)
# These raise TypeErrors:
# b'B' in s
# s.find(b'A')
# Common gotchas in Py3/2 str/bytes compatibility are addressed:
assert bytes(b'') != str('')
# Extra arguments for the open() function
f = open('japanese.txt', encoding='utf-8', errors='replace')
# New iterable range object with slicing support
for i in range(10**15)[:10]:
pass
# Other iterators: map, zip, filter
my_iter = zip(range(3), ['a', 'b', 'c'])
assert my_iter != list(my_iter)
# New simpler super() function:
class VerboseList(list):
def append(self, item):
print('Adding an item')
super().append(item)
# The round() function behaves as it does in Python 3, using
# "Banker's Rounding" to the nearest even last digit:
assert round(0.1250, 2) == 0.12
# input() replaces Py2's raw_input() (with no eval()):
name = input('What is your name? ')
print('Hello ' + name)
# To disable obsolete Py2 builtins removed from Py3, use this:
from future.builtins.disabled import *
# Then these raise NameErrors on both Py2 and Py3:
# apply(), cmp(), coerce(), reduce(), xrange(), etc.
| Author: | Ed Schofield |
|---|---|
| Sponsor: | Python Charmers Pty Ltd, Australia, and Python Charmers Pte Ltd, Singapore. http://pythoncharmers.com |
| Others: |
|
Copyright 2013 Python Charmers Pty Ltd, Australia. The software is distributed under an MIT licence. See LICENSE.txt.
| Back | FazBrowse Home | New Git URL |