如果不是none,则对另一个函数的结果执行一个函数

Perform a function on result of another function if not none

我有一小段代码,里面有两个函数。 如果第一个函数收到响应,我想调用它,然后对该响应执行一个函数。然后将结果赋给另一个变量。

详细来说,它看起来像:

result = get_something()
if result:
    answer = transform(result)

或者我可以做

if get_something():
    answer = transform(get_something())

但这需要调用第一个函数两次

有没有办法在一行上完成所有这些操作,有点像三元(也许是 lambda)

answer = transform(result) if get_something() else None

显然在上面没有说明结果是什么,但我基本上需要说明 result = get_something()

我可以在列表理解中做到这一点,但这似乎有点愚蠢

   answer = [transform(x) for x in [get_something()] if x][0]

我们可以在 Python 3.8 中使用 assignment expressions:

if (result := get_something()) is not None:
    # do something with result

在最新的 Python 版本 (Python 3.8) 中有一个新的作业可能对您有用,:=:

There is new syntax := that assigns values to variables as part of a larger expression. It is affectionately known as “walrus operator” due to its resemblance to the eyes and tusks of a walrus.

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

In this example, the assignment expression helps avoid calling len() twice:

虽然我不完全理解这样做的原因(不如其他任何人清楚),但这里有一个使用的例子λ:

>>> def get_something(flag):  # Added the flag argument, to mimic different return values
...     return 5 if flag else None
...
>>> answer = (lambda func, arg: func(arg) if arg else None)(int, get_something(True))
>>> answer
5
>>> answer = (lambda func, arg: func(arg) if arg else None)(int, get_something(False))
>>> answer
>>>