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
没什么特别的,它只是遵循与其他人相同的规则。
函数参数总是在函数被调用之前被求值,不管函数最终是否需要它们。您可以设计一种不以这种方式工作的语言,但它在整个语言设计和函数的使用方式中具有深远的影响,因为如果它所依赖的变量发生变化,您必须担心参数表达式会评估为不同的东西在评估之前。
正如标题所说,我想知道为什么 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
没什么特别的,它只是遵循与其他人相同的规则。
函数参数总是在函数被调用之前被求值,不管函数最终是否需要它们。您可以设计一种不以这种方式工作的语言,但它在整个语言设计和函数的使用方式中具有深远的影响,因为如果它所依赖的变量发生变化,您必须担心参数表达式会评估为不同的东西在评估之前。