表达式中的条件

时间:2015-03-13 07:00:10

标签: python python-2.7

我很好奇是否有可能这样的事情:

print "lajsdflk"+ (if x>1:"123123";else:"0000000") +"!@#"

不是专门打印,而是任何带数字的功能;另一个例子:

print 596* (if statementX: 6545; else: 9874) /63

如果可能的话,我想将它保持在一行。

1 个答案:

答案 0 :(得分:5)

您可以使用conditional expression,就像这样

>>> "lajsdflk" + ("123123" if 5 > 1 else "0000000") + "!@#"
'lajsdflk123123!@#'
>>> "lajsdflk" + ("123123" if 0 > 1 else "0000000") + "!@#"
'lajsdflk0000000!@#'

由于Python接受if表达式中的任何Truthy值,您甚至可以使用任何函数,例如

>>> "lajsdflk" + ("123123" if "abcd1234".isalnum() else "0000000") + "!@#"
'lajsdflk123123!@#'

人们使用另一种技巧。它就像这样

>>> "lajsdflk" + ("0000000", "123123")[5 > 1] + "!@#"
'lajsdflk123123!@#'
>>> "lajsdflk" + ("0000000", "123123")[0 > 1] + "!@#"
'lajsdflk0000000!@#'

这里,准备具有可能结果的元组,并且基于比较操作的结果,选择可能的值。在这里,5 > 1被评估并被发现是Truthy,因为Python的True等于1而False等于05 > 1评估为1。

>>> 0 == False
True
>>> 1 == True
True

注意:这个技巧有问题。考虑这种情况,

>>> 1 + (2, 3/0)[4 > 0] + 5
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

因为,在创建元组时,会评估所有值,并且Python不能将1除以0。但是,这个问题不会出现在条件表达式中,

>>> 1 + (2 if 4 > 0 else 3/0) + 5
8

因为它仅在分支被命中时才评估值。