Giả sử tôi có hàm fun(f, x, y)
trong đó x và y là số và f là một chuỗi chỉ định một hàm chẳng hạn như "1/x ** 2 + y"
.Python lưu hàm eval
Tôi muốn sử dụng chức năng này f
nhiều, giả sử vài triệu lần và các giá trị của x
và y
thay đổi giữa mỗi lần sử dụng.
Do đó, hãy gọi eval(f)
mất một khoảng thời gian đáng kể thay vì chỉ tính giá trị của hàm mỗi lần. (Khoảng 50x, trong trường hợp đã đo của tôi.)
Có cách nào để lưu chức năng này f
để tôi chỉ phải gọi eval
một lần?
PS. Vui lòng không thảo luận về (un) sự an toàn của việc sử dụng eval
tại đây, tôi biết điều đó, nhưng mã này sẽ không đi đến bất kỳ nơi nào mà bên thứ ba sẽ chạy nó, cũng như không liên quan đến câu hỏi của tôi.
Tại sao bạn cần chức năng được lưu trữ dưới dạng chuỗi? –
Nó sẽ được người dùng nhập vào. – Torn
Một tùy chọn khác là để [biên dịch] (https://docs.python.org/3/library/functions.html#compile) biểu thức của bạn thành đối tượng mã, nhưng kỹ thuật của Jean-François nhanh gấp hai lần. –