Eine Zusammenfassung der Punkte, die beim Erstellen eines Programms zu beachten sind, das in der Python 2.5-Umgebung ausgeführt wird. Hauptsächlich über Funktionen, die in Python 2.5 nicht verwendet werden können (integrierte Modulfunktionen) und Gegenmaßnahmen (alternative Funktionen).
Informationen zu Modulen und alternativen Funktionen, die in Python 2.5 nicht verfügbar sind.
Das Zeichenfolgenmodul selbst kann in 2.5 verwendet werden, die Klasse string.Formatter kann jedoch nicht verwendet werden.
7.1. string — Common string operations — Python 2.7.11 documentation
7.1.2. String Formatting
New in version 2.6.
message = "<format>".format(<parames>)
Sie können die Formatierungsfunktion nicht so aufrufen.
Verwenden Sie die alte Formatierungsmethode.
py:e.g.
message = "hogehoge %d %s" % (123, "test")
New in version 2.7.
The argparse module makes it easy to write user-friendly command-line interfaces. The program defines what arguments it requires, and argparse will figure out how to parse those out of sys.argv. The argparse module also automatically generates help and usage messages and issues errors when users give the program invalid arguments.
15.5. optparse — Parser for command line options — Python 2.7.11 documentation
New in version 2.3.
optparse is a more convenient, flexible, and powerful library for parsing command-line options than the old getopt module. optparse uses a more declarative style of command-line parsing: you create an instance of OptionParser, populate it with options, and parse the command line. optparse allows users to specify options in the conventional GNU/POSIX syntax, and additionally generates usage and help messages for you.
optparse ist standardmäßig in Python 2.5 enthalten. Schwer zu bedienen im Vergleich zu Argparse. Der Unterschied zwischen Argparse und Optparse wird unten detailliert beschrieben.
argparse vs. optparse — argparse v1.1 documentation
Installieren Sie argparse, da es sich um ein separates Paket handelt. https://pypi.python.org/pypi/argparse
Compatibility
argparse should work on Python >= 2.3, it was tested on:
- 2.3, 2.4, 2.5, 2.6 and 2.7
- 3.1, 3.2, 3.3, 3.4
Das argparse-Paket selbst unterstützt auch Python 2.5.
16.6. multiprocessing — Process-based “threading” interface — Python 2.7.11 documentation
New in version 2.6.
multiprocessing is a package that supports spawning processes using an API similar to the threading module. The multiprocessing package offers both local and remote concurrency, effectively side-stepping the Global Interpreter Lock by using subprocesses instead of threads. Due to this, the multiprocessing module allows the programmer to fully leverage multiple processors on a given machine. It runs on both Unix and Windows.
16.2. threading — Higher-level threading interface — Python 2.7.11 documentation
This module constructs higher-level threading interfaces on top of the lower level thread module. See also the mutex and Queue modules.
Wenn es sich um ein E / A-intensives Programm handelt, ist es effektiv, es auch beim Threading mit mehreren Threads zu versehen. Bei CPU-intensiven Programmen ist Threading hingegen kein Ersatz für Multiprocessing. Bei der Mehrfachverarbeitung wird die CPU-Last beim Multithreading auf mehrere Kerne verteilt. Beim Einfädeln konzentriert sich die Last jedoch auf einen Kern, sodass der Effekt selbst bei Multithreading gering ist.
Es gibt ein Backport-Modul für Python 2.5.
https://pypi.python.org/pypi/multiprocessing/
Backport of the multiprocessing package to Python 2.4 and 2.5
18.2. json — JSON encoder and decoder — Python 2.7.11 documentation
New in version 2.6.
https://pypi.python.org/pypi/simplejson/
simplejson is a simple, fast, complete, correct and extensible JSON http://json.org encoder and decoder for Python 2.5+ and Python 3.3+. It is pure Python code with no dependencies, but includes an optional C extension for a serious speed boost.
Die Schnittstelle von simplejson ist dieselbe wie das json-Modul.
Obwohl itertools selbst in Python 2.5 verwendet werden kann, wurden seit 2.6 einige Funktionen hinzugefügt.
9.7. itertools — Functions creating iterators for efficient looping — Python 2.7.11 documentation
New in version 2.3.
itertools.permutations(iterable[, r]) Return successive r length permutations of elements in the iterable. New in version 2.6.
itertools.product(*iterables[, repeat]) Cartesian product of input iterables. New in version 2.6.
Keiner. Ist dies der einzige Weg aufzugeben?
collection.Mapping
kann nicht verwendet werden. Selbst wenn Sie sich die offizielle Seite ansehen, scheint es, dass Sie sie bei 2,5 ...
8.3. collections — High-performance container datatypes — Python 2.7.11 documentation
New in version 2.4.
Das Ausführen von "isinstance ({}, collection.Mapping)" in Python 2.5 schlägt fehl. Es ist erfolgreich in Python 2.7.
Python2.5
# python
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import collections
>>> isinstance({}, collections.Mapping)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Mapping'
>>>
Python2.7
# python
Python 2.7.3 (default, Jan 2 2013, 16:53:07)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import collections
>>> isinstance({}, collections.Mapping)
True
>>>
Nur wenn isinstance verwendet wird, kann dies durch Setzen von isinstance ({}, dict) oder Nichtverwenden von isinstance behandelt werden. Wenn Sie eine Klasse erstellen möchten, die Sammlungen erbt. Mapping, geben Sie auf.
Die folgenden Maßnahmen beziehen sich auf die Instanz. Es gibt einen Beitrag von jemandem, der mit diesem Problem konfrontiert war.
google app engine - Python 2.5 version of this method - Stack Overflow
I have the below function running fine on python 2.6, but appengine's production environment is 2.5 and it blows up on: AttributeError: 'module' object has no attribute 'Mapping' Does anyone have a solution for 2.5?
Verwenden Sie in der Antwort "is instance (val, dict)". Und aufhören zu benutzen ist Instanz. Es gibt eine Antwort.
- Try to stop using isinstance! – David Heffernan Feb 20 '11 at 15:59
- Or get rid of isinstance calls completely, since they are the enemy of duck typing. – Xiong Chiamiov Feb 20 '11 at 17:53
Was bedeutet der Kommentar, der eine Instanz ist, ein Feind der Dock-Eingabe?
Matsumoto Naoden-Programmierung Okite-Matsumoto Naoden-Programmierung Okite 4. (3): ITpro
Duck Typing berücksichtigt nicht, zu welcher Klasse ein Objekt gehört, sondern nur, wie es sich verhält (welche Methoden es hat). Duck Typing wurde von Dave Thomas geprägt, der als "Master Programmer" bekannt ist.
Wie man tatsächlich Duck Typing macht
Was sind die Richtlinien für das Üben von Duck Typing in einer dynamischen Sprache? Es gibt nur ein Grundprinzip, zumindest ist dies alles, woran Sie sich erinnern müssen.
● Vermeiden Sie explizite Typprüfungen
Ist die Instanz dagegen, nicht wahr?
Für welche Art von Code soll ich schreiben? Als ich nach einem konkreten Beispiel suchte, fand ich es.
Error importing 'Mapping' with Python 2.5 · Issue #8 · django-nonrel/django-dbindexer
Die Beurteilung erfolgt durch try - except anstelle von isinstance.
six Verwenden Sie 1.8.0 anstelle der neuesten Version. Weitere Informationen finden Sie unter Hinweise zur Verwendung von sechs mit Python 2.5 - Qiita.
Voluptuous Siehe Voluptuous mit Python 2.5-Qiita installieren.
Code wie ↓ führt zu einem Fehler, wenn er in Python 2.5 normal ausgeführt wird.
with_sample.py(NG Beispiel)
with open("hoge", "w") as fp:
fp.write("foo")
NG Beispielausgabe
# python --version
Python 2.5.2
# python with_sample.py
with_sample.py:1: Warning: 'with' will become a reserved keyword in Python 2.6
File "with_sample.py", line 1
with open("hoge", "w") as fp:
^
SyntaxError: invalid syntax
Schreiben Sie zu Beginn des Programms "from future import with_statement".
with_sample.py
from __future__ import with_statement
with open("hoge", "w") as fp:
fp.write("foo\n")
# python with_sample.py
# cat hoge
foo
Erfolg.
from __future__ import <feature>
dient zur Verwendung der Funktionen, die in der vorherigen Version in der vorherigen Version standardisiert wurden. Unten ist die Liste.
28.11. future — Future statement definitions — Python 2.7.11 documentation
feature | optional in | mandatory in | effect |
---|---|---|---|
nested_scopes | 2.1.0b1 | 2.2 | PEP 227: Statically Nested Scopes |
generators | 2.2.0a1 | 2.3 | PEP 255: Simple Generators |
division | 2.2.0a2 | 3.0 | PEP 238: Changing the Division Operator |
absolute_import | 2.5.0a1 | 3.0 | PEP 328: Imports: Multi-Line and Absolute/Relative |
with_statement | 2.5.0a1 | 2.6 | PEP 343: The “with” Statement |
print_function | 2.6.0a2 | 3.0 | PEP 3105: Make print a function |
unicode_literals | 2.6.0a2 | 3.0 | PEP 3112: Bytes literals in Python 3000 |
Die Verwendung wie in außer schlägt fehl.
except_sample.py(NG Beispiel)
try:
raise ValueError("hoge")
except ValueError as e:
print e
NG Beispielausgabe
# python --version
Python 2.5.2
# python except_sample.py
except_sample.py:3: Warning: 'as' will become a reserved keyword in Python 2.6
File "except_sample.py", line 3
except ValueError as e:
^
SyntaxError: invalid syntax
Das gleiche Programm funktioniert unter Python 2.6 und höher.
python2.7
# python --version
Python 2.7.3
# python except_sample.py
hoge
Ersetzen Sie "as" durch ",".
except_sample.py
try:
raise ValueError("hoge")
except ValueError, e:
print e
# python --version
Python 2.5.2
# python except_sample.py
hoge
Übrigens können die Schlüsselwörter "import" und "with" auch in Python 2.5 mit "as" verwendet werden.
as_sample.py
from __future__ import with_statement
import simplejson as json
try:
raise ValueError("hoge")
except ValueError, e:
print e
with open("hoge", "r") as fp:
print fp.read()
# python --version
Python 2.5.2
# python as_sample.py
hoge
foo
In diesem Fall funktioniert es jedoch nicht mit Python 3-Serien. Um die Kompatibilität mit Python 3 aufrechtzuerhalten, gehen Sie wie folgt vor.
Recommended Posts