Python 更改多个if语句
几天前,我开始学习python,还有很多我不知道的事情,但我正在努力。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
所以,我有这个:
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)