缩短Python Lambda

den*_*icz 1 python-2.7

下面的代码获取一个值,如果值是basestring,则返回它.如果该值不是basestring,则将其转换为字符串,但如果值为None,则返回空字符串.

有更多的Pythonic方式吗?

lambda value: value if isinstance(value, basestring) else str(value) if value is not None else ""
Run Code Online (Sandbox Code Playgroud)

Cor*_*mer 6

我甚至不打算检查它是否是一个字符串,只是转换它(这将在Python 3.x但不是2.x).

lambda value: str(value) if value is not None else ""
Run Code Online (Sandbox Code Playgroud)

原因是如果它已经是a str,那么调用str()基本上什么都不做.

>>> s = 'test'
>>> id(s)
35584672
>>> id(str(s))
35584672
>>> j = str(s)
>>> id(j)
35584672
Run Code Online (Sandbox Code Playgroud)

注意他们都有相同的id?这意味着没有创建新对象.

  • @dennismonsewicz然后你的lambda有时会返回一个`unicode`,有时候是一个`str`.这似乎语无伦次.这确实是你想要的吗?因为简单的解决方案是在任何地方使用`unicode`而不是`str(...)`. (3认同)