null和空的区别

python中None和Null的区别

首先了解python对象的概念

python中,万物皆对象,所有的操作都是针对对象的。 那什么是对象?5是一个int对象,‘oblong’是一个str对象,异常也是一个对象,抽象一点是,人,猫,够也是一个对象

那对于一个对象,它就有包括两方面的特征: 
属性:去描述它的特征 
方法: 它所具有的行为 
所以,对象=属性+方法 (其实方法也是一种属性,一种区别于数据属性的可调用属性)

类:把具有相同属性和方法的对象就可以归为一类,即class。使用一个类可以创建多个对象实例,即人,猫,狗都属于哺乳动物类。类是对象的抽象化,对象是类的实例化。类不代表具体的事物,而对象表示具体的事物 

类也是有属性和方法的。

数据类型也是对象

实际上Pyhton在面向对象程序设计时,才会有对象这个概念,而在面向过程型程序设计时,我们讨论最多的就是数据类型。

Python提供的基本数据类型主要有:布尔类型、整型、浮点型、字符串、列表、元组、集合、字典等。

整个数据类型也可以看做是一个”类“ 。每一种数据类型都是一个对象,也具有其自己的属性和方法

了解以上概念,就不难理解None 与Null的区别 

1)是不同的数据类型

In[3]: type(None)
Out[3]: NoneType

表示该值是一个空对象,空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。可以将None赋值给任何变量,也可以给None值变量赋值

In[4]: type('')
Out[4]: str

字符型

2)判断的时候 均是False,没有打印

a = None
if a:
    print(1)
    
b = ''
if b:
    print(1)

3)属性不同

使用dir()函数返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息。

dir(None)
['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

dir('')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

SQL表中的空字符串与NULL中的区别何在

对于SQL的新手,NULL值的概念常常会造成混淆,常认为NULL是与空字符串''相同的事。情况并非如此。例如,下述语句是完全不同的:    

1
2
mysql>  INSERT  INTO  my_table (phone)  VALUES  ( NULL );    
mysql>  INSERT  INTO  my_table (phone)  VALUES  ( '' );

 这两条语句均会将值插入phone(电话)列,但第1条语句插入的是NULL值,第2条语句插入的是空字符串

第1种情况的含义可被解释为“电话号码未知”,而第2种情况的含义可被解释为“该人员没有电话,因此没有电话号码”。  

  为了进行NULL处理,可使用IS NULL和IS NOT NULL操作符以及IFNULL()函数。    在SQL中,NULL值与任何其它值的比较(即使是NULL)永远不会为“真”。

包含NULL的表达式总是会导出NULL值,除非在关于操作符的文档中以及表达式的函数中作了其他规定。

下述示例中的所有列均返回NULL:   

1
  mysql>  SELECT  NULL , 1+ NULL , CONCAT( 'Invisible' , NULL );

 如果打算搜索列值为NULL的列,不能使用expr = NULL测试。

下述语句不返回任何行,这是因为,对于任何表达式,expr = NULL永远不为“真”:  

1
  mysql>  SELECT  FROM  my_table  WHERE  phone =  NULL ;

要想查找NULL值,必须使用IS NULL测试。

在下面的语句中,介绍了查找NULL电话号码和空电话号码的方式:    

1
2
mysql>  SELECT  FROM  my_table  WHERE  phone  IS  NULL ;    
mysql>  SELECT  FROM  my_table  WHERE  phone =  '' ;

    如果正在使用MyISAM、InnoDB、BDB、或MEMORY存储引擎,能够在可能具有NULL值的列上增加1条索引。

如不然,必须声明索引列为NOT NULL,而且不能将NULL插入到列中。   

 用LOAD DATA INFILE读取数据时,对于空的或丢失的列,将用''更新它们。

如果希望在列中具有NULL值,应在数据文件中使用\N。在某些情况下,也可以使用文字性单词“NULL”。

    使用DISTINCT、GROUP BY或ORDER BY时,所有NULL值将被视为等同的。    

    使用ORDER BY时,首先将显示NULL值,如果指定了DESC按降序排列,NULL值将最后显示。

    对于聚合(累计)函数,如COUNT()、MIN()和SUM(),将忽略NULL值。对此的例外是COUNT(*),它将计数行而不是单独的列值。

例如,下述语句产生两个计数。首先计数表中的行数,其次计数age列中的非NULL值数目:   

1
  mysql>  SELECT  COUNT (*),  COUNT (age)  FROM  person;

   对于某些列类型,MySQL将对NULL值进行特殊处理。如果将NULL插入TIMESTAMP列,将插入当前日期和时间。如果将NULL插入具有AUTO_INCREMENT属性的整数列,将插入序列中的下一个编号

猜你喜欢

转载自www.cnblogs.com/daofaziran/p/11030917.html