zoukankan      html  css  js  c++  java
  • tricks about andor in python

    看python多线程那部份的东西时看到一个好玩的东西,因为我也是初学python。所以写在这里加强一下记忆。

    关于and

    先看个例子:

    1 ‘a' and 'b' and 'c'
    2 '' and 'b'
    3 'a' and 'b'

      这个的输出是:

    1 'c'
    2 ''
    3 'b'

    解释一下为什么:

    在布尔环境中除了0,‘’,{},[],(),None是假以外,其它几乎所有东西的布尔环境都是真。在用and的时候如果所有的布尔环境都是真,那么返回的是最后一个布尔环境为真的值。

    如果有一个为假,则返回第一个布尔环境为假的值。

    关于 or

    1 'a' or 'b'
    2 '' or 'b'
    3 '' or {} or None

     输出:

    1 'a'
    2 'b'
    3 None

      同样给出这段输出的解释:

    不难发现or的规则和and是类似的:遇到布尔环境为真的立即返回这个值,所以第一个输出是‘a’,而第二个中‘’为假‘b’为真,所以返回的是‘b’。当所有的值的布尔环境都为假时,返回的是最后一个值。

    关于and-or

    熟悉c语言或者java语言的一定知道三元预算符这个说法,也就是bool?1:0这种形式,其实and-or和这个类似。

    来吧,少年,再举个栗子

    1 a = 'first'
    2 b = 'second'
    3 1 and a or b
    4 0 and a or b

      输出如下:

    1 ‘first’
    2 ‘second’

    原因是酱紫的:1为真对吧,所以返回的是a;0为假,所以返回的是b。

    但四,这里有陷阱!

    比如:

    1 a = ''
    2 b = 'second'
    3 1 and  a or b

    你猜它的输出是什么

    没错,你想错了>~~<!

    'second'

    因为1 and '' 的值为''(还记得前面说过的吗),'' or 'second'的运算结果是‘second’。

    所以在用and-or的时候一定要保证a为真。否则会蛋疼的少年!

    那么如何规避这种错误的结果呢,《Dive into python》中给出了思路

    你可以这样,这样,然后这样>~<(为毛我第一次写博客这么兴奋啊)

    1 a = ''
    2 b = 'second'
    3 (1 and [a] or [b])[0]

    因为[a]是一个非空列表,所以[a]一定是真。

    最后要说的是and,or,and-or的远算都是从左往右。

    写完鸟》!《

  • 相关阅读:
    python 学习笔记(二)
    python list的简单应用
    linux命令--------系统自带vi/vim命令教程
    归并排序的时间复杂度分析
    webapplication发布
    安装windows phone 7
    部署webservice到远程服务器
    SQLserver2005描述对数据的调用
    11.python-过滤器(filter)
    10.python-映射函数(map)
  • 原文地址:https://www.cnblogs.com/lianwl/p/3180369.html
Copyright © 2011-2022 走看看