実践:その3
2個のアキュムレータを直列結合することにより構成した回路を関数netで表現する。回路への入力は1層目の(ac1)に入力され、2層目(ac2)の出力が回路の出力となる。
code:acc3.py
def net(x): # netは関数
x = ac1(x) # 1層目
x = ac2(x) # 2層目
return x
アキュムレータには、実践:その2のacc2.pyで示したMyAccumulator2クラスを用いること。 アキュムレータを表すインスタンスを2つ生成する。これらに割り当てた変数ac1, ac2はグローバル変数となり、関数netのローカルスコープにおいて利用されている。 code:(続き).py
ac1 = MyAccumulator2()
ac2 = MyAccumulator2()
y = net(1)
print(y)
y = net(2)
print(y)
y = net(1)
print(y)
https://scrapbox.io/files/652bb15bff19d7001c2b6785.png
アキュムレータのインスタンスが保持する内部状態を確認しよう。
code:(結果).py
$ python3 -i acc3.py
1
4
8
>> ac1.n
4
>> ac2.n
8
ステップ1
ac1:状態0+入力1 -> 状態1
ac2:状態0+入力1 -> 状態1 -> 出力
ステップ2
ac1:状態1+入力2 -> 状態3
ac2:状態1+入力3 -> 状態4 -> 出力
ステップ3
ac1:状態3+入力1 -> 状態4
ac2:状態4+入力4 -> 状態8 -> 出力
https://scrapbox.io/files/6715ddad7424e4d29c0081e0.png
アキュムレータac1, ac2はインスタンスとして実装しているため、内部状態が保持されている。
全体の回路を表すnetは関数を用いて実装しているため、呼び出す度に新しい関数の処理が作られている。そのため、回路としての情報を持続的に保持することはできないことに注意しよう。