LT駆動開発21でLTしてきました。 タイトル「内包表記とPythonと…Option」です。 PyCon Mini Hiroshima用に用意してたネタですが、参加できなかったので放出しました。 Pythonの内包表記でScalaのOptionのようなものをつくってみました。
Pythonの内包表記はScalaではfor式で表現ができます。
Scalaではリスト以外のものでもfor式が使えます。
代表格としてOption
が上げられます。
ということで、PythonにもOptionクラスをつくり内包表記で利用できるようにしてみました。
スライドに登場するように内包表記に対応するために、__iter__
とnext
メソッドを実装をしています。
class Option:
def __init__(self, value):
self.value = value
def __iter__(self):
return self
def next(self):
if self.value == None:
raise StopIteration
else:
ret = self.value
self.value = None
return ret
def __str__(self):
if self.value == None:
return "Nothing"
else:
return "Some(%d)" % self.value
def add(x, y):
return [ x_+ y_
for x_ in x
for y_ in y
]
add(Option(1), Option(2)) # => [3]
add(Option(1), Option(None)) # => []
add(Option(None), Option(2)) # => []
LT駆動はゆるふわに個々が学んだことを発表していてとても楽しいです。気軽に参加してみてください。