Python - 为什么 next 的默认值在没有被使用的情况下被初始化?

Python - Why is the default value for next initialized if it doesn't get used?

正如标题所说,我想知道为什么 next 表达式中的默认值会被初始化,而不管它是否被使用。下面是一个例子。

class Test(object):
    def __init__(self):
        print("Test object created")
print(next((i for i in range(1)), Test()))

以前我会认为这只会打印出 0 而不是 Test object created 以及 0。我最近通过这种行为引起的错误发现情况并非如此。

这有什么原因吗?这是设计决定吗?

这里的设计决定是next只是一个普通的函数,而不是特殊的语言语法。在任何函数调用中,所有参数都在函数开始执行之前进行评估。 next没什么特别的,它只是遵循与其他人相同的规则。

函数参数总是在函数被调用之前被求值,不管函数最终是否需要它们。您可以设计一种不以这种方式工作的语言,但它在整个语言设计和函数的使用方式中具有深远的影响,因为如果它所依赖的变量发生变化,您必须担心参数表达式会评估为不同的东西在评估之前。