条件表达式中的
问题描述:
我很好奇,如果这样的事情是可能的中间:条件表达式中的
print "lajsdflk"+ (if x>1:"123123";else:"0000000") +"[email protected]#"
未进行具体打印但只是数字的任意功能;另一个例子:
print 596* (if statementX: 6545; else: 9874) /63
如果可能我想保持一行。
答
您可以使用conditional expression,这样
>>> "lajsdflk" + ("123123" if 5 > 1 else "0000000") + "[email protected]#"
'[email protected]#'
>>> "lajsdflk" + ("123123" if 0 > 1 else "0000000") + "[email protected]#"
'[email protected]#'
因为Python接受在if
的表达任何Truthy值,你甚至可以使用任何功能,这样
>>> "lajsdflk" + ("123123" if "abcd1234".isalnum() else "0000000") + "[email protected]#"
'[email protected]#'
还有另一个人使用的技巧。它是这样的
>>> "lajsdflk" + ("0000000", "123123")[5 > 1] + "[email protected]#"
'[email protected]#'
>>> "lajsdflk" + ("0000000", "123123")[0 > 1] + "[email protected]#"
'[email protected]#'
在这里,一个元组准备好可能的结果,并根据比较操作的结果,选择可能的值。在这里,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不能0
划分1
。但是,这个问题不会出现在条件表达式中,
>>> 1 + (2 if 4 > 0 else 3/0) + 5
8
因为它只有在分支命中时才计算值。
+0
我欣赏额外的细节!我想我现在明白了,谢谢! – Kweb123 2015-03-13 07:07:55
我添加了excel标签,因为它看起来像你的问题更多地是关于excel而不是关于Python。 – orlp 2015-03-13 07:02:34
语法如下:'print 596 *(6545 if True else 9874)/ 63' – perreal 2015-03-13 07:02:41