Sử dụng from __future__ import division
để nhận hành vi bạn muốn. Sau đó, trong một nhúm, bạn có thể làm một cái gì đó như
from __future__ import division
strings = ["0.1234", "1/2", "2/3"]
numbers = map(eval, strings)
để có danh sách nổi trên dây của bạn. Nếu bạn muốn làm điều này theo cách "đúng", không sử dụng eval()
, nhưng thay vào đó viết một hàm chấp nhận một chuỗi và gọi float()
trên đó nếu nó không chứa dấu gạch chéo hoặc phân tích chuỗi và chia tử số và mẫu số nếu có một dấu gạch chéo trong đó.
Một cách để làm điều đó:
def parse_float_string(x)
parts = x.split('/', 1)
if len(parts) == 1:
return float(x)
elif len(parts) == 2:
return float(parts[0])/float(parts[1])
else:
raise ValueError
Sau đó chỉ cần map(parse_float_string, strings)
sẽ giúp bạn có được danh sách của bạn.
+1. eval là hoàn toàn không cần thiết trong trường hợp này, và tôi vui vì ai đó (ngoài tôi, tất nhiên) bị mắc kẹt cho những gì đúng. –
Đánh giá không phải là rủi ro bảo mật trừ khi đồng nghiệp của bạn là những kẻ xã hội độc hại. Bạn không cần nó trong trường hợp này, nhưng nó không còn là một nguy cơ bảo mật hơn so với mã nguồn mở. –
Rất tốt. Các chuỗi thực sự là từ bên ngoài vì vậy tôi cần phải đi an toàn (và cố gắng không để tìm hiểu những thói quen xấu). Tôi đã hy vọng không cần phải phân tích nó nhưng điều này không phải là quá xấu và hoạt động như một say mê. – ketorin