繁体   English   中英

是否可以将字典映射到python中的对象操作

[英]Is it possible to map dictionary to object operations in python

我在做一个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]))

这很难看,但是可以。 我想知道是否有更优雅的方法来做同样的事情,也许使用一些字典查找来将字符串绑定到特定对象实例的某些成员函数上?

函数(和方法)都可以引用,是的。 您可以在类似于lookup = {'remove': l.remove}的列表对象上创建方法字典,然后可以将其与lookup['remove'](val)

此外,您可以使用getattr从带有字符串的对象中检索属性:

getattr(alist, 'remove')(val)

因此,假设他们给您的函数名称恰好是您调用的函数名称,则可以执行以下操作: 从带有Python中函数名称的字符串中调用模块的函数

result = getattr(l, current[0])() if len(current) == 1 else getattr(foo, current[0])(current[1])

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM