我正在做一个 hackerrack 问题,我解决了它,但使用了一些我认为非常不符合 pythonic 的东西。
因此,我们的想法是解析为您提供命令和列表操作的行,并在列表上执行它。我最终得到了这个丑陋的 if/else 逻辑:
l = []
num_commands = int(raw_input())
for i in range(num_commands):
current = raw_input().split()
if current[0] == 'insert':
params = map(int, current[1:])
l.insert(params[0], params[1])
elif current[0] == 'print':
print l
elif current[0] == 'sort':
l.sort()
elif current[0] == 'pop':
l.pop()
elif current[0] == 'reverse':
l.reverse()
elif current[0] == 'remove':
l.remove(int(current[1]))
elif current[0] == 'append':
l.append(int(current[1]))
这很丑陋,但它确实有效。我想知道是否有更优雅的方法来做同样的事情,比如使用一些字典查找,将字符串绑定(bind)到特定对象实例的某个成员函数?
请您参考如下方法:
函数(和方法)都可以引用,是的。您可以在列表对象上创建方法字典,例如 lookup = {'remove': l.remove}然后可以与 lookup['remove'](val) 一起使用.
此外,您可以使用 getattr 从带有字符串的对象中检索属性:
getattr(alist, 'remove')(val)
