我想知道是否有可能创建方法列表(或其他东西)。 例如,假设我有一个列表
lst = []
我希望有特定的方法,例如insert
,remove
和其他内容。我想从列表中随机调用这些,以便我可以添加类似lst.add(3, 4)
的内容,但从方法列表中选择方法。它很愚蠢,但我喜欢这样做:lst.listofmethods[3]
可能这些方法应该存储在字典中吗?
答案 0 :(得分:3)
有两件事情会浮现在脑海中:
dir(..)
会返回方法的名称列表。然后,您可以使用getattr(..)
来获取侦听给定名称的属性。例如:
>>> dir([])
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
因此,如果您想呼叫append
(索引34),您可以使用:
getattr(lst,dir(lst)[34])('a')
您可以构建一个方法列表,如:
listofmethods = [lst.append,lst.clear]
然后用:
调用它listofmethod[1]()
在列表中拨打clear()
。
当然你也可以定义一个几乎相同的词典:
dicofmethods = {'foo':lst.append,'bar':lst.clear}
并致电:
dicofmethods['foo'](42)
答案 1 :(得分:3)
您也可以将函数存储到字典中。
>>> def foo():
... print("foo")
...
>>> def bar():
... print("bar")
...
>>>
>>> foobar = {"foo": foo, "bar" : bar}
>>> foobar["foo"]()
foo
>>> foobar["bar"]()
bar
>>> foobar["bar"]
<function bar at 0x7f0561c6eae8>
>>>
答案 2 :(得分:2)
是的,您可以将功能存储在列表中,如下所示:
def f ():
print ('f')
def g ():
print ('g')
aList = [f, g]
for aFunction in aList:
aFunction ()