[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 10:23 / Filesize : 203 KB / Number-of Response : 940
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Pythonのお勉強 Part 24



1 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:27:53 ]
Python オフィシャルサイト
www.python.org/
日本Pythonユーザ会
www.python.jp/Zope/
FrontPage - Pythonのお勉強
python.rdy.jp/
前スレ
pc11.2ch.net/test/read.cgi/tech/1201073019/l50

◆関連スレッド
Microsoft IronPython 1.0
pc11.2ch.net/test/read.cgi/tech/1157686822/
Python の宿題ここで答えます Part 1
pc11.2ch.net/test/read.cgi/tech/1153585095/
2ch検索: [python]
find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python

◆関連リンク
Python 日本語ドキュメント - Pythonistaのお友達
www.python.jp/doc/release/

Pythonのバイブル的書籍
www.amazon.co.jp/dp/4797341815

その前編
www.amazon.co.jp/dp/4797341815


731 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 18:53:31 ]
>>729-730
そうか。社内のPythonハッカーと抗争を始めたのかと早とちりして
しまったよ。

732 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 19:01:10 ]
>>731
西尾さんとは仲いいしそんなことはないっしょ

733 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 19:05:52 ]
>>728
どう見てもなんとなく書いてみました風の記事なんですが

734 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 19:51:59 ]
早とちりしたのは西尾さん本人説。

735 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 19:53:26 ]
>>729
TODOは

現時点ではこのコードは書けない
余裕のある時にやろう
汚いコードを書いていることに対する言い訳

と書いてますよ

736 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 19:56:14 ]
負け犬意識で頭がいっぱいのPython使いに栄光あれ!

737 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 20:02:41 ]
こんなネタでしか盛り上がれないPythonスレの住人はバカだな。
PHPに帰れよ。

738 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 20:13:11 ]
いやいや、Pythonにネガティブだったり無視したりけしからんと
言う奴は、頭でっかちで使えない人とか老害の域に達した技術者に
多いので、Pythonに対する態度でその技術者の成長の余地が測れ
るのよ。

739 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 20:49:51 ]
いやいや、PHPにネガティブだったり無視したりけしからんと
言う奴は、頭でっかちで使えない人とか老害の域に達した技術者に
多いので、PHPに対する態度でその技術者の成長の余地が測れ
るのよ。



740 名前:デフォルトの名無しさん [2008/03/18(火) 20:59:36 ]
ToDoって書いてあったらだめって?
あふぉですか?こいつは。

741 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:12:02 ]
誰もだめとは言っていないとおもいますが
あふ(ry

742 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:21:22 ]
>>740
にしおさんにそんなこといってはいけませ〜ん!

743 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:23:01 ]
質問

list=[('apple', 1),('banana',2),('orange',3)]

タプルの一番目の要素をキーにして
ソートするにはどうしたら良いでしょうか?

744 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:26:01 ]
list.sort() でいいじゃん

745 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:31:59 ]
listという名前の変数に代入するなと(ry

汎用的なやり方としては(タプルの二番目の要素でソートする例)

L=[('apple', 3),('banana',2),('orange',1)]
L.sort(key=lambda x: x[1])

746 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:32:28 ]
>>743
ここ辺りが参考になるかも
ttp://morchin.sakura.ne.jp/effective_python/sort.html

747 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:39:41 ]
743みたいなネタで引っかかるやつ、いるよな。
基本的なところで引っかかって先に進めないようなやつは、
フレームワークを使いこなせるようになるまで、100年くらいかかったりするのだろうか。

748 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 22:35:12 ]
作り直した方がマシというフレームワークに
こと欠かさないだろ。

749 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 22:40:15 ]
>>715-717
そもそも、ぁ-んァ-ンはただの文字列。



750 名前:749 mailto:sage [2008/03/18(火) 22:41:32 ]
スマソ。途中で書き込んじゃった。

>>715-717
そもそも、ぁ-んァ-ンはただの文字列。
unicodeの平仮名と片仮名全部出力できれば・・・・・・

751 名前:749 mailto:sage [2008/03/18(火) 22:44:03 ]
>>743
.soat()に第一引数として、関数を与えるとその関数で判定を行います。
判定用関数には二つの引数が渡されるので、
def S:

752 名前:751 mailto:sage [2008/03/18(火) 22:45:38 ]
またやっちまったorz
インデントの習慣で・・・・・・

.soat()に第一引数として、関数を与えるとその関数で判定を行います。
判定用関数には二つの引数が渡されるので、
def S(A,B):
return cmp(A[1],B[1])
とすればおk

753 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 22:48:21 ]
Sorting Mini-HOWTO (和訳)
ttp://www.python.jp/Zope/articles/tips/sorthowto

関数を渡すって言うのがピンとこなかったら
ここでわかるようになるまで頑張っておく価値あり

754 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 22:59:32 ]
>>751-753
この方法は旧式。遅い。

>>745-746
こっちが新式。早い。

つうか新式紹介した後に旧式を紹介してるやつはなんなの?

755 名前:753 mailto:sage [2008/03/18(火) 23:19:38 ]
不勉強でした。許して

756 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 23:24:14 ]
>>745の状況ではlambda使うよりはoperator.itemgetter(1)が好きだな

757 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 23:55:07 ]
ttp://www.python.org/dev/peps/pep-0361/
2.6 と 3.0 は同時リリースなのか

758 名前:sort ⇒ 整列 mailto:sage [2008/03/19(水) 09:14:15 ]
soat() ってナニ?

759 名前:751 mailto:sage [2008/03/19(水) 09:28:55 ]
>>758
sort()だとおもわれ



760 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 09:59:55 ]
>>749-750
for k in range(0x3040, 0x3100):
  try:
    print '%04x, %c' % (k, unichr(k))
  except:
    print '%04x, None' % k



761 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 11:15:10 ]
こんな関数を作ったらどうだろう
def expand_char(s):
    i = 0
    _chr = unichr if type(s) is unicode else chr
    _len = len(s)
    while i < _len:
        if s[i] == '\\':
            yield s[i+1]
            i += 2
        elif i + 2 < _len and s[i+1] == '-':
            for j in xrange(ord(s[i]), ord(s[i+2])+1):
                yield _chr(j)
            i += 3
        else:
            yield s[i]
            i += 1

for i in expand_char(u'ぁ-ん'):
   print '%x: %s' % (ord(i), i)

762 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 13:42:50 ]
type() is じゃなくて isinstance 使えっていつも言ってんだろ
素直に unicodedata 使えよ

763 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 13:55:04 ]
>>762
なんぞそれ

764 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 13:58:06 ]
ininstanceのほうがいいね。しばらく使ってないと忘れるなあ

765 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 17:57:01 ]
isinstanceなら継承関係も考慮してくれるしな

766 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 18:35:41 ]
「入門書も読めないゆとりが集まるスレ」に名前を変更した方がいいな

767 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 19:33:39 ]
「煽り一行書くだけしかできない生産性の無いゆとりが集まるスレ」に名前変えたほうがいいな

768 名前:デフォルトの名無しさん [2008/03/19(水) 19:43:08 ]
人間の頭なんて大差ないんだよ。
やるか、やらないか、それだけの違い。
毎日少しずつでも前進してる奴と、
毎日言い訳を考えて何もしない奴とでは差がついて当然。

たいしたことを思いつこうが、思いつくまいがそんなのどうでもいい。
出来ない奴を馬鹿にする奴はどうせたいした事無いから。
出来ない奴に対して自慢したいだけなんだよ。

やりたい事、目標を見つけて少しでも前進する事。
覚える事がさしあたって100あるなら1つずつ覚えていけばいいだけじゃないか。
一度に100覚えられないから漏れは駄目なんだと思ってるんじゃないのか?
それは天才がやる事であって、凡人は1つずつやっていけば良いんだよ。
努力する癖を習得するんだ。


769 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:06:14 ]
挫折なんかしたことないなあ。分からなくなったことはあるが
色々試したりしてずっとやってたら分かったし。

挫折したとか言ってる人は自分で勝手に挫折したと決めている
だけなのでは? 分かるまでずっとやってりゃそのうち分かるよ。
諦めなきゃ良いだけ。

いつまで経ってもできないという場合は本当は自分のやりたく
ないことなのかも知れないけどな。そういう場合はやめてみれば
いい。だがそれを「挫折」と呼んではいけない。それは単に
やめただけだ。




770 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:19:24 ]

FizzBuzz問題

1から100までの数字を出力する。ただし、
3の倍数のときは数字のかわりにFizz
5の倍数のときは数字のかわりにBuzz
15の倍数のときは、FizzBuzzと出力する。

これはここの人にはどう捉えられるのかちょっと知りたいな。


771 名前:デフォルトの名無しさん [2008/03/19(水) 20:21:38 ]
>>770
それ、問題か?
hello, world と同じレベルじゃねえか。

