gpt4 book ai didi

python - 星号(星号)在 f 弦中起什么作用?

转载 作者:太空狗 更新时间:2023-10-29 17:07:50 26 4
gpt4 key购买 nike

在python文档中2.4.3. Formatted string literals ,似乎可以在 f 字符串的 {} 中写一个星号后跟一个表达式,但我找不到如何使用它。

那是什么以及如何使用它?它是否记录在某处?

确切地说,这是关于以下 BNF"*"or_expr 部分.

f_string          ::=  (literal_char | "{{" | "}}" | replacement_field)*
replacement_field ::= "{" f_expression ["!" conversion] [":" format_spec] "}"
f_expression ::= (conditional_expression | "*" or_expr)
("," conditional_expression | "," "*" or_expr)* [","]
| yield_expression

我在 REPL 中尝试过,但它会导致错误。

>>> l = [1, 2, 3]
>>> f"{l}"
'[1, 2, 3]'
>>> f"{*l}"
File "<stdin>", line 1
SyntaxError: can't use starred expression here

最佳答案

f_expression 有两种选择:逗号分隔的 or_expr 列表,可选地以星号开头,或单个 yield_expression。请注意 yield_expression 不允许使用星号。

我假设其意图是只有在至少有一个逗号时才会选择逗号分隔的列表替代方案,但语法实际上并没有这么说。我觉得最后的重复运算符应该是 + 而不是 *

所以 f"{*1}" 会是一个语法错误,因为有一个星号,但没有逗号。 f"{*1,*2}" 在语法上是有效的,但是类型错误,因为 1 和 2 不可迭代。 f"{*[1], *[2]}" 有效且作用与 f"{1,2}" 相同。所以星号是允许的,因为它在元组中充当 splat 运算符,在 f 表达式中可以不带括号。

请注意,使用 or_expr 作为 * 的操作数并不意味着必须在那里使用按位或运算符 - 它只是意味着按位或运算符是优先级层次结构中第一个允许作为 * 操作数的运算符。所以它只是关于设置前缀 * 与其他表达式的优先级。我相信 or_expr 在语法中一直被用作操作数来为 * 添加前缀(也就是说,前缀 * 后跟表达式的任何地方而不是参数名称)。

关于python - 星号(星号)在 f 弦中起什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55933956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com