Rozważmy następujący przykład:zakres funkcji eval w Pythonie
i=7
j=8
k=10
def test():
i=1
j=2
k=3
return dict((name,eval(name)) for name in ['i','j','k'])
Zwraca:
>>> test()
{'i': 7, 'k': 10, 'j': 8}
Dlaczego eval nie bierze pod uwagę zmiennych zdefiniowanych wewnątrz funkcji? Z dokumentacji opcjonalnie można przekazać globale i słownik lokalny. Co to znaczy? Wreszcie, jak mogę zmodyfikować ten mały przypadek, aby działał?
można zmodyfikować go do pracy poprzez dodanie 'global' przed deklaracji zmiennej wewnątrz funkcji ale to zły pomysł, z drugiej strony, używanie 'eval' jest zwykle złym pomysłem. – Rusty
Co zardzewiały powiedział - chyba że masz pewność, że masz możliwość używania eval, trzymaj się z dala od niego. – l4mpi
@ l4mpi Wiedziałem, że eval to zły pomysł, ale ja po prostu bawiłem się z lunetami i po prostu nie rozumiałem tego zachowania – Pierpaolo