Được chứ. Vì vậy, câu hỏi của tôi rất đơn giản: Làm cách nào để chỉ định giá trị của một biến bằng eval trong Python? Tôi đã thử eval('x = 1')nhưng không được. Nó trả về một SyntaxError. Tại sao điều này sẽ không hoạt động?
Được chứ. Vì vậy, câu hỏi của tôi rất đơn giản: Làm cách nào để chỉ định giá trị của một biến bằng eval trong Python? Tôi đã thử eval('x = 1')nhưng không được. Nó trả về một SyntaxError. Tại sao điều này sẽ không hoạt động?
Câu trả lời:
Bởi vì x=1là một câu lệnh, không phải một biểu thức. Sử dụng execđể chạy các câu lệnh.
>>> exec('x=1')
>>> x
1
Nhân tiện, có nhiều cách để tránh sử dụng exec/ evalnếu tất cả những gì bạn cần là một tên động để gán, ví dụ: bạn có thể sử dụng từ điển, setattrhàm ,hoặc :locals()từ điển
>>> locals()['y'] = 1
>>> y
1
Cập nhật : Mặc dù mã trên hoạt động trong REPL, nhưng nó sẽ không hoạt động bên trong một hàm. Xem Sửa đổi người dân địa phương trong Python để biết một số lựa chọn thay thế nếu bạn execkhông hiểu.
locals(). ( docs.python.org/2/library/functions.html#locals ) Có cách nào khác để chỉ sử dụng nhiệm vụ mà không có toàn bộ điều xấu eval()không?
Bạn không thể, vì phép gán biến là một câu lệnh, không phải là một biểu thức và evalchỉ có thể là các evalbiểu thức. Sử dụng execthay thế.
Tốt hơn hết, đừng sử dụng và hãy cho chúng tôi biết bạn đang thực sự cố gắng làm gì để chúng tôi có thể đưa ra giải pháp an toàn và lành mạnh.
x = 0
def mateNewValueToX (v):
toàn cầu x
x = v
eval ('gánNewValueToX (1)')
print (x)
Nó hoạt động ... vì python thực sự sẽ chạy lệnh giaoNewValueToX để có thể đánh giá biểu thức. Nó có thể được phát triển thêm, nhưng tôi chắc chắn rằng có một lựa chọn tốt hơn cho hầu hết mọi nhu cầu mà một người có thể có.