在match-case结构中测试对象的可调用性
为了让大家更明白,我有一个函数,它的作用是把字典里的键进行匹配,从而执行某些操作。这个函数可以接收一系列要匹配的键,或者一个能够识别这些键的函数。
我在想,能不能用 match-case
这种模式来实现这个功能。我尝试了以下的代码:
def process_fields(dataset,function,fields):
"""Apply function to selected values of a dictionary
fields can be a list of keys whose values shall be processed,
or a predicate that returns True for the targeted fields."""
match fields:
case list() | set() | tuple():
key_matcher = lambda x:x in fields
case <what I'm looking for>:
key_matcher=fields
walk_items(dataset,key_matcher,function)
到目前为止,我尝试过:
case callable(function):
key_matcher=function
case typing.Callable(function):
key_matcher=function
我在官方文档里找不到我需要的信息。我是不是漏掉了什么,还是说这个功能根本做不到?
这里有个例子,避免太过抽象。请注意,我并不是在寻找解决这个特定问题的替代方案,我自己完全可以做到;我只是想知道是否存在一种方法,可以在这个特定情况下使用 Python 的这种结构。
编辑:虽然这个函数本身不是帖子关注的重点,但我添加了文档字符串,并稍微简化了一下,以便更清楚地说明这个例子。
1 个回答
1
我可能误解了你想要做的事情,但也许这能帮到你(如果没有帮助,我会删掉这段)。
如果你想检查一个对象是否可以被调用,也就是看看它是不是一个可以像函数一样使用的东西,那么可以这样做:
from collections.abc import Callable
def func():
pass
f = func
match f:
case Callable():
print("Yes it's callable")