Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 13, 2011 14:31:07

Cyberika
От:
Зарегистрирован: 2011-08-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

functools - partial function

Привет,
У меня вопрос по 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?

Может это слишком уж нубский вопрос, но мне очень нужен ответ, без него я застрял на написании скирпта для инструмента, над которым я работаю.
Прошу сильно не пинать.



Офлайн

#2 Авг. 13, 2011 15:22:57

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

functools - partial function

Она делает из функции другую функцию у которой часть аргументов уже задана конкретными значениями. Те результат - функция при вызове которой вызывается исходная с подстановкой части значений



Офлайн

#3 Авг. 13, 2011 17:45:31

Cyberika
От:
Зарегистрирован: 2011-08-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

functools - partial function

Спасибо,
как я правильно вас понял в первом примере 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?



Отредактировано (Авг. 13, 2011 19:52:04)

Офлайн

#4 Авг. 13, 2011 17:58:45

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

functools - partial function

Функция 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 по кейворду, то порядок будет соблюден автоматически.



Офлайн

#5 Авг. 13, 2011 20:49:04

Cyberika
От:
Зарегистрирован: 2011-08-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

functools - partial function

doza_and,
ZAN

Спасибо вам огромное!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version