tôi thấy mình thường muốn viết danh sách Python comprehensions như thế này:biểu Bí danh trong danh sách comprehensions Python
nearbyPoints = [(n, delta(n,x)) for n in allPoints if delta(n,x)<=radius]
Đó hy vọng cung cấp cho một số bối cảnh là tại sao tôi muốn làm điều này, nhưng có cũng là trường hợp nơi nhiều giá trị cần phải được tính toán/so mỗi yếu tố:
newlist = [(x,f(x),g(f(x))) for x in bigList if f(x)<p and g(f(x))<q]
Vì vậy, tôi có hai câu hỏi:
- tất cả các chức năng đó sẽ được đánh giá nhiều lần hay là kết quả được lưu trong bộ nhớ cache? Ngôn ngữ có chỉ định hoặc là ngôn ngữ cụ thể cho việc triển khai không? Tôi đang sử dụng 2,6 bây giờ, nhưng sẽ 3.x là khác nhau?
- có cách nào khác để viết không? Đôi khi f và g là biểu thức dài và trùng lặp là lỗi dễ gây ra và trông lộn xộn. Tôi thực sự muốn để có thể viết này:
newList = [(x,a=f(x),b=g(a)) for x in bigList if a<p and b<q]
nhưng điều đó không làm việc. Có lý do chính đáng để không hỗ trợ cú pháp này không? Có thể nó được thực hiện thông qua một cái gì đó như this? Hoặc tôi chỉ phải sử dụng nhiều danh sách hoặc một vòng lặp?
1 Mặc dù tôi cảm thấy ghê tởm về các bộ lập chỉ mục. Ngoài ra, có những tình huống trong đó một chức năng hoặc một chức năng máy phát điện là lựa chọn tốt nhất. – Apalala