我正在尝试理解下面的python代码。
这是我的解释。
def __init__(self):
self.intermediate = {}
self.result = []
中间和结果是变量。 中间词是dict类型。 结果是类型列表
def emit_intermediate(self, key, value):
self.intermediate.setdefault(key, [])
self.intermediate[key].append(value)
如果key在字典中间,则从此方法返回其值。 (这行:self.intermediate [key] .append(value)如果返回值仍会执行吗?) 如果密钥不在字典中,则将具有空列表值的密钥插入字典中间。 如果已插入密钥,则将该值附加到与密钥关联的列表中。
def emit(self, value):
self.result.append(value)
将值附加到结果列表
这是整个代码:
def __init__(self):
self.intermediate = {}
self.result = []
def emit_intermediate(self, key, value):
self.intermediate.setdefault(key, [])
self.intermediate[key].append(value)
def emit(self, value):
self.result.append(value)
答案 0 :(得分:1)
self.intermediate.setdefault(key, [])
告诉您如果密钥尚未出现,密钥的价值是多少。
因此,如果您插入的密钥不在self.intermediate
中,则会使用该密钥创建一个新条目,并为其指定值[]
。
然后下一行“self.intermediate[key].append(value)
”(总是执行)始终有一个可以追加的列表;来自self.intermediate.setdefault(key, [])
的新作品或之前创作的作品。
所以:
someobjectofthisclass.emit_intermediate("foo", 1)
print(someobjectofthisclass.intermediate)
>> {"foo":[1]}
someobjectofthisclass.emit_intermediate("foo", 1)
someobjectofthisclass.emit_intermediate("foo", 2)
someobjectofthisclass.emit_intermediate("bar", 1)
print(someobjectofthisclass.intermediate)
>> {"foo":[1,1,2], "bar":[1]}