hirhirの日記

Pythonとデータ分析と人口知能

Python3 入門:None NoneType

Python3 入門 None

えーとですね、なんか君、、2の頃と変わってない?

こんなだったけかな。。。

ネイティブデータ型 - Dive Into Python 3 日本語版

3. 組み込み定数 — Python 3.4.3 ドキュメント

ではではnotebookで。。。

In [1]:
 
type(None)
 
 
Out[1]:
NoneType
In [2]:
 
None == True
 
 
Out[2]:
False
In [3]:
 
None is True
 
 
Out[3]:
False
In [4]:
 
None == False
 
 
Out[4]:
False
In [5]:
 
None is False
 
 
Out[5]:
False
In [6]:
 
None == 0
 
 
Out[6]:
False
In [7]:
 
None is 0
 
 
Out[7]:
False
In [8]:
 
None == ''
 
 
Out[8]:
False
In [9]:
 
None is ''
 
 
Out[9]:
False
In [10]:
 
None == None
 
 
Out[10]:
True
In [11]:
 
None is None
 
 
Out[11]:
True
In [12]:
 
a = None
b = None
a == b
 
 
Out[12]:
True
In [13]:
 
a is b
 
 
Out[13]:
True
In [14]:
 
None = a
 
 
 
  File "<ipython-input-14-733e71aa504e>", line 1
    None = a
            ^
SyntaxError: can't assign to keyword

 

In [25]:
 
if not a:
    print(a)
 
 
 
None

んーどうやらFalse扱いらしいです.

まぁ書いてありますがね。。。

比較は == ではなく is か is not を使用するべきとのこと 

Jared Grubb: Python: "is None" vs "==None"

ただこりゃ~古いな。。。

 

蛇足

is と==を検証していた所以下の様な挙動が。。。

In [67]:
 
a = 2
b = 2
a is b
 
 
Out[67]:
True
In [69]:
 
a = a*10
b = b*10
a is b
 
 
Out[69]:
True
In [70]:
 
c = 'c'
d = 'c'
c is d
 
 
Out[70]:
True
In [71]:
 
c = c*10
d = d*10
c is d
 
 
Out[71]:
False


Falseだと???????????????????

In [72]:
 
print(c)
print(d)
 
 
 
cccccccccc
cccccccccc
In [73]:
 
c == d
 
 
Out[73]:
True
In [74]:
 
a == b
 
 
Out[74]:
True
In [75]:
 
e = "cccccccccc"
f = "cccccccccc"
 
e is f
 
 
Out[75]:
True


今度はTrue!!
要は生成の仕方なのか??

In [76]:
 
e == f
 
 
Out[76]:
True

 

つまりは別物か?

In [77]:
 
id(e) 
 
 
Out[77]:
4379941808
In [78]:
 
id(f)
 
 
Out[78]:
4379941808
In [79]:
 
id(a)
 
 
Out[79]:
4297332992
In [80]:
 
id(b)
 
 
Out[80]:
4297332992
In [81]:
 
id(c)
 
 
Out[81]:
4379949168
In [82]:
 
id(d)
 
 
Out[82]:
4379980144

 

どうやらオブジェクトが別物で

完全に同一でないと is は別物としてみなすということ

だからNoneは同一でpython内では完全な同一な同値って意味かな

あーすっきりしたーー