• Python中3元运算符的实现


    这是今天在温习lambda表达式的时候想到的问题,众所周知C系列语言中的 三元运算符(?:)是一个非常好用的语句,

    关于C中的三元运算符
    表达式1?表达式2:表达式3

    那么在python应该如何实现呢,请看下面例子:

    答案是:

    X = (表达式1)and 表达式2(真值返回)or 表达式3(假值返回)

    举个例子:

    def main():
        y = 5
        x = (y > 5) and 2 or 4
        print x
        pass

    这段代码的是意思的输出是4,可以把表达式的条件改为(y<=5)这时候输出就是2

    为什么能得到这样的结果:

    •  0、''、[]、()、{}、None 在布尔上下文中为假;其它任何东西都为真。
    •  在Python 中,and 和 or 执行布尔逻辑演算,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。
    •  如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。上下文中的某个值为假,则 and 返回第一个假值。
    •  如果有一个值为真,or 立刻返回该值。如果所有的值都为假,or 返回最后一个假值

    基于上述的背景,你应该还能理解这个表达式的含义了吧。

    “注:“里面应该是这个用法的一些缺陷,如果表达式2或3是几个定义的假值( 0、''、[]、()、{}、None )之一,就会影响判断了,我的建议是吧这些假值都用字符串的形式表现,并且将“”特殊处理为“ ”。后续再做判断

    再次见识到Python的强大,如果您有什么见解欢迎评论。

    后记:

    最近看了一些文章,有位大神对这个问题对这个缺陷给了一个完美的解决方案

    X = (表达式1)and [表达式2(真值返)]or [表达式3(假值返回)](注:表达式2 以及 表达3 不能为0、''、[]、()、{}、None)

    对表达式2,3用中括号括起来,这样两者的值将永远不会为假,这个解决方案的确不错。

  • 相关阅读:
    java如何计算对象的大小
    java多线程实现主线程等待子线程执行完问题
    再次理解多线程线程安全问题(理解java内存模型后)
    关于局部变量在循环里的生存法则
    【CSS3】transform-origin原点旋转
    面向对象编程(本章小结)
    引入在线编程和编译站点
    关于获取素数 一个小程序
    C++ I/O
    HDU2571
  • 原文地址:https://www.cnblogs.com/amsun/p/3418648.html
Copyright © 2020-2023  润新知