Python 学習:goto 改+switch

2014-03-30 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
2、3、1、1、1、 1、0、0、0、1(38)で、換算ポイント 58pt 。
特段のランク変動は無し?
・-・ - -・

さて、本文。

先日(2014-03-24)の記事:
Python 学習:goto ( decorator ) 発見
で、「decorator」なるものだが、使える「goto」を見つけたと書いた。


しかし、この「レシピ No.576944」には、バグが有る。と、・・・

こんなページを見つけた。
A Dash of Technology: Python bytecode hacks, gotos revisited
これによると、
(これは、Sunday, April 1, 2012 だが)
  Some 8 years ago today,
  two April fool's jokes appeared on python-list and ・・・
つまり、
  8年前の今日、
  2つのエイプリルフール・ジョークが載っていた、・・・

それで、20日に書いた:
Python 学習:無いコトねだり
にある、「entrian.com - goto for Python
そして、
Python 学習:goto ( decorator ) 発見
で書いた、「レシピ No.576944」について書いている。

だが、これに関して3つのバグを発見したと、・・・

(英語が)良く分からないが、

1:同一のラベルを2箇所から呼び出したら、・・・

2:同名のラベルを2箇所で定義したら、・・・

3:The last bug is caused by the earlier decorator creating a new function
  that didn't preserve existing attributes.
 この意味が良く理解できない。
 つまり、
  最後のバグは、既存の属性を保持していない、
  新しい関数を作成する以前のデコレータによって引き起こされます。
?????

いずれにしても、バグがあり、改修したと云うなら、
それに置き換えるのが順当。

最後の、
  Conclusion
  You can see, download, and fork gotos in Python at this Github gist.
  Keep making cool stuff,
  and don't let party poopers like me get you down.
即ち、
  結論
  参照してください、ダウンロード、およびこの Github gist に Python で
  goto をフォークすることができます。
  クールなものを作り続けるし、
  私のような党 poopers あなたを取得させてはいけない。


何はともあれ、早速ダウンロードさせて頂いた。

「Decorators for adding goto/switch semantics to Python」
と云うことで、「goto.py」がある。

これを、「goto_switch.py」にリネームした。

それで、テストして見た。

# -*- coding: utf-8 -*-
from goto_switch import * # <===== goto、switch
# test ----------------- switch
@switch
def fn(x):
while switch *x:
case[0] # <=== ダミーがいる!!!
case[0]
b = 'A0'; goto .next

case[1]
b = 'A1'; goto .next

case[2]
b = 'A2'; goto .next
# default code goes here
b = 'A9'

label .next
return b
# this is after the switch/case
pass

for i in range(4):
print fn(i)

# test ----------------- goto
@goto
def fg():
for i in range(2):
for j in range(3):
for k in range(4):
print i, j, k
if k == 2:
goto .enD
label .enD
print "Finished\n"

fg()



「goto」はバグ吸収されているのでしょうが、・・・
新たな「switch」にはバグがある!!!

上記コード内に有るように、
最初の case[0] には合致しない???
悩んだ挙げ句、上記コードの様にダミーを置くと正常に機能した。

機会があったら、思い出して使ってみるか?


更なる、Python の学習です。



見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140305,09

関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 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 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク