Python 3.x 为什么Python'f-string`+;内联for循环在它们';是否作为参数重新传递?

Python 3.x 为什么Python'f-string`+;内联for循环在它们';是否作为参数重新传递?,python-3.x,for-loop,generator,f-string,Python 3.x,For Loop,Generator,F String,我在网上找到了这个例子 def格式_属性(**属性): “”“返回由逗号分隔的键值对组成的字符串。”“” 返回“,”。加入( f“{param}:{value}” 对于param,attributes.items()中的值 ) 传递给join函数的param语法引起了我的注意,因为它有点不寻常。但它是有效的 使用最少的代码库进行一些本地测试时,我发现: def foo(res): 返回res 打印(foo(f“{s}”表示[“bar”]中的s) foo的语法是有效的,res最终成为一个生成器

我在网上找到了这个例子

def格式_属性(**属性):
“”“返回由逗号分隔的键值对组成的字符串。”“”
返回“,”。加入(
f“{param}:{value}”
对于param,attributes.items()中的值
)
传递给
join
函数的param语法引起了我的注意,因为它有点不寻常。但它是有效的

使用最少的代码库进行一些本地测试时,我发现:

def foo(res):
返回res
打印(foo(f“{s}”表示[“bar”]中的s)
foo的
语法是有效的,
res
最终成为一个生成器。但是,如果我在[“bar”]独立中尝试对s使用
f“{s}”(其间没有函数),表达式只会抛出一个
SyntaxError:invalid syntax

为什么循环
f字符串
+
是有效的,并被转换为
生成器
?调用
foo
函数时,引擎盖下面发生了什么

这些其他问题使用相同的语法:


但是我没有找到解释为什么会发生这种情况的注释

这些都是生成器表达式的示例,不一定有任何特定于f字符串或与它们一起使用的函数

e、 g

该示例统计列表中偶数整数的数量


您可以在此处阅读更多有关它们的信息:

这些是生成器表达式的示例,不一定有任何特定于f字符串或与它们一起使用的函数的内容

e、 g

该示例统计列表中偶数整数的数量


您可以在此处阅读更多有关它们的信息:

f字符串与此无关

虽然生成器表达式通常需要括号:

some_gen = (f"{s}" for s in ["bar"])
print(foo(some_gen))
当生成器表达式是函数调用的唯一参数时,可以省略括号:

# These two calls are equivalent.
foo((f"{s}" for s in ["bar"]))
foo( f"{s}" for s in ["bar"] )

f字符串与此无关

虽然生成器表达式通常需要括号:

some_gen = (f"{s}" for s in ["bar"])
print(foo(some_gen))
当生成器表达式是函数调用的唯一参数时,可以省略括号:

# These two calls are equivalent.
foo((f"{s}" for s in ["bar"]))
foo( f"{s}" for s in ["bar"] )

您正在使用的循环构造是一个。要将其作为独立表达式编写,需要在其周围添加括号:

genexp = (f"{s}" for s in ["bar"])
如果生成器表达式是函数的唯一参数,则不需要双括号(但如果有其他单独的参数,则需要双括号)。对比度:

s = sum(i % 2 for i in some_sequence) # count of odd elements, no extra parentheses needed
vs:


代码中生成器表达式中使用的f-string没有什么特别之处,任何表达式的工作方式都是相同的。

您使用的循环构造是一个。要将其作为独立表达式编写,需要在其周围添加括号:

genexp = (f"{s}" for s in ["bar"])
如果生成器表达式是函数的唯一参数,则不需要双括号(但如果有其他单独的参数,则需要双括号)。对比度:

s = sum(i % 2 for i in some_sequence) # count of odd elements, no extra parentheses needed
vs:


代码中生成器表达式中使用的f-string没有什么特别之处,任何表达式的工作方式都是相同的。

我将此表达式标记为可接受的答案,因为它明确指出,当生成器用作单个参数时,不需要括号。谢谢我将这个标记为可接受的答案,因为它明确指出,当生成器用作单个参数时,不需要括号。谢谢我觉得这篇文章很有用。它详细描述了生成器的语法。我发现这篇文章很有用。它详细描述了生成器的语法