Если вам нужна функция, которой еще нет, вы можете просто определить ее и использовать ее имя с этого момента.
Например:
if foo:
def patch_fct(tup):
return 2*(np.random.random_sample(tup) - 0.5)
elif bar:
def patch_fct(tup):
# do something else
else:
patch_fct = another_existing_function
С помощью словаря цепочку ifs и elses можно написать более плавно.
Для исходного кода вы можете написать
patch_functions = {'zeros': np.zeros,
'ones': np.ones,
'rand': np.random.random_sample}
и затем используйте его так:
>>> patch_functions['zeros'](5)
>>> array([0., 0., 0., 0., 0.])
Это автоматически выдаст KeyError
, если вы пытаетесь получить доступ к ключу, который не существует в словаре.
Вы также можете помещать самоопределенные функции в словарь, определяя их перед вставкой или используя анонимные функции lambda
. Демонстрация:
>>> def fun1(tup):
...: return sum(tup) + 1
>>>
>>> my_functions = {'my_sum': fun1, 'my_random': lambda tup: 2*(np.random.random_sample(tup) - 0.5)}
>>> my_functions['my_sum']((2, 5))
>>> 8
>>> my_functions['my_random']((2, 5))
>>>
array([[-0.20203832, -0.23868021, 0.72052191, 0.72931098, -0.57160796],
[-0.45117601, -0.95461634, -0.52232593, -0.24011216, -0.83875935]])