Noneオブジェクト
None は NoneType クラス から生成される唯一のオブジェクトであり、値が存在しない ことを示すために用いられます。C 言語の Null や Ruby の nil に相当します。
# PYTHON_NONE
# In[1]
# Noneのクラスを調べる
type(None)
NoneType
たとえば、戻り値が設定されていない関数を実行してみましょう。
# In[2]
# 戻り値のない関数を定義
# pass は何もしないコード
def myfunc():
pass
myfunc()
画面には何も表示されませんが、このとき実際には None オブジェクトが返っています。print() を使えば None を確認できます。
# In[3]
print(myfunc())
None
次は辞書型オブジェクトを定義してみます。
# In[4]
# 辞書を定義
mydic = {"apple":"りんご", "orange":"オレンジ", "banana":"バナナ"}
存在しないキーで値の参照を試みると KeyError を返します。
# In[5]
# "lemon"に対応する値を参照
mydic["lemon"]
KeyError: 'lemon'
辞書には指定した key に対応する値を返す get() メソッドが備わっています。dict.get() は存在しない key を指定すると None が返るように設計されています。
# In[6]
# "lemon"に対応する値を参照
x = mydic.get("lemon")
print(x)
None
このようにリターンすべき適切な値がないことを示すために、エラーを送出する代わりに None オブジェクトを返すように設計されている関数やメソッドがあります。
意図的に None を返すような関数を設計することもできます。たとえば、x = 0 だけで値が定義されているような特殊な関数を設計できます。
# In[7]
# x=0だけ値が定義されている関数
def func_zero(x):
if x == 0:
return 1
else:
return None
この関数の引数に 0 を渡すと 1 が返ります:
# In[8]
print(func_zero(0))
1
0 以外の値を入れると戻り値は None です:
# In[9]
print(func_zero(3))
None
プログラマーは、0 以外の引数が渡されたときにエラーを返すことを望んでいるのではなく、値が存在しないことを示したいのです。このような場合に None を返すのが適切です。
NumPy の配列に None を組み込むと、データ型 (dtype) は自動的に "object" となります。
# PYTHON_NONE_NUMPY
# In[1]
import numpy as np
# Noneを含む配列を定義
arr = np.array([1, 2, None])
arr
array([1, 2, None], dtype=object)
NumPy の配列はデータを整数または浮動小数点数型で扱うことを想定しているため、None と数値の演算は定義されていません。
# In[2]
# 配列の各要素に1を加える
print(arr + 1)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
したがって、NumPy で欠損値に None を当てることは推奨されておらず、代わりに 非数 ( numpy.nan) を使用するのが一般的です。numpy.nan は浮動小数点数型の特殊オブジェクトとして定義されていて、数値との算術演算が定義されています。
# In[3]
# numpy.nanを含む配列を定義
arr = np.array([1, 2, np.nan])
# 配列の各要素に1を加える
print(arr + 1)
[ 2. 3. nan]
【プログラミング日記】
これからブログを始めようと思っている人で、無料ブログのデメリット (勝手に広告くっついてるとか、容量が少ないとか) が気になる人は
[1] 自分でサイトを作る
[2] 有料サービスを利用する
の二択になります。[1] は HTML や CSS といったマークアップ言語を学ばなくてはなりません。たとえそうした言語を使いこなせる人でも、かなりの手間と時間を覚悟しなくてはなりません。私自身の経験を話すと
「1つぐらいは自分で作ってみようかな」
と軽い気持ちで、こつこつコードを書いてみたりもしましたが、
「やってられっか~!」
と投げ出してしまいました。他に方法がないならともかく、ネットの世界には色々と便利なツールがあるのですから、それを利用しない手はないと思ったのです。
ただ、将来ウェブエンジニアやウェブデザイナーを目指そうというのであれば、実践的な勉強になるので、この方法がベストかもしれません。
サイトを構築する手間と時間を、もっと別のことに当てたいと考えるなら、有料のブログサービスを利用するのが良いでしょう。色々あるとは思いますが、 WordPress を選択するのが無難だと思います。というより、私自身他のブログサービスのことをよく知らないので他を紹介しようがありません。で、「 WordPress とは何ぞや?」ということを、ものすごく簡単に説明すると、WordPress とは「とっても自由度の高いブログソフト」です。これだけ知っていれば充分です。「オープンソースが何だかんだ …」なんて難しいことを知らなくても、ブログの運営に支障はまったくありません。無料ブログとそれほど変わらない操作感覚で扱えます。要するに「レイアウトに当てはめて作業する」というあの感覚です。ただし慣れてくるにしたがって、やはり WordPress ならではのカスタマイズの自由度の高さがわかってきます。