for循环的目的是什么?

2024-04-26 02:26:39 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能很简单,但有人能解释一下下面的目的是什么吗?你知道吗

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循环中的其他两个集合。你知道吗


Tags: inself目的cleanforparamvaluedef
2条回答

它遍历元组('<', '{'), ('>', '}'), (' ', '_')的元组,并将sr分别“解包”为元组中的第一个和第二个元素。你知道吗

然后它做一个替换,最终用{等替换<

第一个代码

for s, r in (('<', '{'), ...)<分配给s{分配给r,并在下一次迭代中分配下一项(元组解包)。你知道吗

在循环内str.replace返回一个新字符串,该字符串用r替换了所有出现的s。所以它意味着用{替换<,用} with _替换>。你知道吗

但是,不是这样,因为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

顺便说一句,这里有更有效的方法。你知道吗

您可以使用^{}。你知道吗

在Python2.x中,使用^{}

>>> import string
>>> tbl = string.maketrans('<> ', '{}_')
>>> '<hello world>'.translate(tbl)
'{hello_world}'

在python 3.x中:

>>> tbl = str.maketrans('<> ', '{}_')
>>> '<hello world>'.translate(tbl)
'{hello_world}'

第二个代码

第二部分是^{}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'}

相关问题 更多 >