Hãy xem xét ví dụ sau:phạm vi chức năng eval trong python
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'])
Nó trả về:
>>> test()
{'i': 7, 'k': 10, 'j': 8}
Tại sao eval không đi vào xem xét các biến được định nghĩa bên trong hàm? Từ tài liệu, tùy chọn bạn có thể vượt qua một globals và một từ điển người dân địa phương. Cuối cùng, làm thế nào tôi có thể sửa đổi trường hợp nhỏ này để làm cho nó hoạt động?
bạn có thể sửa đổi nó để làm việc bằng cách thêm 'global' trước khi khai báo biến bên trong một hàm nhưng đó là một ý tưởng tồi, mặt khác, sử dụng 'eval' thường là một ý tưởng tồi. – Rusty
Điều gì đã nói - trừ khi bạn chắc chắn rằng bạn _have_ sử dụng eval, hãy tránh xa nó. – l4mpi
@ l4mpi Tôi biết rằng eval là một ý tưởng tồi, nhưng tôi chỉ chơi với các phạm vi và tôi không hiểu hành vi này – Pierpaolo