Python 通过dict.get()调用函数
我正在尝试使用Python 通过dict.get()调用函数,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我正在尝试使用dict.get()调用函数 但是它返回0x0处的对象…,如果我调用像foo()和oof()这样的函数,它将调用这两个函数,而不仅仅是请求的函数。您的字典值就是函数。但是,您需要记住实际调用函数: a.get('f', 'None')() 正如预期的那样,结果是“foo”被打印出来: 请注意,括号()表示要运行该函数。要了解发生了什么,您还可以检查a['f']的类型: print(type(a['f'])) <class 'function'> 实际上,您将使用带
dict.get()
调用函数
但是它返回0x0处的
对象…
,如果我调用像foo()
和oof()
这样的函数,它将调用这两个函数,而不仅仅是请求的函数。您的字典值就是函数。但是,您需要记住实际调用函数:
a.get('f', 'None')()
正如预期的那样,结果是“foo”被打印出来:
请注意,括号()
表示要运行该函数。要了解发生了什么,您还可以检查a['f']
的类型:
print(type(a['f']))
<class 'function'>
实际上,您将使用带有return
语句的函数,以避免函数打印内容(并返回None
)或返回字符串的不一致性。您的字典值是函数。但是,您需要记住实际调用函数:
a.get('f', 'None')()
正如预期的那样,结果是“foo”被打印出来:
请注意,括号()
表示要运行该函数。要了解发生了什么,您还可以检查a['f']
的类型:
print(type(a['f']))
<class 'function'>
在实践中,您将使用带有return
语句的函数,以避免函数打印内容(并返回None
)或返回字符串的不一致性。只需小心返回“None”
的情况,或者只需执行a.get('f',lambda:'None')()
。但是我认为KeyError
处理更具可读性,即使有点冗长。只要小心返回“None”
的情况,或者您可以只执行a.get('f',lambda:'None')()
。但是我认为KeyError
处理更具可读性,即使更详细一点。您希望None
案例会发生什么?什么都没有或抛出错误?@dawg是为了防止没有名为“f”的键,我知道这是默认值。我的问题是:如果没有名为f
的函数,您希望发生什么?一个停止程序的错误,或者什么都没有?什么都没有…您希望None
案例会发生什么?什么都没有或抛出错误?@dawg是为了防止没有名为“f”的键,我知道这是默认值。我的问题是:如果没有名为f
的函数,您希望发生什么?一个停止程序的错误或者什么都没有?什么都没有。。。
def call_func(dispatcher, key):
try:
dispatcher[key]()
except KeyError:
return 'None'
call_func(a, 'f')