python - 表达式中间的条件

标签 python python-2.7

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

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/

相关文章:

python - 如何绘制正态分布

python - 在 Django 中填充 URLFields 的合法值的确切模式是什么?

python - Appengine Python 中的并发请求

在 Cent OS 5 下编译 gdb 时 Python 丢失或不可用

python - Pandas - 选择数据框中任意列中包含特定正则表达式的行

python - 在 Django 模型中使用自己的字段定义其他字段

python - 取消 pandas 数据框中的字典

macos - 自从在Mac OS X Yosemite上安装python 3以来,ipython Notebook无法启动

python - 在 Windows 上查找我的 SimpleHTTPServer IP 地址

python-2.7 - sqlite3 python 2.7 如何从 sqlite3 启用更详细的错误报告(异常)?