我很好奇这样的事情是否可行:
print "lajsdflk"+ (if x>1:"123123";else:"0000000") +"!@#"
Run Code Online (Sandbox Code Playgroud)
不是专门打印,而是任何带数字的功能; 另一个例子:
print 596* (if statementX: 6545; else: 9874) /63
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想把它保持在一条线上.
你可以像这样使用条件表达式
>>> "lajsdflk" + ("123123" if 5 > 1 else "0000000") + "!@#"
'lajsdflk123123!@#'
>>> "lajsdflk" + ("123123" if 0 > 1 else "0000000") + "!@#"
'lajsdflk0000000!@#'
Run Code Online (Sandbox Code Playgroud)
由于Python在if表达式中接受任何Truthy值,您甚至可以使用任何函数,如下所示
>>> "lajsdflk" + ("123123" if "abcd1234".isalnum() else "0000000") + "!@#"
'lajsdflk123123!@#'
Run Code Online (Sandbox Code Playgroud)
人们使用另一种技巧.它是这样的
>>> "lajsdflk" + ("0000000", "123123")[5 > 1] + "!@#"
'lajsdflk123123!@#'
>>> "lajsdflk" + ("0000000", "123123")[0 > 1] + "!@#"
'lajsdflk0000000!@#'
Run Code Online (Sandbox Code Playgroud)
这里,准备具有可能结果的元组,并且基于比较操作的结果,选择可能的值.在这里,5 > 1被评估并发现是Truthy,因为Python的True等于1和False等于0,所以5 > 1评估为1.
>>> 0 == False
True
>>> 1 == True
True
Run Code Online (Sandbox Code Playgroud)
注意:这个技巧有问题.考虑这种情况,
>>> 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
Run Code Online (Sandbox Code Playgroud)
因为,在创建的元组时所有的值被评估和Python不能分裂1通过0.但是,这个问题不适用于条件表达式,
>>> 1 + (2 if 4 > 0 else 3/0) + 5
8
Run Code Online (Sandbox Code Playgroud)
因为它仅在分支被命中时才评估值.
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |