函数执行键是否在中字典.get在python 2.7中

2024-03-29 14:45:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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())

不管键是否丢失,它都会执行函数,所以我想让我们去掉括号,然后我做了:

my_dictionary_object.get("key", my_function)

(以防万一)

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

但是没有lambda的一个没有执行(因为它从未被调用过)同样的情况也发生在有lambda的一个。你知道吗

TL;DR

我的问题是,如果字典中有键,为什么要执行函数?

是我做错了什么,还是我错过了什么?你知道吗


Tags: 对象方法lambdakey函数代码noneget
1条回答
网友
1楼 · 发布于 2024-03-29 14:45:04

在: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()在技术上不是第二个参数。作为执行该函数的结果返回的结果值是第二个参数,希望它能解释错误的位置。你知道吗


您要查找的内容实际上是在另一个名为^{}的容器中捕获的。你知道吗

你要做的是:

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"]

相关问题 更多 >