Уведомления

Группа в Telegram: @pythonsu

#1 Июль 3, 2014 07:41:40

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

имена методов в виде строк и параметры к ним

доброе утро
как можно провернуть такую штуку?
есть список строк с названиями методов и передаваемых параметров пример:

self.list_meth = [
            ["key_img", 0, 4],
            ["key_empty_img", 0, 4],
            ["increase_seq", 0, 4],
            ["key_img", 5, 9],
            ["key_empty_img", 5, 9],
            ["increase_seq", 5, 9]
        ]
и есть метод который работает с этим списком:
    def create_seq(self):
        for meth, st, fin in self.list_meth:
            curr_list = getattr(self, meth)(st, fin)
            self.extend(curr_list)
вопрос в том, как распаковть список если параметров переменное колличество:
        self.list_meth = [
            ["key_img", 0, 4, True],
            ["key_empty_img", 0, 4, False, True],
            ["increase_seq", 0, 4],
            ["key_img", 5, 9],
            ["key_empty_img", 5, 9, True],
            ["increase_seq", 5, 9],
  
        ]
что бы потом сделать так -
curr_list = getattr(self, meth)(st, fin, args_list)
использую Python 2.7.3

Офлайн

#2 Июль 3, 2014 08:21:11

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

имена методов в виде строк и параметры к ним

функции, переменное число параметров. Первый элемент получаемого списка это имя функции = метода объекта, все остальное это список аргументов которых функция способна корректна принять

for item in self.list_meth:
    curr_list=getattr(self, item[0])(*item[1:])



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Июль 3, 2014 08:54:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

имена методов в виде строк и параметры к ним

>>> list_meth = [
...     ["key_img", 0, 4, True],
...     ["key_empty_img", 0, 4, False, True],
...     ["increase_seq", 0, 4],
...     ["key_img", 5, 9],
...     ["key_empty_img", 5, 9, True],
...     ["increase_seq", 5, 9],
... ]
>>> 
>>> def f(name, arg1=None, arg2=None,
...       arg3=None, arg4=None):
...     print(name, '->', arg1, arg2, arg3, arg4)
... 
>>> for name, *args in list_meth:
...     f(name, *args)
... 
key_img -> 0 4 True None
key_empty_img -> 0 4 False True
increase_seq -> 0 4 None None
key_img -> 5 9 None None
key_empty_img -> 5 9 True None
increase_seq -> 5 9 None None
>>>



Офлайн

#4 Июль 3, 2014 09:06:28

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

имена методов в виде строк и параметры к ним

тут ругается

    for name, *args in list_meth:
              ^
SyntaxError: invalid syntax
версия python наверное?
у меня - 2.7.3

Отредактировано vrabey (Июль 3, 2014 09:08:02)

Офлайн

#5 Июль 3, 2014 09:27:54

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

имена методов в виде строк и параметры к ним

JOHN_16
Первый элемент получаемого списка это имя функции = метода объекта, все остальное это список аргументов которых функция способна корректна принять
спасибо.

Офлайн

#6 Июль 3, 2014 11:54:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

имена методов в виде строк и параметры к ним

vrabey
версия python наверное?
у меня - 2.7.3
Да, придётся как у JOHN_16 делать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version