772 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:21:43 ]
>>770
ガイシュツ

773 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:24:04 ]
>>768
1%の才能と99%の努力が大切なのですが

その1%の才能すら持ち合わせていない人が大勢います

あなたもそのうちのひとりであることはほぼ間違いありません


774 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:25:11 ]
>>770
簡単すぎて素直な回答を出したら低能だと言われそうで怖い問題。
出題者がビット演算とかトリッキーな回答を要求してるのではないかと
勘繰ってドツボにはまる。

775 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:26:28 ]
普通に書いたあとググっていかに短くできるか考え続けるだけ

776 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:28:43 ]
>>774
有名なプログラマーもどき除け問題だけどタイプ可能な文字数の制限があったり十進じゃなかったりすると面白いのかな

777 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:38:58 ]
コード書くのが好きで飯もいらないときがある、
別にこれで食っていこうとかは思わないけど趣味の範疇ならほんと楽しい。
素人だし下手糞なりに人に教えもしたけど、大体の奴は途中で飽きてやめていく。

そういう奴らは、読解力とか理解力なんかが足りないというか、
自分で調べる気がないというか。
別に馬鹿にしてるわけじゃないけど、そういうこと好きじゃないなら
無理してプログラムなんてやらなくてもいいんじゃないかな?

778 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:48:30 ]
プログラミングって、実行させてはエラー出して、その度に調べて、って
根気良く続けるのが重要だと思う。
ちょっと上達してきて、エラー出すのが恐くなって、実行させるのが
億劫になったとき、成長が少し止まった気がした。

「とにかくやってみる」ことは武器の一つだと、小学校のときの先生が言っていた。
何つーか、動くコードを知るだけじゃなくて、動かないコードを知ることも
実は重要なんだよな。
要はエラーを恐れるなってこと。

779 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 21:11:10 ]
なんでID出ないんだろうこの板



780 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 21:13:05 ]
人間だもの
人間だもの
人間だもの

へびお

781 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 21:49:38 ]
[[i,'Fizz','Buzz','FizzBuzz\n'][[3,0,0,1,0,2,1,0,0,1,2,0,1,0,0][i%15]]for i in xrange(1,101)]


782 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 21:54:01 ]
for n in [[i,'Fizz','Buzz','FizzBuzz\n'][[3,0,0,1,0,2,1,0,0,1,2,0,1,0,0][i%15]]for i in xrange(1,101)]: print n,


783 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 21:57:15 ]
print open("answer.txt").read()

784 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 22:02:51 ]
for i in range(100):print i%3/2*"Fizz"+i%5/4*"Buzz"or-~i


785 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 22:04:16 ]
python -c "__import__('webbrowser').open('www.google.com/search?q=python+fizzbuzz&btnI=I%27m+Feeling+Lucky')"

786 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 22:49:43 ]
「入門書を読めない文盲のゆとりがポエムを貼り付けるスレ」に変更しませんか?

787 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 22:50:29 ]
アンチスレと交換するだけでいいと思うよ

788 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 22:56:35 ]
早く恥パイの第3版の和訳だせボケ
もう2.6出てんのに。

789 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 23:03:21 ]
>>788
だから出ないんだって。

ソースな↓
ttp://tinyurl.com/23y5e



790 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 23:06:42 ]
>>770
応用編
「3の倍数と3の付く数字だけアホになり、8の倍数だけ気持ち良くなります」

791 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 23:10:57 ]
>>789
これは信頼できるソースだな

792 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 23:16:23 ]
>>790
俺も言おうと思っていたが先越された

793 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 23:18:58 ]
>>> import urllib2
>>> urllib2.urlopen("tinyurl.com/23y5e").url
'www.bulldog.co.jp/'

794 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 01:01:25 ]
>>792
やっぱり '3' in str(i) がキホン?

795 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 07:51:38 ]
FizzBuzz問題って色んなバージョンあるんだね
ttp://ja.wikipedia.org/wiki/%E6%B8%A1%E8%BE%BA%E9%90%98


796 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 11:57:56 ]
問題をアレンジして
3の倍数および3がつく時、アホになる
に変えてみると?

797 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:24:06 ]
for i in range(100):print (i%3/2or(-~i/10==3)or(-~i%10==3))*'Aho'or-~i

798 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:28:04 ]
-~i何度も使うならこっちの方が短いね
for i in range(1,101):print (i%3==0or(i/10==3)or(i%10==3))*'Aho'or i


