f 字符串格式化程序,包括 for 循环或 if 条件
f-strings formatter including for-loop or if conditions
如何在 f-string 中插入 for
循环或 if
表达式?
我最初想为 if
表达式做这样的事情:
f'{a:{"s" if CONDITION else "??"}}'
不过我想做的是:
示例 1
f'{key: value\n for key, value in dict.items()}'
结果:
if dict = {'a': 1, 'b': 2}
a: 1
b: 2
或示例2
c = 'hello'
f'{c} {name if name else "unknown"}'
结果:
如果名称存在,例如姓名 = 'Mike'
hello Mike
否则
hello unknown
这可以做到吗?如果可以,怎么做?
三元组(“if
表达式”)和推导式(“for
表达式”)都可以在 f 字符串中使用。但是,它们必须是评估为字符串的表达式的一部分。比如key: value
是一个dict对,需要f"{key}: {value}"
才能产生一个字符串
>>> dct = {'a': 1, 'b': 2}
>>> newline = "\n" # \escapes are not allowed inside f-strings
>>> print(f'{newline.join(f"{key}: {value}" for key, value in dct.items())}')
a: 1
b: 2
请注意,如果整个 f 字符串是一个单一格式的表达式,直接对表达式求值会更简单。
>>> print("\n".join(f"{key}: {value}" for key, value in dct.items())))
a: 1
b: 2
格式字符串中的表达式仍然遵循它们的常规语义。例如,三元可以测试 existing 名称是否为真。如果未定义名称,它将失败。
>>> c, name = "Hello", ""
>>> f'{c} {name if name else "unknown"}'
'Hello unknown'
>>> del name
>>> f'{c} {name if name else "unknown"}'
NameError: name 'name' is not defined
如何在 f-string 中插入 for
循环或 if
表达式?
我最初想为 if
表达式做这样的事情:
f'{a:{"s" if CONDITION else "??"}}'
不过我想做的是:
示例 1
f'{key: value\n for key, value in dict.items()}'
结果:
if dict = {'a': 1, 'b': 2}
a: 1
b: 2
或示例2
c = 'hello'
f'{c} {name if name else "unknown"}'
结果:
如果名称存在,例如姓名 = 'Mike'
hello Mike
否则
hello unknown
这可以做到吗?如果可以,怎么做?
三元组(“if
表达式”)和推导式(“for
表达式”)都可以在 f 字符串中使用。但是,它们必须是评估为字符串的表达式的一部分。比如key: value
是一个dict对,需要f"{key}: {value}"
才能产生一个字符串
>>> dct = {'a': 1, 'b': 2}
>>> newline = "\n" # \escapes are not allowed inside f-strings
>>> print(f'{newline.join(f"{key}: {value}" for key, value in dct.items())}')
a: 1
b: 2
请注意,如果整个 f 字符串是一个单一格式的表达式,直接对表达式求值会更简单。
>>> print("\n".join(f"{key}: {value}" for key, value in dct.items())))
a: 1
b: 2
格式字符串中的表达式仍然遵循它们的常规语义。例如,三元可以测试 existing 名称是否为真。如果未定义名称,它将失败。
>>> c, name = "Hello", ""
>>> f'{c} {name if name else "unknown"}'
'Hello unknown'
>>> del name
>>> f'{c} {name if name else "unknown"}'
NameError: name 'name' is not defined