Функция exec не работает должным образом в Python 3.6

Код я написал

tile1=0; player1=1; turn=player1

def s():
   global tile1,turn,player1
   print("Before",tile1)
   string='tile' + '1' # I am getting 1 by some function that's why I need to create variable string                                     
   exec("%s=%d" %(string,turn))
   print("After",tile1)  
s()

Выведите то, что я ожидал
До 0
После 1

Выведите что я получил
До 0
После 0

Если я пишу код без функции, он дает ожидаемый результат

tile1=0; player1=1; turn=player1
print("Before",tile1)
string='tile' + '1'                                  
exec("%s=%d" %(string,turn))
print("After",tile1)

Я хочу спросить, как исправить этот код, чтобы получить ожидаемый результат. Кроме того, я не могу использовать список и словарь.

1 ответ

Решение

Проблема в том, что вам нужно указать область при использовании exec внутри функции.

Если вы измените его на:

exec("%s=%d" %(string,turn), None, globals())

Это работает, как ожидалось, потому что у вас нет local переменные (вы их объявили global) так что вы переходите в глобальную сферу как local сфера для exec так что он знает о tile1 а также turn,


Тем не менее, это неправильно execВы не должны использовать это таким образом!

Другие вопросы по тегам