Как выполнить строку внутри функции - PullRequest
0 голосов
/ 09 ноября 2019

Допустим, у меня есть следующая функция

def code_string(a):
    for i in range(a):
        exec('f=a+i')
        print(f)

Когда я запускаю ее с помощью следующей команды

code_string(3)

Это дает мне следующую ошибку

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-9c91de8067f3> in <module>()
----> 1 code_string(3)

<ipython-input-2-2ae9915b0a25> in code_string(a)
      2     for i in range(a):
      3         exec('f=a+i')
----> 4         print(f)

NameError: name 'f' is not defined

когда я запускаю его не в функции, как это

a=3
for i in range(a):
    exec('f=a+i')
    print(f)

Это прекрасно работает, как и так

3
4
5

Почему это происходит, и могу ли я выполнить строковый код внутриfunction in python

ПРИМЕЧАНИЕ. Это всего лишь демонстрационный пример, поэтому не ожидайте, что мой код будет таким же простым, как этот демонстрационный пример. Я просто выразил это, чтобы продемонстрировать проблему.

1 Ответ

1 голос
/ 09 ноября 2019

Вы можете попробовать это:

def code_string(a):
    for i in range(a):
        exec('f=a+i', locals(), globals())
        print(f)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...