मैं अजगर में एक सामान्य विधि बनाने के लिए कार्यात्मक प्रोग्रामिंग का उपयोग कैसे कर सकता हूं?


9

मैं इस कोड को लिखने के तरीके में सुधार करना चाहूंगा। अभी मेरे पास छह तरीके हैं जो लगभग कॉपी-पेस्ट हैं, केवल एक लाइन बदल रही है। मैं एक सामान्य विधि कैसे बना सकता हूं और गणना बदलने के लिए डेटा इनपुट की संपत्ति पर निर्भर करता है? मैं इसे प्राप्त करने के लिए कार्यात्मक प्रोग्रामिंग का उपयोग करने के बारे में सोच रहा था, लेकिन मुझे यकीन नहीं है कि इसे ठीक से कैसे किया जाए।

विधि को एक वस्तु प्राप्त हो रही है। फिर इस ऑब्जेक्ट को JSON में बदल दिया जाता है। midचर बाहरी एपीआई से मुद्रा के लिए midrate साथ एक JSON भंडारण किया जाता है, यह होना चाहिए इससे पहले कि पाश अन्यथा एपीआई हर चरण में बुलाया जाएगा और इस प्रक्रिया में बहुत कुछ नीचे इस धीमा कर देती है के लिए! फिर 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, 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()रेखा है, जिनके लिए अलग-अलग कोड को नेत्रहीन रूप से अलग करने की आवश्यकता नहीं है। :))
— AKX

जवाबों:


14

वास्तव में, लैम्बदास के साथ यहां कोड को कम करने का एक तरीका है :

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

2
माइनर नाइटपिक, लेकिन मैं वास्तव में इसका नाम बदल mb
— दूंगा

2
शायद। यह ओपी है।
— 12-14 बजे mario_sunny
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.