API Reference

基本的なクラスと関数

class framework.Operator

値を生成したり、加工したり、出力したりするもの

オペレータは1個の入力値を受け取り、0個以上の出力値を返す。 もしくは、これ以上処理しないことを示す EndOfList を送出する。

複数のオペレータを OperatorChain を使って繋ぐことで、プログラムの処理を表現する。

execute(value)

何らかの値を受け取り、何らかの値のリストを返す関数

パラメータ

value (Any) -- 上流のオペレータが作った入力値。無視しても良い。

戻り値の型

List[Any]

戻り値

下流のオペレータに渡される出力値のリスト。

例外

EndOfList -- 処理を終了させたい場合に送出する。

class framework.OperatorChain(*operators)

複数のオペレータを繋いで、一個のオペレータにしたもの

パラメータ

operators (Operator) -- 繋ぎたいオペレータ。引数に与えた順番で実行される。

一つのオペレータだけを与えた場合は、与えられたオペレータと同じ挙動になる。

>>> class TestOperator(Operator):  # テスト用の値を倍にするオペレータ
...     def execute(self, x):
...         return [x * 2]
>>> TestOperator().execute(2)
[4]
>>> OperatorChain(TestOperator()).execute(2)
[4]

二つ以上のオペレータを渡すと、与えられた順に実行した結果を返す。

>>> OperatorChain(TestOperator(), TestOperator()).execute(2)
[8]

一つもオペレータが与えられなかった場合、入力をそのまま出力するオペレータになる。

>>> OperatorChain().execute(2)
[2]
execute(value)

結合されたオペレータを実行する

パラメータ

value (Any) -- 入力値。

戻り値の型

List[Any]

戻り値

出力値のリスト。

framework.execute(*operators)

オペレータを繋いで、 EndOfList が送出されるまで繰り返し実行する

パラメータ

operators (Operator) -- 実行したいオペレータのリスト

最初のオペレータの入力は常に None になる。

>>> class TestPrinter(Operator):  # テスト用の5回だけ入力を表示するオペレータ
...     def __init__(self):
...         self.count = 0
...     def execute(self, x):
...         self.count += 1
...         if self.count > 5:
...             raise EndOfList
...         print(x)
>>> execute(TestPrinter())
None
None
None
None
None
戻り値の型

None

class framework.EndOfList

処理を終了したいときに送出する例外

組み込みのオペレータ

ジェネレータ

class framework.SequenceGenerator(from_=0, step=1)

無限の数列を作るジェネレータ

パラメータ
  • from -- 最初に出力される数。省略すると0になる。

  • step (float) -- 一回の呼び出しで変化する数。省略すると1ずつ増える。

execute(value)

数列の次の値を取り出す

パラメータ

value (Any) -- 入力値だが、常に無視される。

戻り値の型

List[float]

戻り値

昇順の数値。

framework.RangeGenerator(from_, to, step=1)

指定の数値の間をカウントする数列を生成するジェネレータ

中身は SequenceGeneratorLimitFilter を組み合わせただけのもの。

パラメータ
  • from -- カウントを開始する値。

  • to (float) -- カウントを終了する値。

  • step (float) -- 一回の実行で増える数。

>>> execute(
...     RangeGenerator(1, 8, 2),  # 1から8までの2刻みの数字を作って、
...     ConsolePrinter(),         # コンソールに表示する。
... )
1
3
5
7
>>> execute(
...     RangeGenerator(3, 1, -1),  # 降順も作れる
...     ConsolePrinter(),
... )
3
2
1
戻り値の型

OperatorChain

フィルタ

class framework.LimitFilter(num)

指定の回数で処理を停止させるフィルタ

パラメータ

num (int) -- 停止するまでに処理する数。

>>> execute(
...     SequenceGenerator(),  # 無限に数列を生成して、
...     LimitFilter(5),       # 先頭から5つだけ値を取り出し、
...     ConsolePrinter(),     # コンソールに表示する。
... )
0
1
2
3
4
execute(value)

実行回数が上限を越えていないか確認して、入力をそのまま出力として出す

パラメータ

value (Any) -- 入力値。そのまま出力される。

戻り値の型

List[Any]

戻り値

出力値。入力されたものと同じ。

例外

EndOfList -- 実行回数が上限を越えると送出し、実行を停止させる。

class framework.ReplaceFilter(rule, replace)

特定の条件にマッチする値が入力されたら別の値に置換するフィルタ

パラメータ
  • rule (Callable[[Any], bool]) -- 置換するかどうかを決める関数。Trueなら値を置きかえる。

  • replace (Any) -- どんな値に置換するか。

>>> execute(
...     RangeGenerator(1, 5),
...     ReplaceFilter(lambda x: x == 2, "two"),
...     ConsolePrinter(),
... )
1
two
3
4
5
execute(value)

受け取った値をrule関数に渡し、Trueが返ってきたら置換する。

パラメータ

value (Any) -- 入力値。

戻り値の型

List[Any]

戻り値

置換された値、もしくは入力値そのものが入ったリスト。

framework.ModReplaceFilter(num, replace)

特定の値の倍数が入力されたら値を置換するフィルタ

中身はReplaceFilter。ほぼFizzBuzz用。

>>> execute(
...     RangeGenerator(1, 5),
...     ModReplaceFilter(2, "*"),
...     ConsolePrinter(),
... )
1
*
3
*
5
戻り値の型

ReplaceFilter

class framework.HTMLFilter(tag='p')

入力をHTMLタグで囲って出力するフィルタ

パラメータ

tag (str) -- 入力値を囲うのに使いたいタグ。

>>> execute(
...     RangeGenerator(1, 5),
...     HTMLFilter(),
...     ConsolePrinter(),
... )
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
execute(value)

入力をタグで囲って出力する。

パラメータ

value (Any) -- 入力値。型は何でも良い。

戻り値の型

List[str]

戻り値

入力値をタグで囲った文字列が入ったリスト。

プリンタ

class framework.FilePrinter(file)

入力値をFile like objectに出力するプリンタ

パラメータ

file (TextIO'>) -- 出力先となるファイルのインスタンス

>>> import io
>>> buf = io.StringIO()
>>> execute(
...     RangeGenerator(1, 5),
...     FilePrinter(buf),
... )
>>> buf.getvalue()
'1\n2\n3\n4\n5\n'
execute(value)

入力をファイルに出力し、そのまま出力値としても返す

パラメータ

value (Any) -- 入力値。

戻り値の型

List[Any]

戻り値

入力値が入った要素数が1のリスト。

framework.ConsolePrinter()

入力値をコンソールに出力するプリンタ

出力先をstdoutにした FilePrinter と同じもの。

戻り値の型

FilePrinter