理解 python 列表理解中的字符串变量替换

Understanding string variable substitution in a python list comprehension

我不确定 Python Cookbook 中列表理解示例中使用的语法。

代码(包含我的打印语句)如下:

import html

# to accept any number of KEYWORD arguments, use **
# treat the argument as a dictionary
def make_element(name, value, **attrs):
    print(f"attrs has type {type(attrs)}")
    print(f"attrs -> {attrs}")
    print(f"attrs.items() -> {attrs.items()}")
    
    keyvals = ['%s = "%s"' % item for item in attrs.items()]
    
    print(f"keyvals -> {keyvals}")
    
    attr_str = ' '.join(keyvals)
    
    print(f"attr_str -> {attr_str}")
    
    element=f"<{name}{attr_str}>{html.escape(value)}</{name}>"
    
    print(f"element -> {element}")
    
    return element

让我感到困惑的是:

keyvals = ['%s = "%s"' % item for item in attrs.items()]

我不太明白这是在做什么(我得到了输出),但是 %s = '%s' 和 'item' 关键字之前的 % 是我以前从未见过的?

函数returns这个:

# method call
make_element('item', 'Albatross', size="Large", color="Blue")

# output
attrs has type <class 'dict'>
attrs -> {'size': 'Large', 'color': 'Blue'}
attrs.items() -> dict_items([('size', 'Large'), ('color', 'Blue')])
keyvals -> ['size = "Large"', 'color = "Blue"']
attr_str -> size = "Large" color = "Blue"
element -> <itemsize = "Large" color = "Blue">Albatross</item>
'<itemsize = "Large" color = "Blue">Albatross</item>'

当应用于字符串(作为左参数)时,% 运算符执行 C-style 格式替换,生成字符串作为结果。例如,%s 进行字符串格式化,%d 进行整数格式化等。

这里有几个简单的例子:

>>> '%s' % 'foo'
'foo'
>>> 

>>> '%d' % 123
'123'
>>> 

您可以通过将多个值打包成 tuple:

来格式化多个值
>>> '%s %s' % ("foo", "bar")
'foo bar'
>>> 

>>> '%s %d' % ("foo", 123)
'foo 123'
>>> 

最后一个例子基本上就是你代码中的情况。请尝试以下操作:

>>> items = ('foo', 'xyz')
>>> '%s = "%s"' % items
'foo = "xyz"'
>>>