【问题标题】:Python: shortcut conditional expressionPython:快捷条件表达式
【发布时间】:2021-04-20 17:14:12
【问题描述】:

快捷条件表达式:
expression1 if condition else expression2
x=1 if a>3 else 2
但是:我可以在开头有 2 个表达式吗?
x=1,b=3 if a>3 else 2

感谢>idontknow,解决办法是>

    previousTime,BS_Count=(db_row_to_list[0][14],BS_Count+1) if db_row_to_list[0][14] is not None else (db_row_to_list[0][3],BS_Count)

【问题讨论】:

  • 你为什么不自己尝试一下?
  • 你好????!你能告诉我们更多关于这些表达式的用例吗?一些上下文肯定会有所帮助! ??????
  • 没关系。我现在明白你的问题了????
  • @RandomDavis 我认为这是因为它对 OP 不起作用,他们想学习如何做这样的事情????。

标签: python conditional-statements expression shortcut


【解决方案1】:

不完全是。为此,可以使用 if 语句。

if a > 3:
    x = 1
    b = 3
else:
    x = 2
    b = None

如果你想让所有东西都变成一个单行器,你可以在 Python 中使用元组解包。元组解包基本上是从元组中取出元素并将它们存储为变量,而不是元组的元素。

这个概念的应用是这样的:

x, b = (1, 3) if a > 3 else (2, None)

请注意,它是单线器! ?

编辑:要在更新的上下文中回答您的问题:

您可以使用以下更短的代码。我想效果应该是一样的。

a = 3
b = 7
c = 6
a, b = (8, b+1) if c > 3 else (5, b)
print(a, b)

【讨论】:

  • 感谢那些给出“元组”答案的人。在我的实际代码中:我想输入一个 'count+=1' 作为第二个表达式。我想这是不可能的。我想我可以把它放在一个函数中:num=doIt() if a>3 else 5,在 doIt() 里面我可以增加我的计数。
  • @pythonDerby 你能详细说明一下吗?你到底想做什么?这样的事情对您的上下文有意义吗? points += (100 if answer_correct is True else 0)
  • 我在下面添加了上下文>>(即,在这些评论框中不容易!)
  • @pythonDerby 你可以随时edit your original question 提供上下文。
  • a, b = (8, b+1) if c > 3 else (5, b),我试过了,但试过'b+=1',当我遇到错误时,我中止了该实验;)再次感谢。
【解决方案2】:

在你的例子中:

x=1 if a>3 else 2

条件表达式部分为:

1 if a>3 else 2

因此,您将该条件表达式的结果分配给x

在您的第二个示例中,这是无效的语法:

x=1,b=3 if a>3 else 2

那是因为它相当于:

(1,b)=3 if a>3 else 2

或者,作为一个更简单的例子:

(1,b)=3

这是无效的语法,因为您不能在 Python 中执行类似 1 = 3 的操作,而这正是该代码试图执行的操作。虽然如果元组的两个元素都不是文字,你会得到一个不同的错误:

(b,a)=3
TypeError: cannot unpack non-iterable int object

因此,如果您想对一个条件表达式进行多次赋值,您可以让条件表达式返回一个元组,并让您的左侧成为您要为其赋值的两个变量的元组:

x,b=(1, 3) if a>3 else (2, 2)

这相当于:

if a > 3:
    x = 1
    b = 3
else:
    x = 2
    b = 2

这是我假设您使用原始代码的意图。

【讨论】:

  • 干杯,我试图将 if-else 放入一个衬里,但我想在 python 中这是不可能的......但是! if db_row_to_list[0][14] is not None: previousTime=db_row_to_list[0][14] BS_Count+=1 else: db_row_to_list[0][3]
【解决方案3】:

你可以使用tuples:

>>> a = 4
>>> (x, b) = (1, 3) if a > 3 else (2, 2)
>>> x
1
>>> b
3
>>>

【讨论】:

    【解决方案4】:

    声明x = 1, b = 3 if a > 3 else 2 无效。不过,您仍然可以使用单线:

    x, b = 1 if a > 3 else 2, 3 if a > 3 else 2
    

    这会将 x 的值设置为 1 if a > 3 else 2 并将 b 的值设置为 3 if a > 3 else 2

    【讨论】:

      【解决方案5】:

      对于上下文:这是实际代码>

           if db_row_to_list[0][14] is not None:  
              previousTime=db_row_to_list[0][14]    
              BS_Count+=1  
           else:  
              db_row_to_list[0][3] 
      

      我可以做到这一点:即。使用一个函数 > 但它会更好吗??

           num=3  
           num1=7
           def doIt():
              print("doIt()")
              global num,num1
              num=8
              num1+=1
              return num
      
           a=6
           num=doIt() if a>3 else 5
           print(num," ",num1)
      

      【讨论】:

      • 我已经根据这个上下文更新了我的答案。
      猜你喜欢
      • 1970-01-01
      • 2022-07-27
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      相关资源
      最近更新 更多