聊聊python中not 与 is None的区别

原因:

list 获得的数据为空: 显示值为 [ ]

不同的判断--- is None

----not

两者结果不一样分析:

总之:

not 判断的是内容,而is None则涉及到这个 list 或 dict 是否声明并定义

补充:关于Python not 及is None的有趣现象(两者的区别)

笔者小白最近在刷题的过程中,遇到一个有趣的现象。

在使用 if A is None 来实现判断条件的时候,最后程序没有通过。这里的A代表之前定义的list类型的数据。最用改成if not A才通过。

那么到底判断A为空两者有什么区别呢。

笔者小白发现A为空时,not A 就是True,但是这并不代表该对象没有定义,也不代表该对象没有其它的属性。它只是代表A中元素为空,仅此而已。

如果要看对象是否有定义,就要使用 is None来判断。

补充:Python的if条件语句中的 X is None 和 not X的区别

在算法题和日常工作中总会遇到条件语句中有is None 和 not 出现,总是分不清它们的用途,今天在这里做一个总结。

if X is None和if not X的具体用法

Python中not是一个逻辑判断词,结合布尔类型True和False来运用,not True就是False,not False就是True。看了一些网上资料后,可以把not X 理解为

if x is false, then True, else False

Python中 is None就是判断对象是否有定义

举个例子

list1 = []
list2 = None
print("\n--测试1--\n")
if list1 is None:
    print("is None的用法,输出list1的内容:\t")
    print(list1)
print("------分割线------")
if not list1:
    print("not的用法,输出list1的内容:\t")
    print(list1)
print("\n--测试2--\n")
if list2 is None:
    print("is None的用法,输出list2的内容:\t")
    print(list2)
print("------分割线------")
if not list2:
    print("not的用法,输出list2的内容:\t")
    print(list2)

结果如图:

可以看到:

list1是[],此时只有not判断有输出,因为list1虽然是空,但是是有定义的,所以此时None的判断不成立,所以没有输出,而list1中是空的,not空为真,所以输出这个list1;

list2是None,此时两个条件判断都有输出,因为 None == None,所以有输出,not None 为True 所以也会有输出。

总结一下:

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

