第一个代码
for s, r in (('<', '{'), ...) 会将< 分配给s,将{ 分配给r,以及下一次迭代中的下一项(元组解包)。
在循环str.replace 内返回一个新字符串,该字符串将所有出现的s 替换为r。所以它的意思是用{替换<,用}替换>,用_替换。
但是,不。不是因为str.replace 返回了一个新字符串,并且不会就地替换字符串。
为了正确,它应该分配回返回值。并且该方法应该返回被替换的字符串。
def clean_param_value(self, value):
for s, r in (('<', '{'), ('>', '}'), (' ', '_')):
# s, r = '<', '{' # 1st iteration
# s, r = '>', '}' # 2nd iteration
# s, r = ' ', '_' # 3rd iteration
value = value.replace(s, r)
return value
顺便说一句,这里有更有效的方法。
您可以使用str.translate。
在 Python 2.x 中,使用 string.maketrans:
>>> import string
>>> tbl = string.maketrans('<> ', '{}_')
>>> '<hello world>'.translate(tbl)
'{hello_world}'
在 python 3.x 中:
>>> tbl = str.maketrans('<> ', '{}_')
>>> '<hello world>'.translate(tbl)
'{hello_world}'
第二个代码
第二部分是dict和generator expression:
>>> rows = [
... {'name': 'dog', 'value': 'bow wow', 'other_value': 'blah'},
... {'name': 'cat', 'value': 'meow meow', 'other_value': 'other blah'},
... ]
>>> dict((item['name'], item['value']) for item in rows)
{'dog': 'bow wow', 'cat': 'meow meow'}
这是从获取的行中获取 name、value 值以创建新字典。
使用固定版本的clean_param_value,它会产生类似的结果:
>>> dict((item['name'], clean_param_value(item['value'])) for item in rows)
{'dog': 'bow_wow', 'cat': 'meow_meow'}
有字典理解:
>>> {item['name']: clean_param_value(item['value']) for item in rows}
{'dog': 'bow_wow', 'cat': 'meow_meow'}