我很好奇这样的事情是否可能:
print "lajsdflk"+ (if x>1:"123123";else:"0000000") +"!@#"
不是专门打印,而是任何带有数字的函数;另一个例子:
print 596* (if statementX: 6545; else: 9874) /63
如果可能的话,我想将其保持在一行。
最佳答案
您可以使用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
等于 0
>, 5 > 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
因为它仅在分支被击中时才评估值。
关于python - 表达式中间的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29026546/