Python упростить конструкцию
Подскажите пожалуйста как можно упростить функцию для кода. Я всю голову уже сломал. Допустим, у меня есть класс с атрибутами:
self.count = 0
self.dount = 0
self.mount = 0
self.kount = 0
И есть например две функции одна прибавляет значения проходя по циклу, а другая отнимает:
for key, value in dicti.items():
if key == '+':
check_pl(value)
elif == '-':
check_ms(value)
def check_pl(value):
if value == 'ons':
self.count += 1
if value == 'ions':
self.dount += 1
if value == 'sions':
self.mount += 1
if value == 'visions':
self.kount += 1
def check_ms(value):
if value == 'ons':
self.count -= 1
if value == 'ions':
self.dount -= 1
if value == 'sions':
self.mount -= 1
if value == 'visions':
self.kount -= 1
Возможно ли упростить эту функцию, чтобы не было такой длинной портянки кода, потому что получается есть 2 функции эти почти одинаковые и куча переменных дублирующихся?
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Создаете словарь, например:
func_dict={'ons':self.count, 'ions':self.dount, 'sions':self.mount, 'visions':self.kount}
затем в функциях делаете
def check_pl(value):
func_dict[value]+=1
def check_ms(value):
func_dict[value]-=1
вообще, по-хорошему, нужно возвращать словарь в явном виде как-то так:
for key, value in dicti.items():
if key == '+':
func_dict = check_pl(value)
elif == '-':
func_dict = check_ms(value)
а далее
def check_pl(value, func_dict=func_dict):
func_dict[value]+=1
return func_dict
UPDATE
as per @Stanislav Volodarskiy:
очевидно, имеет смысл вообще избавиться от переменных, и просто хранить данные в словаре.