如何使用函数式编程在python中创建通用方法?

我想改进这段代码的编写方式。现在,我有六种几乎是复制粘贴的方法,只有一行正在更改。如何制作通用方法,并根据数据输入的属性更改计算?我当时在考虑使用函数式编程来实现这一目标,但是我不确定如何正确地做到这一点。

该方法正在获取dict对象。然后将此对象转换为JSON。 mid变量正在从外部API存储具有中等汇率的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

另一种方法:

def margin_to_exchange_rate_buy(data):
    j = data.to_JSON()
    list_p = []
    mid = midrate.get_midrate(j["fromCurrency"][0])
    for idx,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
kubabel 回答:如何使用函数式编程在python中创建通用方法?

实际上,这里有一种方法可以用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,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
本文链接:https://www.f2er.com/3166934.html

大家都在问