如何使用函数式编程在python中生成泛型方法?

2024-10-03 09:07:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想改进这段代码的编写方式。现在我有六个方法,几乎是复制粘贴,只有一行是改变。如何创建一个泛型方法并根据数据输入的属性来更改计算?我正考虑使用函数式编程来实现这一点,但我不确定如何正确地实现它。在

方法是获取dict对象。然后这个对象被转换成JSON。mid变量正在从外部API存储一个具有中等for currency的JSON,它必须在for循环之前,否则每次迭代都会调用API,这会大大减慢进程!然后在for循环中,我迭代输入的数据。方法之间的唯一区别是在将其插入列表之前进行计算。.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

另一种方法是:

^{pr2}$

Tags: to数据对象方法apijsonfordata
1条回答
网友
1楼 · 发布于 2024-10-03 09:07:31

实际上,有一种方法可以用lambdas来减少代码:

def margin_to_exchange_rate_sell(data):
    return margin_to_exchange_rate(data, lambda m, b: m - b)


def margin_to_exchange_rate_buy(data):
    return margin_to_exchange_rate(data, lambda m, b: m + b)


def margin_to_exchange_rate(data, operation):
    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(operation(mid_current, bankMSell))
        except Exception as e:
            list_p.append(0)
            print(str(e))

    return list_p

相关问题 更多 >