Python инициализирует несколько переменных с тем же начальным значением
Я рассмотрел эти вопросы,
- Python присваивает нескольким переменным одинаковое значение? поведение списка
связанные с кортежами, я хочу, чтобы просто переменные могли быть строкой, целым числом или словарем - Более элегантный способ объявления нескольких переменных одновременно
На вопрос есть что-то, что я хочу задать, но принятый ответ очень сложный
так что я пытаюсь достичь,
Я объявляю эти переменные, и я хочу уменьшить это объявление до меньшей длины кода.
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)