Un résumé des points à garder à l'esprit lors de la création d'un programme qui s'exécute dans l'environnement Python 2.5. Principalement sur les fonctions qui ne peuvent pas être utilisées dans Python 2.5 (fonctions intégrées du module) et les contre-mesures (fonctions alternatives).
À propos des modules et des fonctionnalités alternatives qui ne sont pas disponibles dans Python 2.5.
Le module string lui-même peut être utilisé en 2.5, mais la classe string.Formatter ne peut pas être utilisée.
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>)
Vous ne pouvez pas appeler la fonction de format comme ceci.
Utilisez l'ancienne méthode de formatage.
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 est inclus dans Python 2.5 par défaut. Difficile à utiliser par rapport à argparse. La différence entre argparse et optparse est détaillée ci-dessous.
argparse vs. optparse — argparse v1.1 documentation
Installez argparse car il s'agit d'un package séparé. 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
Le package argparse lui-même prend également en charge 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.
S'il s'agit d'un programme intensif d'E / S, il est efficace de le rendre multithread même en threading. En revanche, pour les programmes gourmands en ressources processeur, le threading ne remplace pas le multitraitement. Avec le multitraitement, la charge du processeur est répartie sur plusieurs cœurs lorsqu'il est multithread. Cependant, avec le threading, la charge est concentrée sur un noyau, donc même s'il est multithread, l'effet est faible.
Il existe un module rétroporté pour 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.
L'interface de simplejson est la même que celle du module json.
Bien que itertools lui-même puisse être utilisé dans Python 2.5, certaines fonctions ont été ajoutées depuis 2.6.
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.
Aucun. Est-ce la seule façon d'abandonner?
collections.Mapping
ne peut pas être utilisé. Même si vous regardez la page officielle, il semble que vous puissiez l'utiliser à 2,5 ...
8.3. collections — High-performance container datatypes — Python 2.7.11 documentation
New in version 2.4.
L'exécution de ʻis instance ({}, collections.Mapping) `dans Python 2.5 échoue. Il réussit dans 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
>>>
Seulement lors de l'utilisation de is instance, il peut être géré en définissant ʻis instance ({}, dict) `ou en n'utilisant pas is instance. Si vous voulez créer une classe qui hérite des collections.Mapping, abandonnez.
Les mesures suivantes sont liées à cette instance. Il y a un message d'une personne qui a rencontré ce problème.
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?
Dans la réponse, utilisez ʻis instance (val, dict) `. Et arrêtez d'utiliser votre exemple. Il y a une réponse.
- 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
Que signifie le commentaire qui est une instance ennemie de la saisie de dock?
Programmation Matsumoto Naoden Okite-Matsumoto Naoden Programmation Okite 4th (3): ITpro
Duck Typing ne considère pas à quelle classe un objet appartient, mais seulement comment il se comporte (quelles méthodes il possède). Duck Typing a été inventé par Dave Thomas, connu comme le «maître programmeur».
Comment faire la frappe de canard
Alors, quelles sont les règles pour pratiquer le Duck Typing dans un langage dynamique? Il n'y a qu'un seul principe de base, au moins c'est tout ce dont vous devez vous souvenir.
● Évitez la vérification de type explicite
L'instance est contre cela, n'est-ce pas?
Pour quel type de code dois-je écrire? Quand j'ai cherché un exemple concret, je l'ai trouvé.
Error importing 'Mapping' with Python 2.5 · Issue #8 · django-nonrel/django-dbindexer
Le jugement se fait par essai - sauf au lieu d'une instance.
six Utilisez la 1.8.0 au lieu de la dernière version. Pour plus de détails, reportez-vous aux Notes sur l'utilisation de six avec Python 2.5 --Qiita.
Voluptuous Voir Installation de Voluptuous avec Python 2.5-Qiita.
Un code comme ↓ entraînera une erreur lorsqu'il est exécuté normalement en Python 2.5.
with_sample.py(Exemple NG)
with open("hoge", "w") as fp:
fp.write("foo")
Exemple de sortie NG
# 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
Écrivez from __future__ import with_statement
au début du programme.
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
Succès.
from __future__ import <feature>
est pour utiliser les fonctions standardisées dans la version précédente dans la version précédente. Voici la 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 |
Utiliser comme dans sauf échoue.
except_sample.py(Exemple NG)
try:
raise ValueError("hoge")
except ValueError as e:
print e
Exemple de sortie NG
# 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
Le même programme fonctionne sur Python 2.6 et supérieur.
python2.7
# python --version
Python 2.7.3
# python except_sample.py
hoge
Remplacez ʻas par
, `.
except_sample.py
try:
raise ValueError("hoge")
except ValueError, e:
print e
# python --version
Python 2.5.2
# python except_sample.py
hoge
En passant, les mots-clés ʻimportet
with` peuvent également être utilisés dans Python 2.5.
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
Cependant, si vous faites cela, cela ne fonctionnera pas sur la série Python 3. Pour maintenir la compatibilité avec Python 3, procédez comme suit.