Для полноты другого ответа на ваш второй вопрос: вы можете использовать partial в модуле functools .
При импорте add от оператора в качестве Криса Лутца предлагается пример:
from functools import partial
from operator import add # add(a, b) -- Same as a + b.
adders = [0,1,2,3]
for i in [0,1,2,3]:
# store callable object with first argument given as (current) i
adders[i] = partial(add, i)
print adders[1](3)