[Python] So legen Sie Variablennamen dynamisch fest und vergleichen die Geschwindigkeit

Nachtrag

Es wurde darauf hingewiesen, dass "local ()" nicht normal in einer Funktion verwendet werden kann (das offizielle Dokument besagt sogar, dass es nicht verwendet werden sollte). Seien Sie vorsichtig, wenn Sie es verwenden.

Einführung

Ich glaube nicht, dass es viele gibt, aber es gibt Zeiten, in denen Sie Variablennamen dynamisch festlegen möchten, und manchmal auch nicht. Deshalb habe ich versucht, herauszufinden, wie das geht. (Wenn Sie beispielsweise Daten aus einer externen Datei lesen und den Dateinamen als Variablennamen verwenden möchten?)

Ich habe 2 (+ α) Wege gefunden, daher möchte ich als Einführung die Geschwindigkeiten vergleichen.

Geschwindigkeitsvergleichsregeln und Vorbereitung

Regel -Messen mit dem Befehl %% timeit auf dem Jupyter Notebook.

** Vorbereitung ** Bereiten Sie Variablennamen im Voraus vor, um die Messung nicht zu beeinträchtigen.


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

Methode 1 Verwenden Sie exec ()

Die gebräuchlichste Methode.

%%timeit

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

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

Methode 2 Verwenden Sie "local ()" oder "globals ()"

local () und globals () werden als lokale Variablen und Wörterbücher erkannt, die globale Variablen verwalten (es tut mir leid, wenn sie unterschiedlich sind). Wie beim normalen Wörterbuchtyp können Sie den Indexer oder .get () verwenden, um den Wert abzurufen, und .update () zum Aktualisieren verwenden.

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

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

Ändern Sie die Methode ein wenig

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

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

Zusammenfassung

Mit dem exec () Verhältnis, ・ Exec (): 1x ・ Locals (). Update (): ** 53 mal ** ・ Locals () []: *** 83 mal *** Ich konnte es so schnell wie möglich definieren.

** Fazit **

`local () (oder globals ())` ist schnell.

Recommended Posts

[Python] So legen Sie Variablennamen dynamisch fest und vergleichen die Geschwindigkeit
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
So beschleunigen Sie Python-Berechnungen
So verpacken und verteilen Sie Python-Skripte
Dynamisches Definieren von Variablen in Python
So installieren und verwenden Sie pandas_datareader [Python]
Python: Verwendung von Einheimischen () und Globalen ()
So füllen Sie mit Python dynamisch Nullen aus
[Python] Berechnen von MAE und RMSE
Verwendung von Python zip und Aufzählung
Verwendung ist und == in Python
So generieren Sie eine Sequenz in Python und C ++
Einbetten von Variablen in Python-Strings
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
[Python] Verwendung von Hash-Funktion und Taple.
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
Geschwindigkeitsvergleich zwischen inkrementierender Zählvariable und Aufzählung
So installieren Sie Python
So installieren Sie Python
[Einführung in die Udemy Python3 + -Anwendung] 35. Vergleichsoperatoren und logische Operatoren
So erhalten Sie den Variablennamen selbst in Python
[Python] [Django] Verwendung des Auswahlfelds und Hinzufügen von Optionen
So richten Sie eine Python-Umgebung mit pyenv ein
Experiment zum Vergleich der Schreibgeschwindigkeit von Dateien zwischen Python 2.7.9 und Pypy 2.5.0
[Python] So sortieren Sie Diktate in Listen und Instanzen in Listen
[Blender] So legen Sie die Auswahlelemente von EnumProperty dynamisch fest
[Python] So teilen und modularisieren Sie Dateien (einfach, Beispiel)
[Python] So erstellen Sie eine Korrelationsmatrix und eine Heatmap
[Einführung in die Udemy Python3 + -Anwendung] 30. Verwendung des Sets
[Arbeitseffizienz] So ändern Sie Dateinamen im Stapel mit Python
Python # So überprüfen Sie Typ und Typ für Super-Anfänger
So richten Sie die Cython-Umgebung ein und kompilieren sie
Verwendung für Python-Stapel und -Warteschlangen (Geschwindigkeitsvergleich jeder Datenstruktur)
[Neueste Version 2020.8] So installieren Sie Python
So installieren Sie Python [Windows]
python3: Verwendung der Flasche (2)
Geschwindigkeitsvergleich von Python, Java, C ++
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
[Python] Verwendung von Liste 1
So aktualisieren Sie Pythons Tkinter auf 8.6
Herstellen einer Verbindung zu verschiedenen DBs über Python (PEP 249) und SQL Alchemy
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
So lösen Sie Konflikte mit variablen Bereichen zwischen Jinja2 und AngularJS
Wie benutzt man Python Argparse?
TensorFlow-Lernmethode für Profis der freien Künste und Python-Anfänger
[Python] Zusammenfassung der Verwendung von Split- und Join-Funktionen
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
Wie man Youtube in MP3 konvertiert und es super sicher herunterlädt [Python]
So führen Sie Notepad ++ Python aus
Wie man mit Pythons Selen in Sekundenschnelle kratzt
So ändern Sie die Python-Version
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
Wie man in Python entwickelt
Python 3 Sortier- und Vergleichsfunktionen
[Python] Wie man Skalar beurteilt
Ausführen externer Shell-Skripte und -Befehle in Python
[Python] Verwendung von input ()