Je lisais "Effective Python 2nd Edition" et j'ai résumé ce que j'ai recherché.
N'est-ce pas le cas lors de l'écriture de Python? j'ai
unpack.py
#C'est rassurant
x, y = point2d
#c'est...Est-ce en ordre?
weather, precipitation, temperature, humidity = \
get_meteorological_info(place, time)
print(weather)
print(precipitation)
print(temperature)
print(humidity)
En Python, vous pouvez créer librement des décompressions et des taples n'importe où, de sorte que la signification du code a tendance à être ambiguë. Dans cet exemple, l'ordre n'a pas de signification particulière. Afin d'améliorer cela, il semble bon de donner des restrictions appropriées. En Python, il peut être amélioré en utilisant une classe qui représente des données.
Il semble facile de comprendre si vous pouvez y accéder de cette manière.
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)
En renvoyant une instance de la classe, vous n'avez plus besoin de connaître la commande. Vous pouvez faire quelque chose de similaire avec dict
, mais je ne suis pas très satisfait des problèmes tels que la possibilité de fautes de frappe et la fonction de complétion de l'éditeur car la clé est str
etc.
Il existe plusieurs façons d'y parvenir.
Cela semble différent en termes d'implémentation, mais ils ont tous en commun de créer des classes. Personnellement, je recommande de descendre.
Si vous connaissez la classe, vous pouvez facilement la créer, donc je pense que c'est un avantage que tout le monde puisse la comprendre. J'ai écrit un exemple, mais l'inconvénient est que la description comme self.weather = wheather
devient redondante.
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
Cet article est détaillé, mais un bref résumé.
Je pense qu'il y a moins de redondance que lorsque j'ai dessiné la classe telle qu'elle est.
Il est recommandé de la définir comme une classe en utilisant typing
car la fonction de complétion de l'éditeur peut être utilisée.
Si vous souhaitez l'utiliser comme mutable, vous avez peut-être des problèmes. Je pense que c'est pour les petites données.
use_namedtuple.py
from collections import namedtuple
#La méthode de définition la plus simple
MeteologicalInfo = namedtuple(
"MeteologicalInfo",
[
"weather",
"precipitation",
"temperature",
"humidity"
]
)
#Peut également être défini avec un séparateur d'espace
MeteologicalInfo = namedtuple(
"MeteologicalInfo",
"weather precipitation temperature humidity"
)
#Vous pouvez définir la valeur par défaut
MeteologicalInfo.__new__.__defaults__ = ("sunny", 0.0, 25.0, 0.5)
from typing import NamedTuple
#Comment se définir en tant que classe
class MeteologicalInfo(NamedTuple):
weather : str
precipitation: float
temperature : float
humidity : float
#Vous pouvez également définir une valeur par défaut
class MeteologicalInfo(NamedTuple):
weather : str = "sunny"
precipitation: float = 0.0
temperature : float = 25.0
humidity : float = 0.5
https://qiita.com/tag1216/items/13b032348c893667862a Il était facile de comprendre comment l'utiliser. https://docs.python.org/ja/3.7/library/dataclasses.html Plus d'informations ici. Je vais le résumer facilement.
Je pense que c'est un avantage qu'il peut être utilisé à la fois comme mutable et immuable pour le tuple nommé. Un autre avantage est que vous pouvez utiliser des fonctions utiles telles que dataclasses.field. Cependant, comme il doit s'agir de Python 3.7 ou supérieur, il présente l'inconvénient de ne pas être utilisable en fonction du module ou de l'environnement que vous utilisez.
use_dataclass.py
from dataclasses import dataclass
#Vous pouvez utiliser la classe comme une classe de données à l'aide d'un décorateur
@dataclass
class MeteologicalInfo:
weather : str
precipitation: float
temperature : float
humidity : float
#Vous pouvez également définir la valeur par défaut
@dataclass
class MeteologicalInfo:
weather : str = "sunny"
precipitation: float = 0.0
temperature : float = 25.0
humidity : float = 0.5
Lorsque les données se compliquent ou que le nombre de variables augmente, vous pouvez rendre les données disjointes significatives en utilisant des classes, namedtuple, dataclass, etc. Si vous utilisez dict et list tels quels, il y aura de nombreuses incertitudes lorsque le programme deviendra volumineux et que la vitesse de développement ralentira, mais je pense que vous pouvez penser à la structure de données et à l'algorithme séparément dans une certaine mesure et réduire les erreurs. Je suis.