这可能非常简单但有人可以解释下面的内容是什么意思吗?
def clean_param_value(self, value):
for s, r in (('<', '{'), ('>', '}'), (' ', '_')):
value.replace(s, r)
从
调用 params = dict(
(item['ParameterName'],
self.clean_param_value(item['ParameterValue']))
for item in cursor.fetchall()
)
在for
循环中,变量s
和r
分别分配给'<'
和'{'
,并在replace
上执行for
价值领域?其次是{{1}}循环中的其他两个集。
答案 0 :(得分:1)
for s, r in (('<', '{'), ...)
会将<
分配给s
和{
分配给r
,然后将下一个项目分配给({tiple unpacking)。
在循环内str.replace
返回一个新字符串,用s
替换所有r
。因此,它旨在将<
替换为{
,>
替换为}
,替换为
_
。
但是,不。这不是因为str.replace
返回一个新字符串,而不会替换字符串inplace 。
要正确,它应该返回返回值。并且该方法应该返回替换的字符串。
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'}
答案 1 :(得分:0)
它遍历元组('<', '{'), ('>', '}'), (' ', '_')
的元组,&#34;解包&#34; s
和r
分别作为元组中的第一个和第二个元素。
然后它会进行替换,因此最终将<
替换为{
等