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

2024-05-03 13:48:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

从一个冗长的角度来看:

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]

Tags: 方法lambda函数代码answernone列表get
3条回答

我们可以在python3.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:

虽然我不完全理解这样做的原因(这比其他任何方法都不清楚),但下面是一个使用lambda的例子:

>>> 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
>>>

相关问题 更多 >