美文网首页
Python中的?:表达式语法

Python中的?:表达式语法

作者: 苏啦啦哇咔咔 | 来源:发表于2018-12-13 14:45 被阅读17次

在java中我们可以通过?:表达式简洁地进行判断和赋值。
例如:

x = ((p != None) ? p.val:0)
y = ((q != None) ? q.val:0)

但是在Python中语法稍有不同,以下代码可以实现相同效果。
但是这种方法必须确定and后的第一个值为TRUE

x = ((p != None) and p.val or 0)
y = ((q != None) and q.val or 0)

用“and”替代“?”并且用 “or” 替代“:”

另一种写法:

x = p.val if (p != None) else 0
y = q.val if (q != None) else 0

这种方法更为保险。

补充:摘自https://www.cnblogs.com/xxiong1031/articles/7099901.html侵删

局限性

不难看出,三元运算在python中事实上可以通过借用布尔求值表达。然后,有时会有点小问题。
举个例子,char *ret = x ? "" or "VAL"。根据前面的例子,我们很自然想到在python里应该这样写,ret = x and "" or "VAL"
错了!不管x的布尔求值是真还是假,ret得到的总是"VAL"。因为在python中对空字符串的布尔求值为false,这样x and ""永远都是false,所以ret得到的自然总是"VAL"了。
解决这个问题有两种办法,
第一种,ret = not x and "VAL" or ""
第二种,ret = x and [""] or ["VAL"],然后每次取ret[0]作为返回值,这是因为[""]在布尔求值时值为true。

讨论一:
第一种方法代码明显要简洁,效率也高,那么还有必要使用第二种么?当然,第一种办法有局限性,只有当我们非常明确其中一个值布尔求值时不可能为false时才能使用。在我们的示例中,由于"VAL"肯定返回true所以可以使用。如果是两个变量呢,像这样ret=x and val1 or val2,你就只能老老实实写成ret=x and [val1] or [val2],然后取ret[0]作为结果了。因为这行语句所表达的不是“当x为真返回val1,否则返回val2”,而是“当x为真并且val1为真返回val2,否则返回val2”。

讨论二:
大家都知道python里有list和tuple,前面这行代码ret=x and [""] or ["VAL"]我们就是通过list解决,有的人可能偏爱tuple,于是就会这样写ret=x and ("") or ("VAL")。错了!这里ret[0]永远都是空字符串(在2.5上测试)。这是我比较faint的一点,为啥[""]为真而("")为假呢?

相关文章

  • Python正则表达式

    正则表达式中,常用的匹配模式: python 正则表达式的语法: 使用正则表达式,需要导入模块: 输出结果:['h...

  • Django的路由系统

    基本格式 分组命名匹配 在Python的正则表达式中,分组命名正则表达式组的语法是(?Ppattern...

  • day18-课后总结

    正则表达式 1.正则表达式语法 python中通过re模块中相应的方法来支持正则表达式的匹配、查找和替换的功能 f...

  • Python 三元表达式

    Python 2.5中,定义了三元表达式,简化了条件表达式: 语法格式: X if C else Y 有了三元表...

  • 速撸《python学习手册》--第10-15章-语句和语法

    第10章 python语法简介 再看python程序结构 程序由模块构成 模块包含语句 语句包含表达式 表达式建立...

  • 正则表达式

    Python中包含正则表达式的模块。 使用前先导入正则表达式模块: 语法: re.match 从头开始匹配re.s...

  • Python正则表达式

    目录一、正则表达式语法二、Python支持的其它正则表达式的标志位flags三、标准库模块 re Python正则...

  • 2019-01-18srcrapy框架xpath和css选择器语

    python 爬虫: srcrapy框架xpath和scc选择器语法 Xpath基本语法 一、常用的路径表达式: ...

  • 爬虫之道-正则表达式1

    应该明确的是,在python爬虫中,正则表达式应该是分为两部分: re模块中各个方法的运用 正则表达式语法 re模...

  • Python中的?:表达式语法

    在java中我们可以通过?:表达式简洁地进行判断和赋值。例如: 但是在Python中语法稍有不同,以下代码可以实现...

网友评论

      本文标题:Python中的?:表达式语法

      本文链接:https://www.haomeiwen.com/subject/rqtbhqtx.html