您可以在运行时更改字典中的变量吗?

时间:2018-03-30 09:05:31

标签: python python-3.x dictionary

我有一个字典,它在其中存储一个列表,该列表中有一个对象类型,它有一些成员函数。

然后我有一个变量,我想要从0开始递增,它调用列表中的第一个位置,所以它看起来像这样:

index = 0
myDict = {
  "test" : myList[index].foo
}

myDict["test"]()
index += 1
myDict["test"]()

我想要做的是它在列表中调用第二位。但是dict中的索引似乎是不可变的,因为它仍然指的是列表中的索引0

有没有办法让这项工作或我必须提出其他解决方案?

2 个答案:

答案 0 :(得分:0)

您可以通过稍微更改代码来实现它。而不是从<head> <script src="https://unpkg.com/vue@2.5.16/dist/vue.js"></script> <script src="https://www.gstatic.com/firebasejs/4.12.1/firebase.js"></script> <script src="https://www.gstatic.com/firebasejs/4.11.0/firebase-firestore.js"></script> </head> <body> <script> var app = new Vue({ data() { return { name: "" } }, methods: { firebase: function() { var docRef = db.doc("test/testdoc"); docRef.get().then(function(doc) { this.name = doc.data().name; //this one not working console.log(doc.data().name); //just to test wether I can get data from Firestore }) } }) </script> </body> 分配直接函数,而是分配一个将在其中执行myList[index].foo函数的lambda。

你可以使用这样的lambda函数:

myList[index].foo

答案 1 :(得分:0)

实际上实际希望实现的目标并不清楚,但更通常的方法是将所需的行为封装在一个类中。

class Thing:
    def __init__(self, handle):
        self.inside = handle
        self.index = 0

    def update_index(self, newindex):
         self.index = newindex

    def value(self):
        return self.inside[self.index].foo()

not_a_dict = Thing(mylist)
not_a_dict.value()  # runs mylist[0].foo()
not_a_dict.update_index(1)
not_a_dict.value()  # runs mylist[1].foo()

封装的细节显然取决于你。例如,你可以硬编码mylist而不是让用户传入要封装的对象,和/或你可以使函数调用以获得可配置的值(传入lambda回调函数初始化程序?)等。