799 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:40:04 ]
しね



800 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 14:14:31 ]
x%y==0 は、x%y<1の方が短い
あと、(i/10==3)or(i%10==3)だったら'3'in`i`が短い

801 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 14:20:56 ]
for i in range(1,101):print(i%3<1or'3'in`i`)*'Aho'or i

802 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 14:23:20 ]
for i in range(100):print(i%3/2or'3'in`-~i`)*'Aho'or-~i

803 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 15:10:14 ]
('3'in`-~i`) == ('3'in`~i`)

804 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 16:02:03 ]
くだらね

805 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 16:06:33 ]
strと``ってどう違うの?
測ると``の方がだいぶ速いみたいだけど。

806 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 16:27:25 ]
UNARY_CONVERT と CALL_FUNCTION

807 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 16:32:14 ]
strじゃなくてreprだな

808 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 16:57:31 ]
str は、そのオブジェクトを表す適当な文字列
repr は、そのオブジェクトを表すpython 式

>>> `'a'`
"'a'"
>>> str('a')
'a'
>>> `2**32`
'4294967296L'
>>> str(2**32)
'4294967296'

809 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 18:48:30 ]
>>> [u'ほげ',u'ふが']
[u'\u307b\u3052', u'\u3075\u304c']
>>> `[u'ほげ',u'ふが']`
"[u'\\u307b\\u3052', u'\\u3075\\u304c']"
>>> `[u'ほげ',u'ふが']`.decode('unicode-escape')
u"[u'\u307b\u3052', u'\u3075\u304c']"
>>> print `[u'ほげ',u'ふが']`.decode('unicode-escape')
[u'ほげ', u'ふが']

各行の動作の違いを教えてください



810 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 19:19:51 ]
>>807>>808

なる、reprと同じだったね。
にしても不思議、何度測ってもrep()より``のが速い。

811 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 19:54:57 ]
>>810
速度は>>806が書いてあるように
`` が UNARY_CONVERT のバイトコードだけになるから

812 名前:デフォルトの名無しさん [2008/03/20(木) 20:23:06 ]
IDLEって完全にPython自身で書かれているのか・・・
ってことは自分のプログラムの途中から IDLE
を起動するなんてこともできるのか?

813 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:57:48 ]
import wx
app = wx.PySimpleApp(0)
frame = wx.Frame(None, -1, "Hello wxPython World!")
app.SetTopWindow(frame)
frame.Show(True)
app.MainLoop()

> AttributeError: 'module' object has no attribute 'PySimpleApp'

環境ubuntu7.10。wxPythonは入れたが上のエラーが出る。なぜ?

814 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:02:57 ]
他にwx.pyがあるんじゃないか?そのスクリプト自体がwx.pyとか

815 名前:813 mailto:sage [2008/03/20(木) 21:05:27 ]
うわ本当だ。。。
その通りです。ありがとう。>>814

816 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 01:58:54 ]
>>811
へー、バイトコードなんて調べた事無かったから>>806 は意味不明でしたw
ようするに最終的にreprを呼ぶコードが出来るんだけど、
``から出来たコードの方が速く処理が終わるのかな。

817 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 01:10:27 ]
wxWidgets にはさ、GUI を XML で記述するってのがあるじゃん。あれと同じ理屈で Tk を YAML で記述するってのは無いかね。。。。yaml がなければせめて XML で。最初は自力で簡単なコーディングしてて
gui_yaml = """
frame1(Frame):
 text: "Hello tk!"
 button1(Button):
  text: Exit
  command: quit
"""
て感じの yaml 形式テキストをつくって
import yaml
dict_ = yaml.load(gui_yaml)
すると、
{"frame1(Frame)": {
  "text": "Hello tk!",
  "button1(Button)": {
   "text": "Exit",
   "command": "quit"
  }}}
ていう辞書になるので、これを適当に解析して name(base_class) という項目を見つけたら指定されたクラスインスタンスを生成して、
command って項目があったら値に対応するメソッドを関連づけて…
みたいな感じで Tk GUI を構築しようとしたんだけど、辞書だと順番が保存されないんで、コントロールを生成する順番に依存する処理の場合に死ぬる事に気づいた。
packするとき、どの順番で pack する?とか。grid 使えば順番非依存になるのかも。

というわけで自分でつくるのあきらめたので、できあいのやつ教えてください。



