Änderungen Python 2.x --> 3.x (C) 2014-2021 T.Birnthaler OSTC GmbH ============================= Aktivieren von Eigenschaften neuerer Python-Versionen (z.B. Python 3) in älteren Python-Versionen (z.B. Python2): import __future__ # Alle Eigenschaften from __future__ import * # FEHLER! # STD PEP (Standard ab Version N.M) from __future__ import annotations # 4.0 563 Type annotation from __future__ import generator_stop # 3.7 479 Generator stop from __future__ import unicode_literals # 3.0 3112 Unicode literals in Python 3000 from __future__ import print_function # 3.0 3105 Make "print" a function from __future__ import with_statement # 2.6 343 The "with" statement from __future__ import absolute_import # 3.0 328 Import: multi-line + absolute/Relative from __future__ import division # 3.0 238 Changing division operator from __future__ import generators # 2.3 255 Simple generators from __future__ import nested_scopes # 2.2 227 Statically nested scopes from __future__ import all_feature_names # ?.? TODO from __future__ import barry_as_FLUFL # 3.9 TODO Easteregg (<> statt !=) Die __future__-Imports MÜSSEN am Anfang des Quellcodes als 1. Anweisung stehen (da sie die Verhaltensweise des Python-Interpreters verändern). Ein kleines "Easteregg" ist auch versteckt (Blockbildung per geschweifte Klammern {...} wird sicher nie implementiert): from __future__ import braces # --> SyntaxError: not a chance !!! Unterschiede zwischen Python 2.x und Python 3.x: +-------------------------------+------------------------------+ | Python 2.x | Python 3.x | +-------------------------------+------------------------------+ | "äöü" (Bytestring) | b"abc" (Bytestring) | String | u"äöü" (Unicode erzwingen) | "äöü" (Unicode Std) | String | unicode(VAR) (Unicode) | str(VAR) (Unicode Std) | Typ | unicode | str | Typ | basestring | str | Typ +-------------------------------+------------------------------+ | VAR = raw_input(PROMPT) | VAR = input(PROMPT) | Direkt lesen | VAR = input(PROMPT) | VAR = eval(input(PROMPT)) | Interpretiert +-------------------------------+------------------------------+ | print ..., ... (Statement) | print(..., ...) (Funktion) | Ausgabe | print >> sys.stderr ... | print(..., file=sys.stderr) | Std: sys.stdout | print ..., | print(..., end="") | Std: "\n" (newline) | print ... + ... | print(..., ..., sep="") | Std: " " (separator) | ? | print(..., flush="False") | Nicht puffern | "...%d..." % (V1, ...) | "...{:d}...".format(V1, ...) | Formatieren | `...` (Backticks) | repr(...) | Datenrepräsentation +-------------------------------+------------------------------+ | long 2147483648L | int 2147483648 | Typ | 0123 | 0o123 (oktal) | Num. Konstante | | 0b123 (binär) | " " | sys.maxint | sys.maxsize | " " | 12345L (long-Zahl) | 12345 (beliebig lang) | Typ | 5 / 4 (Ganzahldivision) | 5 // 4 (Ganzzahldivision) | Division | --- | 5 / 4 (Fliesskommadiv.) | " | 5.0 / 4 (Fliesskommadiv.) | 5.0 / 4 (Fliesskommadiv.) | " | 5 / 4.0 (Fliesskommadiv.) | 5 / 4.0 (Fliesskommadiv.) | " | 5.0 / 4.0 (Fliesskommadiv.) | 5.0 / 4.0 (Fliesskommadiv.) | " | != <> | != | Ungleich +-------------------------------+------------------------------+ | int | bool | Typ Boolean | 1 | True | Wert "wahr" | 0 | False | Wert "falsch" +-------------------------------+------------------------------+ | xrange() | range() | Umbenennung | os.getcwdu() | os.getcwd() | " | import Tkinter | import tkinter | " | intern() | sys.intern() | " | for X in FILE.xreadlines(): | for X in FILE: | " +-------------------------------+------------------------------+ | L = list(SEQ); L.sort() | L = sorted(SEQ) | Sortieren +-------------------------------+------------------------------+ | DICT.has_key(KEY) | KEY in DICT | Dictionary | DICT.iteritems() | DICT.items() | " | .iterkeys() | .keys() | " | .itervalues() | .values() | " | .viewitems() | .items() | " | .viewkeys() | .keys() | " | .viewvalues() | .values() | " +-------------------------------+------------------------------+ | type(X) == CLASS | isinstance(X, CLASS) | Typvergleich | type(X) is CLASS | isinstance(X, CLASS) | " +-------------------------------+------------------------------+ | except X, T | except X as T | Ausnahmebehandlung | raise Exception, "String" | raise Exception("String") | " | raise Exc, "Str", Traceback | raise E(S).with_traceback(T) | " | StandardError | Exception | " +-------------------------------+------------------------------+ | exec CODE (Statement) | exec(CODE) (Funktion) | | execfile(FILE) | with open(FILE) as fh: | | | exec(fh.read()) | | sys.exc_value/type/traceback | sys.exc_info() (-> Tupel) | exc=Exception +-------------------------------+------------------------------+ Konvertierungs-Programm 2to3 --help ----------------------------------- Usage: 2to3 [options] file|dir ... Options: -h, --help Show this help message and exit -d, --doctests_only Fix up doctests only -f FIX, --fix=FIX Each FIX specifies a transformation; default: all -j PROCESSES, --processes=PROCESSES Run 2to3 concurrently -x NOFIX, --nofix=NOFIX Prevent a transformation from being run -l, --list-fixes List available transformations -p, --print-function Modify the grammar so that print() is a function -v, --verbose More verbose logging --no-diffs Don't show diffs of the refactoring -w, --write Write back modified files -n, --nobackups Don't write backups for modified files -o OUTPUT_DIR, --output-dir=OUTPUT_DIR Put output files in this directory instead of overwriting the input files. Requires -n. -W, --write-unchanged-files Also write files even if no changes were required (useful with --output-dir); implies -w. --add-suffix=ADD_SUFFIX Append this string to all output filenames. Requires -n if non-empty. ex: --add-suffix='3' will generate .py3 files. Korrekturen von 2to3 --list-fixes --------------------------------- Available transformations for the -f/--fix option: apply basestring buffer callable dict except exec execfile exitfunc filter funcattrs future getcwdu has_key idioms import imports imports2 input intern isinstance itertools itertools_imports long map metaclass methodattrs ne next nonzero numliterals operator paren print raise raw_input reduce renames repr set_literal standarderror sys_exc throw tuple_params types unicode urllib ws_comma xrange xreadlines zip Konvertierungstool "2to3" und Dateien ------------------------------------- /usr/bin/2to3 /usr/bin/2to3-2.7 /usr/bin/2to3-3.2 /usr/share/doc/python2.7/examples/Tools/scripts/2to3 /usr/share/doc/python2.7/html/_sources/library/2to3.txt /usr/share/doc/python2.7/html/library/2to3.html /usr/share/doc/python3.2/examples/scripts/2to3 /usr/share/doc/python3.2/html/_sources/library/2to3.txt /usr/share/doc/python3.2/html/library/2to3.html /usr/share/man/man1/2to3-2.7.1.gz /usr/share/man/man1/2to3-3.2.1.gz /usr/share/man/man1/2to3.1.gz