Python 更改多个if语句

Python 更改多个if语句,python,arrays,dictionary,for-loop,if-statement,Python,Arrays,Dictionary,For Loop,If Statement,几天前,我开始学习python,还有很多我不知道的事情,但我正在努力。 所以,我有这个: if setting == MAKE: rettt = User.make() elif setting == MOD: rettt = User.mod() elif setting == REM: rettt = User.rem() 你怎么想,我们能改变这一点,比如: settings = { 'MAKE': make, 'MOD': mod, 'REM': rem } if

几天前,我开始学习python,还有很多我不知道的事情,但我正在努力。
所以,我有这个:

if setting == MAKE:
    rettt = User.make()
elif setting == MOD:
    rettt = User.mod()
elif setting == REM:
    rettt = User.rem()
你怎么想,我们能改变这一点,比如:

settings = {
'MAKE': make,
'MOD': mod,
'REM': rem
}
if setting in settings:
    rettt = User.settings()

感谢您的关注。

使用
getattr
从用户对象获取属性。如果,您将不再需要

settings = {
'MAKE': 'make',
'MOD': 'mod',
'REM': 'rem'
}

rettt = getattr(User, settings[setting])()
请注意,字典值应该是字符串,因为方法绑定到
User
对象,不能像调用无界函数那样调用它们

很明显,你可以不用口述:

rettt = getattr(User, setting.lower())()

您有三种选择:

  • 存储方法名称,然后使用
    getattr()
    将名称转换回对该方法的引用:

    settings = {
        'MAKE': 'make',
        'MOD': 'mod',
        'REM': 'rem'
    }
    if setting in settings:
        rettt = getattr(User, settings[setting])()
    
    我注意到,在这一点上,这变成了一个简单的下套管练习,可能有一个设置测试来确保您不能调用任意方法:

    settings = {'MAKE' 'MOD', 'REM'}
    if setting in settings:
        rettt = getattr(User, setting.lower())()
    
  • 每次在字典中存储绑定的方法:

    settings = {
        'MAKE': User.make,
        'MOD': User.mod,
        'REM': User.rem,
    }
    if setting in settings:
        rettt = settings[setting]()
    
  • 使用;它们采用字符串方法名称,可以使用对象调用,以在其上调用该方法:


不错,我会检查一下。在任何情况下,除非您提供默认返回值(或检查所提供的设置是否为有效方法),否则resolvinggetattr()抛出AttributeError都是非常有趣的@rolika:但是如果
设置
字典被认为是方法名的正确来源,则最多会出现
键错误
from operator import methodcaller

settings = {
    'MAKE': methodcaller('make'),
    'MOD': methodcaller('mod'),
    'REM': methodcaller('rem')
}
if setting in settings:
    rettt = settings[setting](User)