首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一行中使用一对if和else

在一行中使用一对if和else
EN

Stack Overflow用户
提问于 2021-03-14 12:41:34
回答 3查看 53关注 0票数 1

我正试着用

代码语言:javascript
复制
"HCA_Status": 5 if CS.hcaSwitch else 7 if (lkas_enabled and apply_steer != 0) else 3,

在我的代码中,如果hcaSwitch为真(它是布尔值控制的否则),我希望" HCA_Status“为5,否则为7,如果lkas_enabled为真,应用方向不为零,如果应用方向不等于零,而lkas_enabled为假,我需要HCA_Status为3

这有意义吗?如果这让人困惑,我很抱歉

下面是这段代码的完整代码

代码语言:javascript
复制
    def create_pq_steering_control(packer, bus, apply_steer, idx, lkas_enabled, CS):
  values = {
    "HCA_Zaehler": idx,
    "LM_Offset": abs(apply_steer),
    "LM_OffSign": 1 if apply_steer < 0 else 0,
    "HCA_Status": 5 if CS.hcaSwitch else 7 if (lkas_enabled and apply_steer != 0) else 3,
    "Vib_Freq": 16,
  }

这有意义吗?

代码语言:javascript
复制
def create_pq_steering_control(packer, bus, apply_steer, idx, lkas_enabled, CS):
  values = {
    "HCA_Zaehler": idx,
    "LM_Offset": abs(apply_steer),
    "LM_OffSign": 1 if apply_steer < 0 else 0,
    "HCA_Status": (
      if CS.hcaSwitch:
        5
      elif lkas_enabled and apply_steer !=0:
        3
      else:
        7
    ),
    "Vib_Freq": 16,
  }
EN

回答 3

Stack Overflow用户

发布于 2021-03-14 12:51:26

if-else三元表达式有三个槽:<then> if <condition> else <default>您可以将任何表达式放在这些槽中的任何一个槽中,包括另一个if-else。为了消除歧义,请使用括号。

代码语言:javascript
复制
(a if b else c) if d else e  # "if b" expression in "if d"'s <then> slot.
a if b else (c if d else e)  # "if d" expression in "if b"'s <default> slot.

此外,括在括号中的表达式直到结束括号时才结束,因此

代码语言:javascript
复制
(
    a
    if
    b
    else
    c
)

等同于

代码语言:javascript
复制
a if b else c
票数 1
EN

Stack Overflow用户

发布于 2021-03-14 12:55:06

如果这是可能的,这可能不是一个好主意来做风格明智。

你可以做的是,有一个检查条件的函数,然后返回一个值。

代码语言:javascript
复制
def hca_status_function(CS, lkas_enabled, apply_steer):
    
    hca_status=None
    if CS.hcaSwitch:
        hca_status=5
    elif lkas_enabled and apply_steer != 0:
          hca_status=7
    else:
        hca_status=3
    return hca_status

values = {
    "HCA_Zaehler": idx,
    "LM_Offset": abs(apply_steer),
    "LM_OffSign": 1 if apply_steer < 0 else 0,
    "HCA_Status": hca_status_function(CS, lkas_enabled, apply_steer),
    "Vib_Freq": 16,
  }
票数 1
EN

Stack Overflow用户

发布于 2021-03-14 13:22:18

我刚试过这个"HCA_Status": 5 if CS.hcaSwitch else 3 if (lkas_enabled and apply_steer !=0) else 7,,它现在编译/引导了..如果工作正常,必须在AM中进行测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66621147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档