gpt4 book ai didi

python - 函数执行 python 2.7 中的 dictionary.get 中的键是否存在

转载 作者:太空狗 更新时间:2023-10-30 02:52:31 25 4
gpt4 key购买 nike

我在 Python 中使用字典,我正在使用以下方法搜索值:

my_dictionary_object.get("key")

众所周知,如果字典中缺少键,它将返回None 对象。所以为了节省额外的行并使我的代码更有趣,我正在尝试:

def my_function():
'''do some calculations'''
return missing_value_from_dictionary

现在是有趣的部分;当我做的时候

my_dictionary_object.get("key", my_function())

无论 key 是否丢失,它都会执行该函数,所以我想让我们删除括号,我做到了:

my_dictionary_object.get("key", my_function)

(以防万一)

my_dictionary_object.get("key", lambda: my_function())

但是没有 lambda 的那个没有执行(因为它从未被调用)同样的事情发生在有 lambda 的那个上。

长话短说

我的问题是,如果键存在于字典中,为什么函数会被执行?

这是我做错了什么还是我在这里遗漏了什么?

最佳答案

在:my_dictionary_object.get("key", my_function()) 中,执行看起来像这样:

  • 评估第一个参数(“key”)
  • 计算第二个参数,它是一个表达式:my_function()。因此,让我们调用该函数,并在其位置使用返回值。非常类似于:a = my_function(),python 将调用该函数并将返回值放在它的位置。
  • 使用上述两个评估参数调用 mydictionary_object.get(..)

换句话说,如果键不存在,dictionary.get("key", default) 将简单地返回第二个参数。如果是 lambda,则返回 lambda。 lambda 是一个对象。请注意,在 .get("key", my_function()) 中,my_function() 在技术上不是第二个参数。作为执行该函数的结果返回的结果值是第二个参数——希望它能解释你错在哪里。


您要查找的内容实际上是在另一个名为 defaultdict 的容器中捕获的.

你要做的是:

from collections import defaultdict

my_dictionary_object = defaultdict(my_function) # my_function should not take any argument.
my_dictionary_object["non-existing-key"] # Magic happens, see below.

发生的情况是,如果键 (=x) 不存在,则调用 my_function 时不带任何参数,并使用函数针对键 (=x) 返回的值更新字典).像这样的东西:

if "key" not in dictionary:
dictionary["key"] = my_function()
return dictionary["key"]

关于python - 函数执行 python 2.7 中的 dictionary.get 中的键是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53058135/

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