Создавайте функции динамически или программно в python - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь динамически создавать функции на лету или создавать функции программно в python и зацикливаюсь на этом.

def test(a,b):
    print(a)

#Result:
def test(a,b,c):
    print(a)
    print(b,c)

Я пытаюсь это сделать с помощью модуля AST и не могу понять Синтаксис AST для функции. Я понимаю, что детали функции могут быть получены с помощью functionname.__code__.xxx. Но я не смогу вносить изменения, поскольку он доступен только для чтения. Вот что я пытаюсь:

  • Я пытался получить дамп AST вышеупомянутой функции, но он не сработал.
  • Попытка получить строковую версию определения функции (не удалось найти ссылку )

Я также попробовал следующее, но чувствую, что это может быть проблемой где-то, например, когда происходит переназначение, которое делает его локальным:

def tests(a,b):
    print(a,b)
    def mytest(c):
        print(a,b,c)
    return mytest

def tests(a,b):
    print(a,b)
    def mytest(c):
        print(a,b,c)
        a = 10 # this will become local variable
    return mytest

Я нахожусь на python 3.x

Любая помощь или любой другой более простой способ?

...