【发布时间】:2021-08-27 22:59:29
【问题描述】:
我一直假设如果字典中存在键,则永远不会调用 myDict.get('key', default_value) 表达式中的默认值。但是,我最近发现它以某种方式存在。例如,考虑代码
def doSomething():
print('Done')
return 'Another value'
myDict = {'key': 'value'}
print(myDict.get('key', doSomething()))
人们会认为,由于 myDict 中存在 key,那么 myDict.get('key', doSomething()) 唯一要做的就是返回 value,因此, doSomething 函数永远不会被调用。然而情况并非如此,在 python 中运行此代码当前输出:
Done
value
我的问题是:为什么会这样? key存在时,为什么default_value没有被完全忽略?
并且可以做些什么来改变这一点,即当 key 存在时不调用 default_value?
【问题讨论】:
-
get是一个函数。像所有 python 函数一样,参数将在将它们传递给函数之前进行评估。这并不取决于get——它只是在评估后接收传入的值。 -
get方法不是某种有条件地评估其参数的宏。它是一种方法,它是一种函数。调用时,它的所有参数都被评估并传递给函数。这是 Python 的基础。 -
如果你不希望函数被评估,那么你可以传递函数对象
myDict.get('key', doSomething)。但是,除非您的有效值也是可调用函数,否则不确定其用例
标签: python python-3.x