什么是for循环试图实现

时间:2014-10-16 14:38:20

标签: python string dictionary tuples

这可能非常简单但有人可以解释下面的内容是什么意思吗?

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循环中,变量sr分别分配给'<''{',并在replace上执行for价值领域?其次是{{1}}循环中的其他两个集。

2 个答案:

答案 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'}

这是从获取的行中获取namevalue值以生成新词典。

使用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; sr分别作为元组中的第一个和第二个元素。

然后它会进行替换,因此最终将<替换为{