Ich las "Effective Python 2nd Edition" und fasste zusammen, wonach ich suchte.
Ist das nicht der Fall, wenn Sie Python schreiben? ich habe
unpack.py
#Das ist beruhigend
x, y = point2d
#das ist...Ist es in Ordnung?
weather, precipitation, temperature, humidity = \
get_meteorological_info(place, time)
print(weather)
print(precipitation)
print(temperature)
print(humidity)
In Python können Sie überall frei Entpackungen und Taples erstellen, sodass die Bedeutung des Codes in der Regel nicht eindeutig ist. In diesem Beispiel hat die Reihenfolge keine besondere Bedeutung. Um dies zu verbessern, erscheint es sinnvoll, entsprechende Einschränkungen festzulegen. In Python kann es durch Verwendung einer Klasse verbessert werden, die Daten darstellt.
Es scheint leicht zu verstehen, ob Sie so darauf zugreifen können.
no_unpack.py
info_meteo = get_meteorological_info(place, time)
print(info_meteo.weather)
print(info_meteo.precipitation)
print(info_meteo.temperature)
print(info_meteo.humidity)
Wenn Sie eine Instanz der Klasse zurückgeben, müssen Sie die Reihenfolge nicht mehr kennen. Sie können etwas Ähnliches mit dict
machen, aber ich bin nicht sehr zufrieden mit Problemen wie der Möglichkeit von Tippfehlern und der Vervollständigungsfunktion des Editors, da der Schlüssel str
usw. ist.
Es gibt verschiedene Möglichkeiten, dies zu erreichen.
In Bezug auf die Implementierung sieht es anders aus, aber alle haben gemeinsam, dass sie Klassen erstellen. Persönlich empfehle ich runter zu gehen.
Es ist einfach zu erstellen, wenn Sie die Klasse kennen. Ich denke, es ist ein Vorteil, dass jeder sie verstehen kann. Ich habe ein Beispiel geschrieben, aber der Nachteil ist, dass die Beschreibung wie "self.weather = wheather" überflüssig wird.
simple_class.py
class MeteologicalInfo:
def __init__(
self,
weather: str,
precipitation: float,
temperature: float,
humidity: float):
self.weather = weather
self.precipitation = precipitation
self.temperature = temperature
self.humidity = humidity
https://qiita.com/Seny/items/add4d03876f505442136 Dieser Artikel ist detailliert, aber eine kurze Zusammenfassung. Ich denke, es gibt weniger Redundanz als beim Zeichnen der Klasse. Es wird empfohlen, es als Klasse mit "Typing" zu definieren, da die Vervollständigungsfunktion des Editors verwendet werden kann. Wenn Sie es als veränderbar verwenden möchten, sind Sie möglicherweise in Schwierigkeiten. Ich denke, es ist für kleine Daten.
use_namedtuple.py
from collections import namedtuple
#Die einfachste Definitionsmethode
MeteologicalInfo = namedtuple(
"MeteologicalInfo",
[
"weather",
"precipitation",
"temperature",
"humidity"
]
)
#Kann auch mit einem Leerzeichen definiert werden
MeteologicalInfo = namedtuple(
"MeteologicalInfo",
"weather precipitation temperature humidity"
)
#Sie können den Standardwert festlegen
MeteologicalInfo.__new__.__defaults__ = ("sunny", 0.0, 25.0, 0.5)
from typing import NamedTuple
#Wie man als Klasse definiert
class MeteologicalInfo(NamedTuple):
weather : str
precipitation: float
temperature : float
humidity : float
#Sie können auch einen Standardwert festlegen
class MeteologicalInfo(NamedTuple):
weather : str = "sunny"
precipitation: float = 0.0
temperature : float = 25.0
humidity : float = 0.5
https://qiita.com/tag1216/items/13b032348c893667862a Es war leicht zu verstehen, wie man das benutzt. https://docs.python.org/ja/3.7/library/dataclasses.html Weitere Informationen finden Sie hier. Ich werde es leicht zusammenfassen.
Ich denke, es ist ein Vorteil, dass es sowohl als veränderlich als auch als unveränderlich für benannte Tupel verwendet werden kann. Ein weiterer Vorteil ist, dass Sie nützliche Funktionen wie dataclasses.field verwenden können. Da es sich jedoch um Python 3.7 oder höher handeln muss, hat es den Nachteil, dass es je nach verwendetem Modul oder verwendeter Umgebung möglicherweise nicht verwendet werden kann.
use_dataclass.py
from dataclasses import dataclass
#Sie können die Klasse als Datenklasse verwenden, indem Sie einen Dekorator verwenden
@dataclass
class MeteologicalInfo:
weather : str
precipitation: float
temperature : float
humidity : float
#Sie können auch den Standardwert festlegen
@dataclass
class MeteologicalInfo:
weather : str = "sunny"
precipitation: float = 0.0
temperature : float = 25.0
humidity : float = 0.5
Wenn die Daten kompliziert werden oder die Anzahl der Variablen zunimmt, können Sie die nicht zusammenhängenden Daten mithilfe von Klassen, Namenstupeln, Datenklassen usw. aussagekräftig machen. Wenn Sie dict und list so verwenden, wie sie sind, gibt es viele Unsicherheiten, wenn das Programm groß wird und sich die Entwicklungsgeschwindigkeit verlangsamt. Ich denke jedoch, dass Sie die Datenstruktur und den Algorithmus in gewissem Maße separat betrachten und Fehler reduzieren können. Ich bin.