在python中not是逻辑判断词,用于布尔型True和False,not True为False,not False为True,以下是几个常用的not的用法:

(1) not与逻辑判断句if连用,代表not后面的表达式为False的时候,执行冒号后面的语句。比如:

a = False

if not a:  (这里因为a是False,所以not a就是True)

print "hello"

这里就能够输出结果hello

(2) 判断元素是否在列表或者字典中,if a not in b,a是元素,b是列表或字典,这句话的意思是如果a不在列表b中,那么就执行冒号后面的语句,比如:

a = 5

b = [1, 2, 3]

if a not in b:

print "hello"

这里也能够输出结果hello

not x 意思相当于 if x is false, then True, else False

代码中经常会有变量是否为None的判断,有三种主要的写法:

第一种是`if x is None`;

第二种是 `if not x:`;

第三种是`if not x is None`(这句这样理解更清晰`if not (x is None)`) 。

如果你觉得这样写没啥区别,那么你可就要小心了,这里面有一个坑。先来看一下代码:

>>> x = 1
>>> not x
False
>>> x = [1]
>>> not x
False
>>> x = 0
>>> not x
True
>>> x = [0]         # You don't want to fall in this one.
>>> not x
False

在python中 None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False ,即:

not None == not
False == not
'' == not
0 == not
[] == not
{} == not 

因此在使用列表的时候,如果你想区分x==[]和x==None两种情况的话, 此时`if not x:`将会出现问题:

>>> x = []
>>> y = None
>>>
>>> x is None
False
>>> y is None
True
>>>
>>>
>>> not x
True
>>> not y
True
>>>
>>>
>>> not x is None
>>> True
>>> not y is None
False
>>> 

也许你是想判断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`,因此推荐前者,同时这也是谷歌推荐的风格

结论:

`if x is not None`是最好的写法,清晰,不会出现错误,以后坚持使用这种写法。

使用if not x这种写法的前提是:必须清楚x等于None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。

python3 not 用法相关推荐

  1. Python3基本用法 2020.2.20

    Python3基本用法 2020.2.20 Python3简介 Python是一个高层次的结合了解释性.编译性.互动型和面向对象的脚本语言. Python的设计具有很强的可读 %8.5f格式说明符表示 ...

  2. python3 isinstance用法_对python中assert、isinstance的用法详解

    1. assert 函数说明: Assert statements are a convenient way to insert debugging assertions into a program ...

  3. python3.7用法_Python 3.7中dataclass装饰器用法详解

    Python 3.7的dataclass装饰器用法 Python 3.7新功能之dataclass装饰器详解 前言 Python 3.7 将于今年夏天发布,Python 3.7 中将会有许多新东西: ...

  4. python3 getopt用法

    python channel_builder.py -s /Users/graypn/ -d /Users/graypn/Documents -m 7 --out=report/xx.html参数也分 ...

  5. python3 isinstance用法_python isinstance函数用法详解

    这篇文章主要介绍了python isinstance函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 isinstance() 函数来判断 ...

  6. python3 return用法_Python中return语句用法实例分析

    本文实例讲述了Python中return语句用法.分享给大家供大家参考.具体如下: return语句: return语句用来从一个函数 返回 即跳出函数.我们也可选从函数 返回一个值 . 使用字面意义 ...

  7. python3 format用法_python3 str.format()的使用

    基本格式 {字段名!转换字段:格式说明符} 字段名:省略:数字:变量名 'name is {}, age is {}'.format('peter',25) 'name is {1}, age is ...

  8. python3 isinstance用法_python isinstance()方法的使用

    1. 描述 Python中的 isinstance() 函数,是Python中的一个内置函数,用来判断一个函数是否是一个已知的类型,类似 type(). 2. 语法 isinstance(object ...

  9. Python基础--Python3基础语法

    Python3 基础语法 编码 默认情况下,Python3源码文件以UTF-8编码,所有字符串都是Unicode字符串.当然也可以为源码文件指定不同的编码,例如: # -*- coding: cp-1 ...

最新文章

  1. C语言将数组中的值逆序存放
  2. 洛谷P1091 合唱队形
  3. VMware安装MikroTik RouterOS chr
  4. javascript json_JavaScript 之 JSON.parse 导致大数精度丢失问题的解决方案
  5. 在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法
  6. java中什么是task_20171018java总结——Spring任务调度task:scheduled-tasks
  7. 星益小游戏平台源码 内置80多个在线小游戏
  8. oracle监听器无法启动,提示“错误1067:进程意外终止”
  9. windows 10字体突然变小变细,模糊
  10. 从软件开发到 AI 领域工程师:模型训练篇
  11. 网址导航站收录申请登陆口大全
  12. 中小微企业财务报表三剑客之资产负债表
  13. 深入理解微信二维码扫码登录的原理
  14. 中国大学数据科学与大数据技术专业排名!2021软科排名
  15. Access 查询的IIF的写法
  16. CF596D Wilbur and Trees
  17. 搭建游戏平台用哪里的高防服务器比较好
  18. JAVA 正则表达式 (超详细,转)
  19. 全球排名前四的眼药水,第一款来自欧洲老牌安瞧AGEPHA Pharma,眼科医生自留!
  20. 四、转换成BCNF的保持无损连接的分解

热门文章

  1. Linux Kernel TCP/IP Stack — L3 Layer — netfilter/iptables 防火墙
  2. U-Boot的启动信息和命令使用
  3. STM32的抢占优先级和响应优先级
  4. 模型评估方法和性能指标
  5. Android 存储路径选择
  6. 简析ThinkSNS+ 计算字符显示长度的方法!【社交系统研发日记】
  7. AOJ0033 Ball【贪心+序列处理】
  8. Less和Sass的使用
  9. C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器
  10. 基于Bind实现的DNS正反向解析及主从DNS的配置