Résumé des points à garder à l'esprit lors de l'écriture d'un programme qui s'exécute sur Python 2.5

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

module

À propos des modules et des fonctionnalités alternatives qui ne sont pas disponibles dans Python 2.5.

module de chaîne

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.

Contre-mesures

Utilisez l'ancienne méthode de formatage.

py:e.g.


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

module argparse

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.

Contre-mesures

Utilisez le module optparse

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 le package argparse

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.

module de multitraitement

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.

Contre-mesures

Utiliser le module de filetage

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.

Installez le package multitraitement

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

module json

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

New in version 2.6.

Contre-mesures

Installez le package simplejson

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.

module itertools

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.

Contre-mesures

Aucun. Est-ce la seule façon d'abandonner?

module de collections

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

Contre-mesures

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?

Qu'est-ce que 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?

Évitez d'utiliser une instance

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

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

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.

Fonction intégrée Python

avec mot-clé

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

Contre-mesures

É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

comme mot-clé

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

Contre-mesures

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 ʻimportetwith` 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.

Comment écrire la gestion des exceptions pour la compatibilité entre Python 2.5 et Python 3 --vmmhypervisor

Recommended Posts

Résumé des points à garder à l'esprit lors de l'écriture d'un programme qui s'exécute sur Python 2.5
Lors de l'écriture d'un programme en Python
Points à garder à l'esprit lors du développement d'un robot d'exploration en Python
Points à garder à l'esprit lors de la copie de listes Python
Points à garder à l'esprit lors du traitement des chaînes en Python2
Points à garder à l'esprit lors du traitement des chaînes en Python 3
Précautions lors de l'utilisation de Python avec AtCoder
Choses à garder à l'esprit lors de l'utilisation de cgi avec python.
Facile! Implémenter un bot Twitter qui s'exécute sur Heroku en Python
Points à garder à l'esprit lors du déploiement de Keras sur votre Mac
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
Voici un résumé des choses qui pourraient être utiles pour traiter des nombres complexes en Python
[Python] Un programme qui calcule le nombre de chaussettes jumelées
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Un programme qui supprime les instructions en double en Python
Résumé de l'utilisation de MNIST avec Python
[Débutant] Que se passe-t-il si j'écris un programme qui s'exécute sur php en Python?
Points à garder à l'esprit lors de l'utilisation de Python pour ceux qui utilisent MATLAB
Points à garder à l'esprit lors de la prédiction par lots avec GCP ML Engine
[Python] Un programme qui compte le nombre de vallées
Résumé des outils nécessaires pour analyser les données en Python
Un mémorandum lors de l'écriture de code expérimental ~ Se connecter en python
Choses à noter lors de l'initialisation d'une liste en Python
Que contient cette variable (lorsque le script Python est en cours d'exécution)
Programme Shell qui devient aho par multiples de 3
[Python] Un programme qui compare les positions des kangourous.
Une histoire bloquée lors de la tentative de mise à niveau de la version Python avec GCE
[Python] Un programme qui trouve le nombre d'étapes le plus court dans un jeu qui traverse les nuages
[Introduction à Python] Résumé des fonctions et méthodes qui apparaissent fréquemment en Python [Format du problème]
Points à garder à l'esprit lors de la création d'outils automatisés pour l'atelier en Python
Une petite histoire à savoir comme un point addictif lors de l'écriture d'applications Twilio à l'aide de Python sur AWS Lambda
Programme Python du "Livre qui enseigne facilement la programmation difficile"
Un programme polyvalent qui formate les chaînes de commande Linux avec python
traitement python3 qui semble utilisable dans paiza
Un programme qui redimensionne automatiquement la taille d'image requise pour les icônes d'application iOS en Python
Utilisez une macro qui s'exécute lors de l'enregistrement de python avec vscode
J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.
J'ai essayé "un programme qui supprime les déclarations en double en Python"
Comment développer dans un environnement virtuel Python [Memo]
[GCP] Un mémorandum lors de l'exécution d'un programme Python avec Cloud Functions
Méthode d'écriture pratique lors de l'ajout continu à la liste en Python
Notification Slack lorsqu'un mot spécifique est murmuré sur Twitter en utilisant Heroku avec python
Comment obtenir une liste d'exceptions intégrées pour python
Un mémo que j'ai écrit une fonction de base en Python en utilisant la récurrence
Un ensemble de fichiers de script qui font wordcloud avec Python3
Lorsque vous souhaitez lancer une commande UNIX sur Python
Une histoire que je voulais faire quand j'ai eu une liste de sessions d'étude avec Python
[Python3] Liste des sites auxquels j'ai fait référence lorsque j'ai lancé Python
J'ai écrit une classe qui facilite l'écriture en spécifiant les paroles de la partie lors de l'utilisation de Mecab avec python
[Python] Un programme pour trouver le nombre de pommes et d'oranges qui peuvent être récoltées
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
Comment déterminer l'existence d'un élément sélénium en Python
Un bref résumé de Graphviz en python (expliqué uniquement pour mac)