Найти - Пользователи
Полная версия: functools - partial function
Начало » Python для новичков » functools - partial function
1
Cyberika
Привет,
У меня вопрос по 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
В обоих случаях возвращаемое значение 11. Какая разница между этими двумя кодами?
И еще, в документации я нажел этот пример
>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18
Там говорится , что спомощю partial можно создать callable и использовать, как функцию int(). Знаю, что int() функция “превращает” другие типы данных в целое число но что значит создать callable и при чем тут 18?

Может это слишком уж нубский вопрос, но мне очень нужен ответ, без него я застрял на написании скирпта для инструмента, над которым я работаю.
Прошу сильно не пинать.
doza_and
Она делает из функции другую функцию у которой часть аргументов уже задана конкретными значениями. Те результат - функция при вызове которой вызывается исходная с подстановкой части значений
Cyberika
Спасибо,
как я правильно вас понял в первом примере 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
И почему 18?
ZAN
Функция 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') {}
А если указывать параметр base по кейворду, то порядок будет соблюден автоматически.
Cyberika
doza_and,
ZAN

Спасибо вам огромное!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB