পাইথনে জেনেরিক পদ্ধতি তৈরি করতে আমি কীভাবে ফাংশনাল প্রোগ্রামিং ব্যবহার করতে পারি?


9

আমি এই কোডটি লেখার পদ্ধতিটি উন্নত করতে চাই। এই মুহূর্তে আমার কাছে ছয়টি পদ্ধতি রয়েছে যা প্রায় অনুলিপি-পেস্ট, কেবল একটি লাইন পরিবর্তন হচ্ছে। গণনা পরিবর্তন করতে আমি কীভাবে একটি জেনেরিক পদ্ধতি তৈরি করতে পারি এবং ডেটা ইনপুটটির সংস্থার উপর নির্ভর করে? আমি এটি অর্জনের জন্য ক্রিয়ামূলক প্রোগ্রামিং ব্যবহার করার কথা ভাবছিলাম, তবে কীভাবে এটি সঠিকভাবে করা যায় তা সম্পর্কে আমি নিশ্চিত নই।

পদ্ধতিটি একটি ডিক অবজেক্ট পাচ্ছে। তারপরে এই বস্তুটি JSON এ রূপান্তরিত হয়। midপরিবর্তনশীল বহিরাগত API থেকে মুদ্রার জন্য 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()লাইন, তাদের পক্ষে দৃশ্যত ভিন্ন ভিন্ন কোডে খুব পারদর্শী নয় :) :))
একেএম

উত্তর:


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
অপ্রাপ্তবয়স্ক নিতপিক, তবে আমি সত্যিই নতুন নামকরণ করব mএবং bএটি আর্থিক কোড হিসাবে বিবেচনা করে আরও বর্ণনামূলক কিছু করব :)
কেএক্স

2
সম্ভবত। এটি ওপি আপ।
মারিও_সুনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.