Python инициализирует несколько переменных с тем же начальным значением

Я рассмотрел эти вопросы,

  1. Python присваивает нескольким переменным одинаковое значение? поведение списка
    связанные с кортежами, я хочу, чтобы просто переменные могли быть строкой, целым числом или словарем
  2. Более элегантный способ объявления нескольких переменных одновременно
    На вопрос есть что-то, что я хочу задать, но принятый ответ очень сложный

так что я пытаюсь достичь,

Я объявляю эти переменные, и я хочу уменьшить это объявление до меньшей длины кода.

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 = {}

Что является самым простым и простым в обслуживании?

Ответы

Ответ 1

Я согласен с другими ответами, но хотел бы объяснить здесь важный момент.

Ни один объект не является одиночным объектом. Сколько раз вы назначаете объект None объекту переменной, тот же объект используется. Так

x = None
y = None

равно

x = y = None

но вы не должны делать то же самое с любым другим объектом в python. Например,

x = {}  # each time a dict object is created
y = {}

не равна

x = y = {}  # same dict object assigned to x ,y. We should not do this.

Ответ 2

Прежде всего, я бы посоветовал вам не делать этого. Он нечитабельный и непитонический. Однако вы можете уменьшить количество строк с чем-то вроде:

details, product_base, product_identity, category_string, store_id, image_hash, image_link_mask, results = [None] * 8
abort = False
data = {}

Ответ 3

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 = {}

Это как я.

Ответ 4

У меня есть однострочная лямбда-функция, которую я использую, что помогает мне в этом.

nones = lambda n: [None for _ in range(n)]
v, w, x, y, z = nones(5)

Лямбда - это то же самое, что и это.

def nones(n):
    return [None for _ in range(n)]

Ответ 5

Это не дает прямого ответа на вопрос, но оно связано - я использую экземпляр пустого класса для группировки похожих атрибутов, поэтому мне не нужно загромождать мой метод init, перечисляя их все.

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)

В чем разница между SimpleNamespace и пустым определением класса?

Ответ 6

Смесь предыдущих ответов:

def default(value, number):
    return [value] * number

v, w, x, y, z = default(20, 5)