[Python] Comment définir des noms de variables dynamiquement et comparer la vitesse

Postscript

Il a été souligné que «locaux ()» ne peut pas être utilisé normalement dans une fonction (le document officiel précise même qu'il ne doit pas être utilisé). Soyez prudent lorsque vous l'utilisez.

introduction

Je ne pense pas qu'il y en ait beaucoup, mais il y a des moments où vous voulez définir des noms de variables de manière dynamique, et parfois vous ne le faites pas, alors j'ai essayé de savoir comment faire cela. (Par exemple, si vous souhaitez lire des données à partir d'un fichier externe et utiliser le nom de fichier comme nom de variable?)

J'ai trouvé 2 (+ α) façons, donc j'aimerais comparer les vitesses en guise d'introduction.

Règles de comparaison de vitesse et préparation

règle -Mesuré à l'aide de la commande %% timeit sur le bloc-notes Jupyter. -Utilisez 5 caractères d'alphabet inférieur aléatoires comme nom de variable. -Substituer une liste contenant des entiers de 0 à 9 comme valeurs. ・ Mesurez la moyenne de 1000 boucles.

** Préparation ** Préparez à l'avance les noms des variables afin de ne pas affecter la mesure.


import random

chrs = [chr(i) for i in range(ord('a'), ord('z')+1)]
names = [''.join(random.sample(chrs, 10)) for i in range(10)]

Méthode 1 Utilisez ʻexec () `

La méthode la plus courante.

%%timeit

for i in range(1000):
    exec(f'{names[i]} = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]')

résultat 20.7 ms ± 75.7 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

Méthode 2 Utilisez locals () ou globals ()

locals () et globals () sont reconnus comme des variables locales et des dictionnaires qui gèrent respectivement les variables globales (je suis désolé si elles sont différentes). Comme avec le type de dictionnaire normal, vous pouvez utiliser l'indexeur ou .get () pour obtenir la valeur, et utiliser .update () pour mettre à jour.

%%timeit
for i in range(1000):
    locals().update({f'{names[i]}':[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]})

résultat 386 µs ± 24.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Changer un peu la méthode

%%timeit
for i in range(1000):
    locals()[names[i]] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

résultat 248 µs ± 387 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Résumé

Rapport ʻExec () , ・ ʻExec () : 1x ・ Locals (). Update (): ** 53 fois ** ・ Locals () []: *** 83 fois *** J'ai pu le définir le plus rapidement possible.

** Conclusion **

`locals () (ou globals ())` est rapide.

Recommended Posts

[Python] Comment définir des noms de variables dynamiquement et comparer la vitesse
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Comment accélérer les calculs Python
Comment empaqueter et distribuer des scripts Python
Comment définir dynamiquement des variables en Python
Comment installer et utiliser pandas_datareader [Python]
python: Comment utiliser les locals () et globals ()
Comment remplir dynamiquement des zéros avec Python
[Python] Comment calculer MAE et RMSE
Comment utiliser le zip Python et énumérer
Comment utiliser is et == en Python
Comment générer une séquence en Python et C ++
Comment incorporer des variables dans des chaînes python
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
[Python] Comment utiliser la fonction de hachage et taple.
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comparaison de vitesse entre la variable de comptage incrémentielle et l'énumération
Comment installer Python
Comment installer python
[Introduction à l'application Udemy Python3 +] 35. Opérateurs de comparaison et opérateurs logiques
Comment obtenir le nom de la variable lui-même en python
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
Comment configurer un environnement Python à l'aide de pyenv
Expérience de comparaison de la vitesse d'écriture de fichier entre python 2.7.9 et pypy 2.5.0
[Python] Comment trier un dict dans une liste et une instance dans une liste
[Blender] Comment définir dynamiquement les sélections EnumProperty
[Python] Comment fractionner et modulariser des fichiers (simple, exemple)
[Python] Comment créer une matrice de corrélation et une carte thermique
[Introduction à Udemy Python3 + Application] 30. Comment utiliser l'ensemble
[Efficacité du travail] Comment changer les noms de fichiers par lots avec Python
Python # Comment vérifier le type et le type pour les super débutants
Comment configurer et compiler l'environnement Cython
Quoi utiliser pour les piles et les files d'attente Python (comparaison de vitesse de chaque structure de données)
[2020.8 dernière] Comment installer Python
Comment installer Python [Windows]
python3: Comment utiliser la bouteille (2)
Comparaison de vitesse de Python, Java, C ++
Comment échanger des éléments dans un tableau en Python et comment inverser un tableau.
[Python] Comment utiliser la liste 1
Comment mettre à jour Tkinter de Python vers la version 8.6
Comment se connecter à diverses bases de données à partir de Python (PEP 249) et SQL Alchemy
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Comment résoudre les conflits de portée variable entre Jinja2 et AngularJS
Comment utiliser Python Argparse
Méthode d'apprentissage TensorFlow pour les professionnels des arts libéraux et les débutants en Python
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Python: comment utiliser pydub
[Python] Comment utiliser checkio
Comment convertir Youtube en mp3 et le télécharger en toute sécurité [Python]
Comment exécuter Notepad ++ Python
Comment gratter en quelques secondes avec le sélénium de Python
Comment changer la version de Python
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Comment développer en Python
Fonctions de tri et de comparaison Python 3
[python] Comment juger scalaire
Comment exécuter des commandes et des scripts shell externes en python
[Python] Comment utiliser input ()