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 # 最後に生成したウィジェットを返す