Python определяет динамические функции

У меня есть следующие функции:

def activate_field_1(): print 1 def activate_field_2(): print 2 def activate_field_3(): print 3 

Как определить activate_field_[x] для x=1:10 , не набирая каждый из них? Конечно, я бы скорее передал параметр, но для моих целей это невозможно.

Благодаря!

4 Solutions collect form web for “Python определяет динамические функции”

Вы хотите определить их отдельно в исходном файле, статически? Тогда ваш лучший вариант – написать скрипт для их создания.

Если, с другой стороны, вам нужны эти функции во время выполнения, вы можете использовать функцию более высокого порядка. Например, для

 >>> def make_func(value_to_print): ... def _function(): ... print value_to_print ... return _function ... >>> f1 = make_func(1) >>> f1() 1 >>> f2 = make_func(2) >>> f2() 2 

Вы можете создать список из них и сохранить его снова во время выполнения.

 >>> my_functions = [make_func(i) for i in range(1, 11)] >>> for each in my_functions: ... each() ... 1 2 3 ... 

Вот что дает имена функций точно так, как вы хотели (и немного проще, чем принятый ответ создания метода Dynamic / runtime, упомянутый в теперь удаленном ответе @ Goutham):

 func_template = """def activate_field_%d(): print(%d)""" for x in range(1, 11): exec(func_template % (x, x)) >>> activate_field_1() 1 >>> activate_field_7() 7 

Вы можете поместить новые символы в словарь текущих привязок переменных, возвращаемых vars() :

 for i in range(1, 11): def f(x): def g(): print x return g vars()['activate_field_%d' % i] = f(i) >>> activate_field_3() 3 

Но этот трюк, как правило, не рекомендуется, если вы определенно не уверены, что вам это нужно.

Возможно, вы могли бы адаптировать этот рецепт для своих нужд.

 from functools import partial class FunctionPool: def __init__(self,function): self.function = function def __getitem__(self,item): return partial(self.function,item) >>> @FunctionPool def func(item,param): print "function#{item} called with {param}".format( item = item, param = param ) >>> f = func[2] >>> f(3) function#2 called with 3 
  • Какая польза от циркулярной ссылки?
  • Как читать большой двоичный файл и разбивать его содержимое на какой-либо маркер
  • Есть ли версия python для скрипта JavaScript String.fromCharCode?
  • Программирование на Python для Android
  • Понимание сохранения глобального объекта в приложениях WSGI Python
  • Создайте экземпляр класса Python из имени
  • python: ошибка импорта после выполнения исполняемого файла
  • Самый легкий способ создания случайной строки и случайного шестнадцатеричного числа
  • Python - лучший язык программирования в мире.