Table of Contents
PythonにおけるNone
とは?
Def: None in Python
None
とは, 関数が返すvalueが存在しないときや, 関数のデフォルトパラメーターとして何も渡さないときなど, 表現するvalueが存在しないときに使用するvalueのことNoneType
objectの唯一のvalue
1
2
type(None)
>> <type 'NoneType'>
None
は「空の値」と「存在しない値」を区別するためにPythonでは使用されます.
1
2
3
4
EmptyString = ''
EmptyList = []
EmptySet = set()
EmptyDict = dict({})
上記はそれぞれ「空の値」ですが, None
ではありません.
また, False
や0
とも異なります.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def is_none(obj):
if obj is None:
print(obj, ": It's None")
elif obj:
print(obj, ": It's True")
elif obj is False:
print(obj, ": It's False")
else:
print(obj, ": others")
check_list = [True, False, None, 0, 0.0, 1, -1, '', 'a']
for i in check_list:
is_none(i)
>> True : It's True
>> False : It's False
>> None : It's None
>> 0 : others
>> 0.0 : others
>> 1 : It's True
>> -1 : It's True
>> : others
>> a : It's True
Noneの判定
Rule: Noneの判定
None
のようなシングルトンと比較をする場合は, 常にis
かis not
を使うべき- 絶対に等値演算子を使わない
from コーディング規約PEP8
1
2
3
4
5
6
a = None
print(a is None)
>> True
print(a is not None)
>> False
なぜ is None
を使うべきなのか?
is と == の違い
is
と==
は,
- 前者が同一性(=Identity)の比較
- 後者が同値性(=Equality)の比較
となってるという違いがあります. オブジェクトの同一性は id()
関数を使って判定しています.
例として, x is y
は、 x
と y
が同じオブジェクトを指すとき, かつそのときに限り真になります.
これは例を見たほうが早いので,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class NoneTest():
def __init__(self):
pass
def __eq__(self, other):
return True
class BrokenNoneTest():
def __eq__(self, other):
return True
NoneTester_1 = NoneTest()
NoneTester_2 = BrokenNoneTest()
## type check
print(type(NoneTester_1))
>> <class '__main__.NoneTest'>
print(type(NoneTester_2))
>> <class '__main__.BrokenNoneTest'>
print(type(None))
>> <class 'NoneType'>
## 違うobject idを返すことの確認
print(id(NoneTester_1), id(NoneTester_2), id(None))
>> 139844009293264 139844009290512 139844232076320
## 判定
print(NonTester_1 == None)
>> True
print(NonTester_2 == None)
>> True
print(NonTester_1 is None)
>> False
print(NonTester_2 is None)
>> False
統計
Python
math
Linux
Ubuntu 20.04 LTS
Shell
English
git
方法論
Ubuntu 22.04 LTS
統計検定
競技プログラミング
フーリエ解析
前処理
SQL
coding
コミュニケーション
Network
ssh
将棋
Data visualization
Docker
Econometrics
VSCode
statistical inference
GitHub Pages
apt
development
システム管理
Coffee
cloud
数値計算
素数
Book
Font
Metrics
Poetry
Ubuntu 24.04 LTS
architecture
aws
shell
systemctl
テンプレート
データ構造
ポワソン分布
会計分析
文字コード
環境構築
論文
App
Bayesian
Dynamic Programming
Keyboard
Processing
R
Steam
filesystem
quarto
regex
(注意:GitHub Accountが必要となります)