方法列表

2024-10-05 14:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以创建一个方法列表。 例如,假设我有一个列表

 lst = []

我想要一些具体的方法,比如insertremove等等。我想从列表中随机调用它们,这样我就可以添加一些类似lst.add(3, 4)的东西,但是从方法列表中选择方法。这很傻,但我想这样做:lst.listofmethods[3]

也许,这些方法应该存储在字典中?你知道吗


Tags: 方法add列表字典removeinsertlstlistofmethods
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)
    

您也可以将函数存储到字典中。你知道吗

>>> 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>
>>> 

是的,您可以将函数存储在列表中,如下所示:

def f ():
    print ('f')

def g ():
    print ('g')

aList = [f, g]

for aFunction in aList:
    aFunction ()

相关问题 更多 >