В ответ на ваш второй вопрос самым изящным способом сделать это будет использование функции, которая принимает два параметра вместо массива:
add = lambda a, b: a + b
add(1, 3)
Однако, используя lambda здесь немного глупо. Python дает нам модуль operator
, который обеспечивает функциональный интерфейс для основных операторов. Лямбда выше имеет лишние накладные расходы, просто для вызова оператора сложения:
from operator import add
add(1, 3)
Я понимаю, что вы играете, пытаясь изучить язык, но я не могу представить ситуацию, которую я бы использовал массив функций, в которых может возникнуть странная видимость Python.
Если бы вы захотели, вы могли бы написать небольшой класс, который использует ваш синтаксис индексирования массива:
class Adders(object):
def __getitem__(self, item):
return lambda a: a + item
adders = Adders()
adders[1](3)