Функция 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
Вы не должны использовать это таким образом!