为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

达令说 2022-06-14 17:38:26
我有一小段代码,里面有两个函数。如果它收到响应,我想调用第一个函数,然后对该响应执行一个函数。然后将结果分配给另一个变量。以冗长的方式看起来像: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() 两次:


查看完整回答
反对 回复 2022-06-14
?
aluckdog

TA贡献1847条经验 获得超7个赞

我们可以在Python 3.8中使用赋值表达式

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


查看完整回答
反对 回复 2022-06-14
?
桃花长相依

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

>>>


查看完整回答
反对 回复 2022-06-14
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信