想使用if not x的话,一定要搞清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍

    代码中经常会有变量是否为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 &

  • 在python中对变量判断是否为None的三种方法总结

    三种主要的写法有: 第一种:if X is None; 第二种:if not X: 当X为None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()这些时,not X为真,即无法分辨出他们之间的不同. 第三种:if not X is None; 在Python中,None.空列表[].空字典{}.空元组().0等一系列代表空和无的对象会被转换成False.除此之外的其它对象都会被转化成True. 在命令if not 1中,1便会转换为bool类型的True

  • Python判断变量是否是None写法代码实例

    代码中经常会有变量是否为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 &

  • Python中条件判断语句的简单使用方法

    最简单的条件语句: if expression: expr_true_suite 如上,if是关键字,expression是条件表达式,条件表达式支持多重条件判断,可以用布尔操作符and.or和not连接,expr_true_suite是代码块,expression为true时执行,代码块如果只有一行,上面的整个条件语句便可全部写到一行,但可读性差. 带elif和else的条件语句: if expression1: expr1_true_suite elif expression2: expr2

  • 聊聊python中not 与 is None的区别

    原因: list 获得的数据为空: 显示值为 [ ] 不同的判断--- is None ----not 两者结果不一样分析: 总之: not 判断的是内容,而is None则涉及到这个 list 或 dict 是否声明并定义 补充:关于Python not 及is None的有趣现象(两者的区别) 笔者小白最近在刷题的过程中,遇到一个有趣的现象. 在使用 if A is None 来实现判断条件的时候,最后程序没有通过.这里的A代表之前定义的list类型的数据.最用改成if not A才通过.

  • 聊聊Python中的pypy

    PyPy是一个虚拟机项目,主要分为两部分:一个Python的实现和 一个编译器 PyPy的第一部分: 用Python实现的Python 其实这么说并不准确,准确得说应该是用rPython实现的Python,rPython是Python的一个子集,虽然rPython不是完整的Python,但用rPython写的这个Python实现却是可以解释完整的Python语言. PyPy的第二部分:编译器 这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端,目前也只有这么一个前端,

  • 聊聊python中的异常嵌套

    在Python中,异常也可以嵌套,当内层代码出现异常时,指定异常类型与实际类型不符时,则向外传,如果与外面的指定类型符合,则异常被处理,直至最外层,运用默认处理方法进行处理,即停止程序,并抛出异常信息.如下代码: try: try: raise IndexError except TypeError: print('get handled') except SyntaxError: print('ok') 运行程序: Traceback (most recent call last): File

  • 聊聊python中的循环遍历

    python之循环遍历 关于循环遍历大家都知道,不外乎for和while,今天我在这写点不一样的循环和遍历.在实践中有时会遇到删除列表中的元素,那么循环遍历列表删除指定元素该怎么做呢? 还是直接上代码看案例吧: import time # 删除下面列表中所有张姓元素,输出的结果应该是['李老大','李老二'] lst = ['张老大', '张老二', '李老大', '张老三', '李老二']*10000 # 直接for循环遍历列表,remove需要删除的元素 def del1(lst): for

  • Python中set与frozenset方法和区别详解

    set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交集), difference(差集)和sysmmetric difference(对称差集)等数学运算. sets 支持 x in set, len(set),和 for x in set.作为一个无序的集合,sets不记录元素位

  • 对python 中re.sub,replace(),strip()的区别详解

    1.strip(): str.strip([chars]);去除字符串前面和后面的所有设置的字符串,默认为空格 chars -- 移除字符串头尾指定的字符序列. st = " hello " st = st.strip() print(st+"end") 输出: 如果设置了字符序列的话,那么它会删除,字符串前后出现的所有序列中有的字符.但不会清除空格. st = "hello" st = st.strip('h,o,e') print(st) 因

  • 对python中数组的del,remove,pop区别详解

    以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3], 如下: >>> a=[1,2,3] >>> a.remove(2) >>> a [1, 3] >>> a=[1,2,3] >>> del a[1] >>> a [1, 3] >>> a= [1,2,3] >>> a.pop(1) 2 >>>

  • 深入理解Python中的 __new__ 和 __init__及区别介绍

    本文的目的是讨论Python中 __new__ 和 __ini___ 的用法. __new__ 和 __init__ 的区别主要表现在:1. 它自身的区别:2. 及在Python中新式类和老式类的定义. 理解 __new__ 和 __init__ 的区别 这两个方法的主要区别在于:__new__ 负责对象的创建而 __init__ 负责对象的初始化.在对象的实例化过程中,这两个方法会有些细微的差别,表现于:如何工作,何时定义. Python中两种类的定义方式 Python 2.x 中类的定义分为

  • 浅谈python 中的 type(), dtype(), astype()的区别

    如下所示: 函数 说明 type() 返回数据结构类型(list.dict.numpy.ndarray 等) dtype() 返回数据元素的数据类型(int.float等) 备注:1)由于 list.dict 等可以包含不同的数据类型,因此不可调用dtype()函数 2)np.array 中要求所有元素属于同一数据类型,因此可调用dtype()函数 astype() 改变np.array中所有数据元素的数据类型. 备注:能用dtype() 才能用 astype() 测试代码: import nu

  • python中get和post有什么区别

    在客户端,Get方式在通过URL提交数据,数据在URL中可以看到:POST方式,数据放置在HTML HEADER内提交. GET方式提交的数据最多只能有1024 Byte,而POST则没有此限制. 安全性问题.正如在上面中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会.所以,如果这些数据是中文数据而且是非敏感数据,那么使用get:如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好. 表单提交中get和post方式的区别归纳如下几点: get是从服务器

随机推荐