兄弟连学python(26) --- if not

python if not
判断是否为None的情况

if not x

if x is None

if not x is None

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

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

==============转载至http://blog.csdn.net/sasoritattoo/article/details/12451359==========

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

 第一种是`if x is None`;

第二种是 `if not x:`;

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

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

[python] view plaincopy
>>> 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 ,即:

[python] view plaincopy
<strong>not None == not False == not ‘‘ == not 0 == not [] == not {} == not ()</strong>  

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

[python] view plaincopy
>>> 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, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。

================================================================

不过这并不适用于变量是函数的情况,以下转载自:https://github.com/wklken/stackoverflow-py-top-qa/blob/master/contents/qa-control-flow.md

foo is None 和 foo == None的区别

问题 链接

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

>>> class foo(object):
    def __eq__(self, other):
        return True

>>> f = foo()
>>> f == None
True
>>> f is None
False

>>> list1 = [1, 2, 3]
>>> list2 = [1, 2, 3]
>>> list1==list2
True
>>> list1 is list2
False
另外

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
   
时间: 2024-10-08 11:35:55

兄弟连学python(26) --- if not的相关文章

兄弟连学python 课堂笔记 ---- Redis基本操作

基本操作 Redis 是 Key-Value 内存数据库,操作是通过各种指令进行的,比如 `SET` 指令可以设置键值对,而 `GET` 指令则获取某一个键的值.不同的数据结构,Redis 有不同的指令,这样指令一共有几十个,下面主要介绍一些常用的指令. Redis 对 Key 也就是键有各种各样的指令,主要有下面的指令(下面的指令中小写字符串都是参数,可以自定义):>keys *  //返回键(key) >keys list*   //返回名以list开头的所有键(key)>exist

兄弟连学python 课堂笔记 ---- Redis类型

Redis通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型. String(子串类型) set 命令:设置一个键和值,键存在则只覆盖,返回ok > set 键  值    例如: >set name zhangsan get 命令:获取一个键的值,返回值 > get 键        例如:>get name setnx命令:设置一个不存在的键和值(

兄弟连学Python(06)------- 条件语句和循环语句

Python的条件语句和循环语句的基础知识: 1.条件语句:包括单分支.双分支和多分支语句,if-elif-else 2.循环语句:while的使用及简单网络刷博器爬虫 3.循环语句:for的使用及遍历列表.元组.文件和字符串 在讲诉条件语句.循环语句和其他语句之前,先来补充语句块知识.(前面讲函数时已经用到过) 语句块并非一种语句,它是在条件为真(条件语句)时执行或执行多次(循环语句)的一组语句.在代码前放置空格或tab字符来缩进语句即可创建语句块.很多语言特殊单词或字符(如begin或{)来

兄弟连学python(1)——MySQL

MySQL官网:http://www.mysql.com MySQL是WEB应用方面最好的RDBMS应用软件之一 RDBMS:Relational Database Management System关系数据库管理系统 使用 UNION | UNION ALL 语法 UNION 用于合并多个查询的结果集,我目前遇到的主要有如下两个场景用起来比较有效: 1. 同表的复杂查询,很难通过一个 SELECT 语句搞定2. 多表查询,但返回的数据一致,常见一些聚合数据统计需求 UNION 也可以加 lim

兄弟连学Python 课堂笔记 ---- mysql数据操作

添加数据 格式: insert into 表名[(字段列表)] values(值列表...);--标准添加(指定所有字段,给定所有的值)  insert into stu(id,name,age,sex,classid) values(1,'zhangsan',20,'m','lamp138');Query OK, 1 row affected (0.13 sec) --指定部分字段添加值 insert into stu(name,classid) value('lisi','lamp138')

兄弟连学python (01) ----表单的设计

简单的表单编辑:<!DOCTYPE HTML> <html lang='en'> <head> <meta chaset='utf-8'/> <title>from练习</title> </head> <body> <from> <table width='500px' height='700px' border='2' align='center'> <tr> <td

兄弟连学python (02) ----简易抽奖器

import tkinter import random import tkinter.messagebox class choujiang: def __init__(self): self.root=tkinter.Tk() self.root.minsize(400,400) self.root.resizable(width=False,height=False) self.root.title("简单抽奖器") self.result1 = tkinter.StringVar

在兄弟连学Python Python的数据类型

在Python中可以自定义的数据内容有无数种,但是系统默认的标准类型有六种: 一.Number 类型 分为四种类: Int 整型 Float 浮点型 Bool 布尔类型 String 字符串类型 字符串类型就是用引号括起来的文字类型: 每一种引号中都可以包含其他的俩中引号方式.也可以使用转义字符的方式 注: 转义字符: Complex 复数类型 二.List  列表类型 列表是一组有顺序的数据组合,且可修改.列表的标识符号为[ ] 例子:    list1 = [1,3,4,5,8] 三.Tup

兄弟连学python—Html表单

1 表单用于搜集不同类型的用户输入,表单由不同类型的标签组成,实现一个特定功能的表单区域(比如:注册), 2 3 首先应该用<form>标签来定义表单区域整体,在此标签中再使用不同的表单控件来实现不同类型的信息输入, 4 5 具体实现及注释可参照以下伪代码: 6 7 <!-- form定义一个表单区域,action属性定义表单数据提交的地址,method属性定义提交的方式. --> 8 <form action="http://www..." method