我有一小段代码,里面有两个函数。如果它收到响应,我想调用第一个函数,然后对该响应执行一个函数。然后将结果分配给另一个变量。以冗长的方式看起来像: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]
3 回答
开满天机
TA贡献1786条经验 获得超13个赞
在最新的 Python 版本(Python 3.8)中,有一个可能对您有用的新任务:=:
有一种新的语法:=可以将值作为更大表达式的一部分分配给变量。因其酷似海象的眼睛和獠牙,被亲切地称为“海象操作员”。
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
在这个例子中,赋值表达式有助于避免调用 len() 两次:
桃花长相依
TA贡献1860条经验 获得超8个赞
尽管我不完全理解以这种方式做事的原因(这比其他任何方式都不太清楚),但这里有一个使用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
>>>
添加回答
举报
0/150
提交
取消