Zusammenfassung der Punkte, die beim Schreiben eines Programms zu beachten sind, das unter Python 2.5 ausgeführt wird

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).

Modul

Informationen zu Modulen und alternativen Funktionen, die in Python 2.5 nicht verfügbar sind.

String-Modul

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.

Gegenmaßnahmen

Verwenden Sie die alte Formatierungsmethode.

py:e.g.


message = "hogehoge %d %s" % (123, "test")

Argparse-Modul

15.4. argparse — Parser for command-line options, arguments and sub-commands — Python 2.7.11 documentation

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.

Gegenmaßnahmen

Verwenden Sie das Optparse-Modul

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 das argparse-Paket

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.

Multiprozessor-Modul

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.

Gegenmaßnahmen

Gewindemodul verwenden

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.

Installieren Sie das Multiprozessor-Paket

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

JSON-Modul

18.2. json — JSON encoder and decoder — Python 2.7.11 documentation

New in version 2.6.

Gegenmaßnahmen

Installieren Sie das simplejson-Paket

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.

itertools-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.

Gegenmaßnahmen

Keiner. Ist dies der einzige Weg aufzugeben?

Sammlungsmodul

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
>>>

Gegenmaßnahmen

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?

Was ist 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?

Vermeiden Sie die Verwendung dieser Instanz

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

Use duck-typing instead of Mapping for recursive settings updating. · django-nonrel/django-dbindexer@d11bdc3

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.

Integrierte Python-Funktion

mit Schlüsselwort

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

Gegenmaßnahmen

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

als Schlüsselwort

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

Gegenmaßnahmen

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.

Schreiben der Ausnahmebehandlung zur Aufrechterhaltung der Kompatibilität zwischen Python 2.5 und Python 3 --vmmhypervisor

Recommended Posts

Zusammenfassung der Punkte, die beim Schreiben eines Programms zu beachten sind, das unter Python 2.5 ausgeführt wird
Beim Schreiben eines Programms in Python
Dinge, die Sie bei der Entwicklung von Crawlern in Python beachten sollten
Dinge, die Sie beim Kopieren von Python-Listen beachten sollten
Dinge, die Sie bei der Verarbeitung von Zeichenfolgen in Python2 beachten sollten
Dinge, die Sie bei der Verarbeitung von Zeichenfolgen in Python 3 beachten sollten
Vorsichtsmaßnahmen bei der Verwendung von Python mit AtCoder
Dinge, die Sie bei der Verwendung von CGI mit Python beachten sollten.
Einfach! Implementieren Sie einen Twitter-Bot, der auf Heroku in Python ausgeführt wird
Beachten Sie Folgendes, wenn Sie Keras auf Ihrem Mac bereitstellen
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
Hier finden Sie eine Zusammenfassung der Dinge, die beim Umgang mit komplexen Zahlen in Python hilfreich sein können
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ein Programm, das doppelte Anweisungen in Python entfernt
Zusammenfassung der Verwendung von MNIST mit Python
[Anfänger] Was passiert, wenn ich ein Programm schreibe, das in Python auf PHP läuft?
Dinge, die Sie bei der Verwendung von Python beachten sollten, wenn Sie MATLAB verwenden
Dinge, die Sie bei der Stapelvorhersage mit der GCP ML Engine beachten sollten
[Python] Ein Programm, das die Anzahl der Täler zählt
Zusammenfassung der Tools, die zum Analysieren von Daten in Python benötigt werden
Ein Memorandum beim Schreiben von experimentellem Code ~ Anmelden in Python
Beachten Sie beim Initialisieren einer Liste in Python
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Shell-Programm, das in Vielfachen von 3 aho wird
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Eine Geschichte, die beim Versuch, die Python-Version mit GCE zu aktualisieren, hängen blieb
[Python] Ein Programm, das die kürzeste Anzahl von Schritten in einem Spiel findet, das Wolken überquert
[Einführung in Python] Zusammenfassung der Funktionen und Methoden, die häufig in Python vorkommen [Problemformat]
Beachten Sie Folgendes, wenn Sie automatisierte Tools für die Werkstatt in Python erstellen
Eine kleine Geschichte, die beim Schreiben von Twilio-Anwendungen mit Python auf AWS Lambda süchtig macht
Python-Programm von "Buch, das schwieriges Programmieren leicht lehrt"
Ein Allzweckprogramm, das Linux-Befehlszeichenfolgen mit Python formatiert
Python3-Verarbeitung, die in Paiza verwendbar zu sein scheint
Ein Programm, das die für iOS-App-Symbole in Python erforderliche Bildgröße automatisch ändert
Verwenden Sie ein Makro, das beim Speichern von Python mit vscode ausgeführt wird
Ich habe in Python ein Programm erstellt, das die 1-Minuten-Daten von FX auf eine beliebige Zeit (1 Stunde usw.) ändert.
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
[GCP] Ein Memorandum zum Ausführen eines Python-Programms mit Cloud-Funktionen
Praktische Schreibmethode beim kontinuierlichen Anhängen an die Liste in Python
Slack-Benachrichtigung, wenn ein bestimmtes Wort auf Twitter mit Heroku mit Python gemurmelt wird
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Ein Memo, dass ich eine Grundfunktion in Python mit Wiederholung geschrieben habe
Eine Reihe von Skriptdateien, die Wordcloud mit Python3 ausführen
Wenn Sie einen UNIX-Befehl in Python ausführen möchten
Eine Geschichte, die ich machen wollte, als ich eine Liste von Lernsitzungen mit Python bekam
[Python3] Liste der Websites, auf die ich beim Starten von Python verwiesen habe
Ich habe eine Klasse geschrieben, die das Schreiben erleichtert, indem ich die Teiltexte spezifiziere, wenn ich Mecab mit Python verwende
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
[Unterprozess] Wenn Sie ein anderes Python-Programm in Python-Code ausführen möchten
Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
So bestimmen Sie die Existenz eines Selenelements in Python
Eine kurze Zusammenfassung von Graphviz in Python (nur für Mac erklärt)