J'ai parcouru ces questions,
- Python attribuant plusieurs variables à la même valeur? Comportement de liste
concernant les tuples, je veux juste que les variables puissent être une chaîne, un entier ou un dictionnaire- manière plus élégante de déclarer plusieurs variables en même temps
La question a quelque chose que je veux demander, mais la réponse acceptée est beaucoup plus complexe
donc ce que j'essaie de réaliser,
J'ai ces variables déclarées et je veux réduire ces déclarations à moins de ligne de code que possible.
details = None
product_base = None
product_identity = None
category_string = None
store_id = None
image_hash = None
image_link_mask = None
results = None
abort = False
data = {}
Quel est le plus simple, facile à entretenir?
Je suis d'accord avec les autres réponses, mais je voudrais expliquer le point important ici.
Aucun l'objet est un objet singleton. Combien de fois vous attribuez un objet Aucun à une variable, le même objet est utilisé. Alors
x = None
y = None
est égal à
x = y = None
mais vous ne devriez pas faire la même chose avec un autre objet en python. Par exemple,
x = {} # each time a dict object is created
y = {}
n'est pas égal à
x = y = {} # same dict object assigned to x ,y. We should not do this.
Tout d'abord, je vous conseillerais de ne pas le faire. C'est illisible et non Pythonique. Cependant, vous pouvez réduire le nombre de lignes avec quelque chose comme:
details, product_base, product_identity, category_string, store_id, image_hash, image_link_mask, results = [None] * 8
abort = False
data = {}
details, producy_base, product_identity, category_string, store_id, image_hash, image_link_mask, results = None, None, None, None, None, None, None, None; abort = False; data = {}
Voilà comment je fais.
J'ai une fonction lambda sur une ligne que j'utilise qui m'aide avec ça.
nones = lambda n: [None for _ in range(n)]
v, w, x, y, z = nones(5)
Le lambda est la même chose que cela.
def nones(n):
return [None for _ in range(n)]
Cela ne répond pas directement à la question, mais c'est lié - j'utilise une instance d'une classe vide pour regrouper des attributs similaires, donc je n'ai pas à encombrer mon init méthode en les listant tous.
class Empty:
pass
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.w = Empty() # widgets
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.w.entry = tk.Entry(self, bg="orange", fg="black", font=FONT)
Quelle est la différence entre SimpleNamespace et la définition de classe vide?