我正在做一个hackerrack问题,我解决了它,但使用的东西我认为是非常不合理的。
因此,我们的想法是解析一个行,该行为您提供命令和列表上的操作,并在列表上执行它。我最终得到了这个丑陋的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]))
这很难看,但确实有效。我想知道是否有一种更优雅的方法来做同样的事情,或许使用一些字典查找将字符串绑定到某个特定对象实例的某个成员函数?
答案 0 :(得分:4)
可以引用函数(和方法),是的。您可以在列表对象(如goodNames
)上创建方法字典,然后可以将其与goodNames.then(function(listOfNames) {
//do something with the names
});
一起使用。
此外,您可以使用lookup = {'remove': l.remove}
:
lookup['remove'](val)
答案 1 :(得分:1)
因此,假设他们提供的函数名称正是您调用的函数名称,您可以执行此操作:Calling a function of a module from a string with the function's name in Python。
result = getattr(l, current[0])() if len(current) == 1 else getattr(foo, current[0])(current[1])
希望有所帮助!