python3 字典自调用

 

看下面一段代码,return val(self) if callable(val) else val 这个返回是0, 是我想要的

而 callable(val) and val(self) or val 这个返回是  <function <lambda> at 0x00000000020AD280> 这是为啥呢?

class ParamDict(dict):
    def __getitem__(self, key):
        val = dict.__getitem__(self, key)
        # return val(self) if callable(val) else val        # 0
        return callable(val) and val(self) or val           # <function <lambda> at 0x00000000020AD280>

aaa = ParamDict({
    "iptype": lambda x:0 if '.' in x['ip'] else 1,
    "ip": '127.0.0.1',
    "port": 80,
})

print(aaa['iptype'])

 

 

好久没看这个问题了,如今看来,原因为:

因为val(self)为0,是假值,所以返回的是val,是匿名函数。
所以直接用if else好了,简单明了,没表要用三段表达式
 
 
我这里直接返回val(self)也是可以的,使用callable不过是为了确保非lambda表达式也可以使用这里的自定义ParamDict字典而已
 
 
 
posted @ 2022-04-11 15:14  lynalee  阅读(80)  评论(1编辑  收藏  举报