Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 18, 2011 04:03:16

pupkin2
От:
Зарегистрирован: 2011-10-23
Сообщения: 103
Репутация: +  1  -
Профиль   Отправить e-mail  

частичная специализация

привет.

интересует, каким образом можно специализировать функций типом и значением аргумента.
т.е., имеем такую функцию:

def foo(arg1, arg2):
print arg1, arg2
хочется сделать ее частичную специализацию по значению второго аргумента:
def foo(arg1, arg2=1):
print "specialization for 1"
def foo(arg1, arg2=2):
print "specialization for 2"
теперь, при вызове “foo(some_val, 1)” должна вызываться специализация для 1, при 2 - для 2.
такое возможно?

и сопутствующий вопрос: возможно ли проделать тоже самое но не для значений, а для типов?


спасибо.



Офлайн

#2 Ноя. 18, 2011 06:08:22

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

частичная специализация

http://pypi.python.org/pypi/PEAK-Rules

Но это очень сильное колдунство.



Офлайн

#3 Ноя. 18, 2011 06:24:33

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

частичная специализация

Штатно вроде никак, нужна обертка/декоратор. вот пример, в зависимости от типа отрабатывает нужная функция:

def foo(arg1, arg2):
d = { int:lambda a,b:"specialization for int, %d:%d"%(a,b), str:lambda a,b:"specialization for int, %s:%s"%(a,b) }
return d[type(arg2)](arg1, arg2)

print foo(1,1)
print foo('str','ing')

Офлайн

#4 Ноя. 18, 2011 11:02:08

pupkin2
От:
Зарегистрирован: 2011-10-23
Сообщения: 103
Репутация: +  1  -
Профиль   Отправить e-mail  

частичная специализация

Андрей Светлов, o7412369815963, значит все же такое возможно.
спасибо.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version