Форум сайта python.su
0
Привет,
У меня вопрос по functools. Я не програмист и мне очень трудно понять что эта функция делает. Я смотрел документацию но там очень сухо описано, видимо она(документация) для людей с определенными навыками програмирования, которых у меня к сожалению нет. Язык мне нужен для работы в 3D приложении - Maya.
И так допустим у меня такой код:
from functools import partial
def nums(a,b):
return a+b
varA = partial(nums,6)
print varA(5)
from functools import partial
def nums(a,b):
return a+b
five=4
varB=nums(iver,6)
print varB
>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18
Офлайн
253
Она делает из функции другую функцию у которой часть аргументов уже задана конкретными значениями. Те результат - функция при вызове которой вызывается исходная с подстановкой части значений
Офлайн
0
Спасибо,
как я правильно вас понял в первом примере varA это уже функция которая вызывает другую фнукцию - nums уже с заданым параметром 6 и параметром который нужно задать при ее вызове.
Но в примере из документации имеем число 18 и аргумент base=2 . Пожалуйста разясните и этот пример. Если я вместо base=2 поставлю просто base , а целое значение 2 задаю вне функции то получаю : TypeError: an integer is required
from functools import partial
base=2
basetwo = partial(int, base)
basetwo('10010')
18
Отредактировано (Авг. 13, 2011 19:52:04)
Офлайн
10
Функция int умеет превращать строку в целое число. Второй параметр этой функции - разрядность системы (base).
Т.е. int('10010', 2) переведет записть 10010 из двоичной системы в целое число - отсюда и 18.
А ошибка возникает из-за того, что внутри basetwo первым параметром подставляется 2, а вторым - ‘10010’, а нужно наобарот.
>>> def fun(*args, **kwargs):
print args, kwargs
>>> f = partial(fun, base)
>>> f('10010')
(2, '10010') {}
Офлайн
0
doza_and,
ZAN
Спасибо вам огромное!
Офлайн