818 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 01:19:17 ]
もしマトモに yaml -> Tk ビルダ作ったら、みんな使ってくれるかい?



819 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 01:24:56 ]
なんで今更Tkにこだわるのさ



820 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 01:35:39 ]
だって標準ライブラリにくみこまれてるじゃん

821 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 01:46:29 ]
辞書にorder項目を追加するだけじゃね?

822 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 02:13:48 ]
順番を保存するならシーケンスにするしかないよね。
てか辞書じゃ重複できないから、その例ちと変な気が。
Tkだととても軽いというのなら意味は有ると思う。

823 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 02:56:18 ]
import yaml # PyYAML from pyyaml.org/wiki/PyYAML
import Tkinter
import re

def build(parent, dic, commands):
 widget = None
 for key, val in dic.items():
  o = re.match(r"(?P<name>\w+)\((?P<base>\w+)\)", key)
  if o:
   name, base = o.group("name", "base")
   klass = getattr(Tkinter, base)
   widget = klass(parent)
   #widget.pack()
   if parent: setattr(parent, name, widget)
if isinstance(val, dict): build(widget, val, commands)
  elif key == "command":
   parent["command"] = commands[val]
  elif key == "pack":
   parent.pack(**val) if isinstance(val, dict) else parent.pack()
  elif key == "grid":
   parent.grid(**val) if isinstance(val, dict) else parent.grid()
  else:
   parent[key] = val
 return widget



824 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 02:59:55 ]
# テストコード
if __name__ == "__main__":
 gui_dict = yaml.load("""
frame(Frame):
 button1(Button):
  grid: {column: 1, row: 2}
  text: OK
 button2(Button):
  grid: {column: 2, row: 2}
  text: Cancel
 ent1(Entry):
  grid: {column: 1, row: 1}
 ent2(Entry):
  grid: {column: 2, row: 1}
 memo1(Text):
 grid:
""")
commands = {}
app = build(None, gui_dict, commands)
app.mainloop()



825 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 03:03:13 ]
823-824をそのまま貼付けて実行してください。
Entry の textvariable の扱いをどうすればよいかがさっぱり思いつかん。
一貫性を持たせるという意味で "text" でアクセスできればいいんだけど。





826 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 03:35:59 ]
標準にこだわってるくせに
pickle使わずにYAML使う愚


827 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 03:52:49 ]
だって xml より yaml のほうが編集しやすいじゃん。
まあ、たしかに yaml 表現が python の辞書リテラルとほとんど同じだから、
まんま python 式で書いてもいいんじゃ?と思ったのは事実。
だけど文字列を "" で囲まなくて良いのは地味に楽。



828 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 03:55:20 ]
class TestClass(object):
 def __init__(self, i_name):
  _name = i_name

 def __eq__(self, i_other):
  if not isinstance(i_other, TestClass):
   return False
  return self._name == i_other._name

a_key = TestClass('test')
a_dic = {}
a_dic[a_key] = 0

---------------------------------------------------
上のソースコードをPython 2.5.2で実行すると問題ないけど、
Python 2.6a1で実行すると、最後の行でエラーがでたよ。
TypeError: unhashable type: 'TestClass'

Python 2.6以降だと、object.__hash__()は実装されてないものなん?


829 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 04:06:37 ]
>>827
それならさ、
wxPythonのXRCedが吐き出すXMLをYAML化してよ




830 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 04:11:50 ]
>>823
GJ!!
インデント崩れてない?

831 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 04:46:11 ]
# インデント修正+コメント加筆

def build(parent, dic, commands):
 widget = None
 for key, val in dic.items():
  o = re.match(r"(?P<name>\w+)\((?P<base>\w+)\)", key)
  if o: # name(base_class_name) にマッチした場合は新規にウィジェット生成する
   name, base = o.group("name", "base") # 名前とクラス名を取り出す
   widget = getattr(Tkinter, base)(parent) # ウィジェット生成
   if parent: setattr(parent, name, widget) # 親の属性としてウィジェットを追加
   if isinstance(val, dict): build(widget, val, commands) # ウィジェットの設定
  elif key == "command":
   parent["command"] = commands[val] # 呼び出し可能なオブジェクトをコマンドに指定
  elif key == "pack":
   parent.pack(**val) if isinstance(val, dict) else parent.pack()
  elif key == "grid":
   parent.grid(**val) if isinstance(val, dict) else parent.grid()
  else:
   parent[key] = val
  return widget # 最後に生成したウィジェットを返す








[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<203KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef