关于判断语句中如:while not xx: 或者:if not xx: 的含义及用法解析

  1. name=''
  2.  
  3. while not name:
  4.  
  5. name=raw_input(u'请输入姓名:')
  6.  
  7. print name

python中的not具体表示是什么:

  1. pythonnot是逻辑判断词,用于布尔型TrueFalsenot TrueFalsenot FalseTrue,以下是几个常用的not的用法:
  2. (1) not与逻辑判断句if连用,代表not后面的表达式为False的时候,执行冒号后面的语句。比如:
  1. a = False
  2. if not a: (这里因为aFalse,所以not a就是True)
  3. print "hello"
  1. 这里就能够输出结果hello
  2. (2) 判断元素是否在列表或者字典中,if a not in ba是元素,b是列表或字典,这句话的意思是如果a不在列表b中,那么就执行冒号后面的语句,比如:
  1. a =
  2. b = [, , ]
  3. if a not in b:
  4. print "hello"
  1. 这里也能够输出结果hello
  1.  
  1. not x 意思相当于 if x is false, then True, else False
  1.  
  1. 代码中经常会有变量是否为None的判断,有三种主要的写法:
  1. 第一种是`if x is None`
  2.  
  3. 第二种是 `if not x:`
  4.  
  5. 第三种是`if not x is None`(这句这样理解更清晰`if not (x is None)`
  1. 如果你觉得这样写没啥区别,那么你可就要小心了,这里面有一个坑。先来看一下代码:
[python] view plaincopy

  1. >>> x =
  2. >>> not x
  3. False
  4. >>> x = []
  5. >>> not x
  6. False
  7. >>> x =
  8. >>> not x
  9. True
  10. >>> x = [] # You don't want to fall in this one.
  11. >>> not x
  12. False
  1.  
  2. python None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False ,即:
[python] view plaincopy

 
  1. not None == not False == not '' == not == not [] == not {} == not ()
  1. 因此在使用列表的时候,如果你想区分x==[]和x==None两种情况的话, 此时`if not x:`将会出现问题:
[python] view plaincopy

 
  1. >>> x = []
  2. >>> y = None
  3. >>>
  4. >>> x is None
  5. False
  6. >>> y is None
  7. True
  8. >>>
  9. >>>
  10. >>> not x
  11. True
  12. >>> not y
  13. True
  14. >>>
  15. >>>
  16. >>> not x is None
  17. >>> True
  18. >>> not y is None
  19. False
  20. >>>
  1. 也许你是想判断x是否为None,但是却把`x==[]`的情况也判断进来了,此种情况下将无法区分。
    对于习惯于使用if not x这种写法的pythoner,必须清楚x等于None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。 
    而对于`if x is not None``if not x is None`写法,很明显前者更清晰,而后者有可能使读者误解为`if (not x) is None`,因此推荐前者,同时这也是谷歌推荐的风格
  2.  
  3. 结论:
    `if x is not None`是最好的写法,清晰,不会出现错误,以后坚持使用这种写法。
    使用if not x这种写法的前提是:必须清楚x等于None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。

foo is None 和 foo == None的区别

  1. if foo is None: pass
  2. if foo == None: pass

如果比较相同的对象实例,is总是返回True 而 == 最终取决于 "eq()"

  1. >>> class foo(object):
  2. def __eq__(self, other):
  3. return True
  4.  
  5. >>> f = foo()
  6. >>> f == None
  7. True
  8. >>> f is None
  9. False
  10.  
  11. >>> list1 = [, , ]
  12. >>> list2 = [, , ]
  13. >>> list1==list2
  14. True
  15. >>> list1 is list2
  16. False

另外

  1. (ob1 is ob2) 等价于 (id(ob1) == id(ob2))
  1. 特别感谢!)本文摘自:http://blog.sina.com.cn/s/blog_b3eabfd30101hp1p.html

关于判断语句中如:while not xx: 或者:if not xx: 的含义及用法解析的更多相关文章

  1. if-else判断语句中经常犯的一个错误

    假设题目为:随便给定一个数,三种情况:(1)若小于0,输出为“小于0”:(2)若在0-50之间,则输出“在0-50之间”.(3)若大于50,则输出“大于50”. 解法:如果我这么写,运行一下看看. i ...

  2. Java判断语句中判断条件的执行顺序

    if判断里面如果是多个条件的判断,会按照从前往后的顺序执行.基本所有语言都是一致的设计,这样做能提高程序的效率. 比如: if ( conditionA && conditionB ) ...

  3. MySQL的简单条件判断语句

    在MySQL中条件判断语句常用于数据转换,基于现有数据创建新的数据列,使用场景还是比较多. 基础样式: CASE WHEN`条件`THEN`结果` ELSE`默认结果` END 在同一条判断语句中可以 ...

  4. Java日期时间API系列39-----中文语句中的时间语义识别(time NLP 输入一句话,能识别出话里的时间)原理分析

    NLP (Natural Language Processing) 是人工智能(AI)的一个子领域.自然语言是人类智慧的结晶,自然语言处理是人工智能中最为困难的问题之一(来自百度百科). 其中中文更是 ...

  5. if语句中的判断条件(nginx)

    if语句中的判断条件   正则表达式匹配:     ==:等值比较;     ~:与指定正则表达式模式匹配时返回"真",判断匹配与否时区分字符大小写:     ~*:与指定正则表达 ...

  6. sql 语句中使用条件判断case then else end

    sql 语句中使用条件判断case then else end范例: SELECT les.[nLessonNo] FROM BS_Lesson AS les WHERE les.[sClassCod ...

  7. aspcms中if判断语句的运用

    1.<h3 {if:"[list:isrecommend]"="1"} style="color:red;"{end if}>& ...

  8. python中判断语句用两个or连接的奇葩

    学python的时候犯的一个错误,放在这吧.就是在循环某个列表的时候不要去操作它,这是容易忽略的一个地方.所以如果要操作某个列表本身,那么先把该列表copy一份,然后再读取的时候读copy的那份.操作 ...

  9. DEDECMS模板中dede标签使用php和if判断语句的方法

    先来看看下面这个标签{dede:field.tong_gg php=yes}if(@me==""||empty(@me))@me="<p>无</p> ...

随机推荐

  1. 机器学习方法:回归(三):最小角回归Least Angle Regression(LARS),forward stagewise selection

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 希望与志同道合的朋友一起交流,我刚刚设立了了一个技术交流QQ群:433250724,欢迎对算法.技术.应用感 ...

  2. 常用python shell

    路径及文件操作 创建目录 os.mkdir(path_str) 列出当前文件夹中文件,存入string list中 os.listdir(path_str) 判断路径是否存在 os.path.exis ...

  3. 升级PIP源

    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django

  4. AIOps-一位研发工程师的学习笔记

    https://blog.csdn.net/wxm6614/article/details/80457568

  5. .net 多播委托的使用方法以及场景,更简单的观察者模式

    首先来说一下什么是多播委托 多播委托就是在委托里定义一个或者多个方法的一个集合 使用方法: public Action actList; //添加方法 public void AddActionMet ...

  6. 前端读者 | 如何判断Javascript对象是否存在

    本文来自@阮一峰 Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言 ...

  7. [lampp] 不能通过互联网连接数据库 MySQL is not accessable via network

    LAMPP安装目录下的/etc/my.cnf文件注释掉skip-networking #skip-networking#skip-networking

  8. thinkphp的where方法的使用

    1.Thinkphp中where()条件的使用 总是有人觉得,thinkphp的where()就是写我要进行增加.查询.修改.删除数据的条件,很简单的,其实我想告诉你,where()是写条件语句的,但 ...

  9. json_decode转码无效

    由于最近从原来常用的utf-8的字符转到了gbk:所以,在用json_decode的时候遇到了返回为空: 经查找发现是json_decode和json_encode只针对utf8字符串有效: 于是用到 ...

  10. Codeforces Round #294 (Div. 2) A and B and Lecture Rooms(LCA 倍增)

    A and B and Lecture Rooms time limit per test 2 seconds memory limit per test 256 megabytes input st ...