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字典而已