在Python中更改列表时调用函数

Tec*_*ght 1 python function list

我只是想知道您是否可以在更改列表(将项目添加到列表)时调用函数。如果有的话,它看起来像这样:

def listchanged():
    print("The list has been changed!")

list = ["apples","bananas"]
listevent(list,listchanged)
Run Code Online (Sandbox Code Playgroud)

然后在外壳程序中将一个项目添加到列表中,并显示“列表已更改!”。

谢谢!

Jab*_*Jab 6

list更改列表时,可以子类化打印。

这是一个例子:

class EventList(list):

    def __setitem__(self, key, value):
        super(EventList, self).__setitem__(key, value)
        print("The list has been changed!")

    def __delitem__(self, value):
        super(EventList, self).__delitem__(value)
        print("The list has been changed!")

    def __add__(self, value):
        super(EventList, self).__add__(value)
        print("The list has been changed!")

    def __iadd__(self, value):
        super(EventList, self).__iadd__(value)
        print("The list has been changed!")

    def append(self, value):
        super(EventList, self).append(value)
        print("The list has been changed!")

    def remove(self, value):
        super(EventList, self).remove(value)

l = EventList(["apples","bananas"])
l.append('test')
Run Code Online (Sandbox Code Playgroud)

印刷品:

The list has been changed!
Run Code Online (Sandbox Code Playgroud)

要么

只需比较列表:

old_list = ["apples","bananas"]
new_list = ["apples","bananas"]
newer_list = ["apples","bananas", "oranges"]

old_list == new_list #true
old_list == newer_list #false
Run Code Online (Sandbox Code Playgroud)

==如果列表在相同的索引中具有相同的元素,而不是在ID或哈希值(在lamens中)完全相同,则这将没有子类可以进行比较。只需将旧的保存在变量中,然后在要检查时使用它即可。(请注意:这并不提供自动调用打印的方法。这只是另一种方法