如何解决转换为lambda表达式?
是否可以将以下内容转换为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.datetime))...? )
解决方法
您需要一个else
才能完成条件表达式。由于如果函数不执行显式的None
语句,则默认情况下会返回return
,因此您的else
应该是这样。
json.dumps(raw,default=lambda o: o.isoformat() if isinstance(o,(datetime.date,datetime.datetime)) else None)
,
正如您所描述的,您还可以在其中添加else语句以处理从if检查返回false的输出(为了获得一定的可读性,分割的行,python可能更喜欢oneliner)。
json.dumps(raw,default=lambda o: o.isoformat()
if isinstance(o,datetime.datetime))
else None)
,
应该能够:
default = lambda o: o.isoformat() if isinstance(
o,datetime.datetime)) else o.__dict__
您也可以使用None
来获得回报,但是如果您要包含一个JSONEncoder
不会出现的自定义对象,那么您会发现这样做的后果:
default = lambda o: o.isoformat() if isinstance(
o,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}}
尽管理想情况下,您应该使用自定义对象设置__repr__
,然后甚至可以重新创建对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。