[英]Convert to lambda expression?
是否可以将以下内容转换为 lambda 表达式?
def default(o):
if isinstance(o, (datetime.date, datetime.datetime)):
return o.isoformat()
json.dumps(raw, default=default)
就像是:
json.dumps(raw, default=lambda o: o.isoformat() if isinstance(o, (datetime.date, datetime.datetime))...? )
您需要一个else
来完成条件表达式。 由于 function 如果不执行显式return
语句,则默认返回None
,这就是你的else
应该是什么。
json.dumps(raw, default=lambda o: o.isoformat() if isinstance(o, (datetime.date, datetime.datetime)) else None)
正如您所描述的,您还可以在此处添加 else 语句来处理从 if 检查返回 false 的 output (拆分行以获得一些可读性,python 可能更喜欢 oneliner)。
json.dumps(raw, default=lambda o: o.isoformat()
if isinstance(o, (datetime.date, datetime.datetime))
else None)
应该能够:
default = lambda o: o.isoformat() if isinstance(
o, (datetime.date, datetime.datetime)) else o.__dict__
您也可以使用None
作为您的回报,但如果您要包含JSONEncoder
无法使用的自定义 object ,请查看执行此操作时会发生什么:
default = lambda o: o.isoformat() if isinstance(
o, (datetime.date, datetime.datetime)) else None
class A:
def __init__(self, x):
self.x = x
a = A(10)
d = {'date': datetime.datetime.now(), 'myobject': a}
f = json.dumps(z, default=default)
>>> json.loads(f)
{'date': '2020-08-13T22:35:46.872594', 'myobject': None}
同样的事情,但使用o.__dict__
:
>>> json.loads(f)
{'date': '2020-08-13T22:36:22.512864', 'myobject': {'x': 10}}
尽管使用自定义 object 理想情况下,您应该将__repr__
设置好,然后您甚至可以重新创建 object。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.