繁体   English   中英

转换为 lambda 表达式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM