web-dev-qa-db-fra.com

Python initialise plusieurs variables à la même valeur initiale

J'ai parcouru ces questions,

  1. 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
  2. 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?

14
Rivadiz

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.
28
Shan

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 = {}
21
Aske Doerge

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.

9
DasFranck

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

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?

0
Stan