Python多个if代码优化

一、背景

在这里插入图片描述

  • 大量的if … elif…代码非常难看,也很难维护。
  • 扩展不太方便

二、优化方案

  • 以下栗子展示不同的角色获取折扣信息。

1、正常写法

def discount_algorithm(user_role):
    if user_role == 'admin':
        discount = 0.1
        return discount
    elif user_role == 'msp':
        discount = 0.3
        return discount
    elif user_role == 'tenant':
        discount = 0.5
        return discount
    elif user_role == 'number':
        discount = 0.7
        return discount
    else:
        discount = 1
        return discount


user_role = 'admin'
discount = discount_algorithm(user_role)

2、使用字典

def get_admin_discount():
    pass


def get_msp_discount():
    pass


def get_tenant_discount():
    pass


def get_number_discount():
    pass


def get_default_discount():
    pass


user_discount_map = {
    'admin': get_admin_discount(),
    'msp': get_msp_discount(),
    'tenant': get_tenant_discount(),
    'number': get_number_discount(),
    'default': get_default_discount(),
}

discount = user_discount_map[user_role]

3、使用反射

class DiscountAlgorithm():
    def get_admin_discount(self):
        pass

    def get_msp_discount(self):
        pass

    def get_tenant_discount(self):
        pass

    def get_number_discount(self):
        pass

    def get_default_discount(self):
        pass

    def get_discount(self, user_role):
        return getattr(self, user_role)()


DiscountAlgorithm().get_discount('get_msp_discount')

三、小结

  • 正常写法适合确定的只有2-3个if条件的情况
  • 字典适合代码量比较小的
  • 反射适合代码量比较多的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值