Tôi muốn cải thiện cách viết mã này. Ngay bây giờ tôi có sáu phương pháp gần như sao chép-dán, chỉ có một dòng đang thay đổi. Làm cách nào tôi có thể tạo một phương thức chung và tùy thuộc vào thuộc tính của dữ liệu đầu vào để thay đổi các phép tính? Tôi đã suy nghĩ để sử dụng lập trình chức năng để đạt được điều đó, nhưng tôi không chắc làm thế nào để làm điều đó đúng.
Phương thức này nhận được một đối tượng dict. Sau đó, đối tượng này được chuyển đổi thành JSON. Các midbiến được lưu trữ một JSON với midrate cho tệ từ API bên ngoài, nó phải có trước khi vòng lặp for nếu không API sẽ được gọi trong mỗi lần lặp và làm chậm này xuống quá trình rất nhiều! Sau đó, trong forvòng lặp, tôi lặp qua dữ liệu từ đầu vào. Sự khác biệt duy nhất giữa các phương thức là tính toán trước khi chèn nó vào danh sách..append(mid_current - bankMSell)
def margin_to_exchange_rate_sell(data):
j = data.to_JSON()
list_p = []
mid = midrate.get_midrate(j["fromCurrency"][0])
for idx, val in enumerate(j['toCurrency']):
try:
mid_current = 1/get_key(mid, j['toCurrency'][idx])
bankMSell = float(j['sellMargin'][idx])
list_p.append(mid_current - bankMSell)
except Exception as e:
list_p.append(0)
print(str(e))
return list_p
Một trong những phương pháp khác:
def margin_to_exchange_rate_buy(data):
j = data.to_JSON()
list_p = []
mid = midrate.get_midrate(j["fromCurrency"][0])
for idx, val in enumerate(j['toCurrency']):
try:
mid_current = 1/get_key(mid, j['toCurrency'][idx])
bankMSell = float(j['sellMargin'][idx])
list_p.append(mid_current + bankMSell)
except Exception as e:
list_p.append(0)
print(str(e))
return list_p
list_p.append()dòng, dành cho những người không rành về mã khác biệt một cách trực quan. :))