1 名前:デフォルトの名無しさん [2008/06/13(金) 04:22:02 ] Python オフィシャルサイト ttp://www.python.org/ ttp://www.python.org/doc/ 日本Pythonユーザ会 ttp://www.python.jp/Zope/ ttp://www.python.jp/doc/ FrontPage - Pythonのお勉強 ttp://python.rdy.jp/ 前スレ pc11.2ch.net/test/read.cgi/tech/1209480428/ ◆関連スレッド Microsoft IronPython 1.0 pc11.2ch.net/test/read.cgi/tech/1157686822/ Python の宿題ここで答えます Part 1 pc11.2ch.net/test/read.cgi/tech/1153585095/ Python Challengeをやろう! pc11.2ch.net/test/read.cgi/tech/1175919288/ Pythonについて(アンチ専用) pc11.2ch.net/test/read.cgi/tech/1203557046/ Pythonに見られるインデントによる制御構造の是非 pc11.2ch.net/test/read.cgi/tech/1169473442/ pythonがこの先生きのこるには pc11.2ch.net/test/read.cgi/tech/1167996371/ Eclipse統合M25【Java/C/PHP/Ruby/Python/Perl】(PyDev) pc11.2ch.net/test/read.cgi/tech/1211505494/ 【Perl,PHP】LLバトルロワイヤル2【Ruby,Python】 pc11.2ch.net/test/read.cgi/tech/1209289408/ デザパタ + Python/Ruby/Smalltalk part2 pc11.2ch.net/test/read.cgi/tech/1175959706/ 2ch検索: [python] find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python
331 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 11:12:59 ] 入門書嫁>330
332 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 16:32:21 ] こんな感じの2次元配列データに関数f(xy)をmapして meshdata=[ [x11,y22],[x12,y12] ,...] ,[ [x21,y21],...],... [[z11,z12,...][z21,z22,...]] したいのだけど べたなループ以外に綺麗に書く方法ないのでしょうか
333 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 16:37:26 ] 添え字間違ったので再度 こんな感じの2次元配列データに meshdata=[ [x11,y11],[x12,y12] ,...] ,[ [x21,y21],...],... に関数f(xy)をmapして [[z11,z12,...][z21,z22,...]] を出力したいのだけど べたなループ以外に綺麗に書く方法ないのでしょうか
334 名前:333 mailto:sage [2008/06/27(金) 17:03:01 ] 自己解決 [[f(xy[0],xy[1]) for xy in line] for line in meshdata]
335 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 19:27:16 ] 二次元っていうより対角線だけの一次元のような気が・・・
336 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 20:41:56 ] ひょっとして内胞リストってlispよりも強力なの?
337 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 21:24:04 ] >>336 マルチ乙 その記事は2001年で古いから、今ならジェネレータ式という選択もある。
338 名前:333 mailto:sage [2008/06/27(金) 21:48:00 ] meshdata=[ [x11,y11],[x12,y12] ,...] ,[ [x21,y21],[x22,y22]...],... で列方向(横方向)の処理は [reduce(plot_line_between_two_point,line) for line meshdata] で出来るけど同じような処理を行方向(縦方向)にするには forでべた書きするしかないのでしょうか?
339 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:19:50 ] zip(*meshdata)
340 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:29:47 ] meshimada ?
341 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:50:48 ] moutabetadesho
342 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:36:19 ] クラスからインスタンスを作り、それを配列に入れる。 そのインスタンスの集合に''A'と言う名前をもつものがいるかを A in tlistで取りたい。 __contains__を使えば取れるかなって思ったけど取れなかった。 nameをキーにもつ辞書を作ればできるけど、できればやらずに済ませたい。 こういう場合どのようは方法が取れますか? サンプルコード class T(object): def __init__(self,name,stype): self.name=name self.stype=stype def __contains__(self,key): return key in self.name def main(): tlist=[] for k in ['A','B','C']: tlist.append(T(k,k)) if 'A' in tlist: print 'A contains in tlist' else: print 'A exclude in tlist' if __name__=='__main__':main()
343 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:51:26 ] def __eq__(self, other): return other == self.name
344 名前:342 mailto:sage [2008/06/28(土) 02:12:30 ] >>343 ありがとうございます。出来ました。 __eq__を使えばよかったのですね。
345 名前:デフォルトの名無しさん [2008/06/28(土) 03:55:06 ] 起動に時間のかかる cmd をパイプで何度も使用したいのだけど pin, pout = os.popen2(cmd, 'r+') pin.write(hoge) pin.flush() pin.flush() ではパイプは開始されず、 pin.close() ではパイプは通るものの、次回 cmd を再起動しないといけない。 os.fsync() とか python -u とか試したけど変化なしでした。 つまり cmd を一度起動したらそのまま保持したいのです。 ruby は IO.popen で sysnc = true にすると flush() で パイプを使いまわせるっぽいけど、 python は何か別のやり方があるのだろうか。
346 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 05:21:44 ] >>343-344 結果はそうだけど なんか間違ってるよ君ら
347 名前:デフォルトの名無しさん [2008/06/28(土) 05:59:51 ] pin, pout = popen2.popen3(cmd) pin.write(hoge) pin.flush()
348 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 06:15:41 ] コマンドライン引数で, python -uとするか, PYTHONUNBUFFERED=x python
349 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 06:20:12 ] 316 :デフォルトの名無しさん:2007/12/18(火) 08:15:43 xinetdにサービスを登録しようと思い以下のようなスクリプトを書きました。 サーバに送信した文を[]で囲んで返すというものです。が、なぜかクライアントのrecvで受信待ちになってしまいます。 クライアントの通信先をechoに変えたところ、recvは正常に受信し、文字はちゃんと表示されました。 またサーバのsyslogには、正しくprint [hogeron]と記録されています。 現象から見ると、どうもサーバのprintで、ちゃんと送信されていないっぽいです。 os.environ['PYTHONUNBUFFERED'] = '1' で、バッファしないように設定しているのですが… どうすれば正常に動かせますか? 317 :デフォルトの名無しさん:2007/12/18(火) 08:16:24 【サーバ】 -- import os,sys,syslog os.environ['PYTHONUNBUFFERED'] = '1' line = sys.stdin.readline() if line.endswith('\n'):line = line[:-1] result = '['+line+']' print result syslog.syslog('print '+result) -- 【クライアント】 -- import socket host = 'localhost' port =6363 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) s.send('hogeron') str = s.recv(1024) print str s.close()
350 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 07:38:26 ] >>339 listの先頭に*つけるのってどういう意味なの? 調べても出てこなかった
351 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 08:05:32 ] 俺はパイソン。 俺もお前も。
352 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 08:08:00 ] >>350 関数の引数に、リストの要素をばらして入れたいときに使う。 hoge = [a, b, c] をつかって、関数に f(a, b, c) と入れたいときに、 f(*hoge) とする。
353 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 08:30:21 ] >>350 ほい。 www.python.jp/doc/release/tut/node6.html#SECTION006740000000000000000 docs.python.org/tut/node6.html#SECTION006740000000000000000
354 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 08:37:41 ] 書き方は一通りというPythonの原則を崩す機能ですな
355 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 09:24:03 ] >>353 これってtupleしか受け付けないかと思ってたらイテレータなら何でも大丈夫っぽいな
356 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 09:33:15 ] その書き方初めて知った
357 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:16:39 ] >>333 >>> mesh_array = [ [(0,0),(0,1),(0,2)], [(1,0),(1,1),(1,2)] ] >>> mesh_array = [ [(0,0),(0,1)], [(1,0),(1,1)] ] >>> def f(x,y): return x+y ... >>> [[f(p[0],p[1]) for p in low] for low in mesh_array] [[0, 1], [1, 2]] 座標の値はタプルにしたほうが見易いかも [ [LOW1], [LOW2], ...]で隣り合う点同士の距離は求めれそうだけど [[C [C O O L L U U M M 1], 2], ...] 縦方向に走査するのは『転置』しないとめどいような希ガス(間違ってたらスマソ)
358 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:31:26 ] >>> apply(zip, [(1,2),(3,4)]) [(1, 3), (2, 4)] >>> apply(zip, [(1,2,3),(4,5,6)]) [(1, 4), (2, 5), (3, 6)] >>> apply(zip, [(1,2),(3,4),(5,6)]) [(1, 3, 5), (2, 4, 6)] >>> apply(zip, [(1,3,5),(2,4,6)]) [(1, 2), (3, 4), (5, 6)] >>> zip([(1,3,5),(2,4,6)]) [((1, 3, 5),), ((2, 4, 6),)] なんか、最後のapply経由の結果が違うのな…(転置のつくりかた)
359 名前:358 mailto:sage [2008/06/28(土) 10:45:06 ] てか当たり前ぽ py3k だと apply がobsoluteで使えなくなっとる…
360 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:56:18 ] >>> def apply(func,*args): return func.__call__(*args) # これだと駄目みたい… ... >>> for e in apply(zip, [(1,2),(3,4)]): ... print(e) ... ((1, 2),) ((3, 4),) >>> apply(zip, [(1,2),(3,4)]) <zip object at 0x01582648> py3k で廃止されたapplyを復活させるにはどうしたら 良いですか。
361 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:23:46 ] >>> zip([(1,3,5),(2,4,6)]) [((1, 3, 5),), ((2, 4, 6),)] >>> >>> zip((1,3,5),(2,4,6)) [(1, 2), (3, 4), (5, 6)] >>> >>> (1,3,5),(2,4,6) # tuple list ((1, 3, 5), (2, 4, 6)) >>> >>> zip(*tlist) zip関数は、タプルのリストを渡さないと思ったとおり動かないのね >>> apply(zip, [(1,3,5),(2,4,6)]) [(1, 2), (3, 4), (5, 6)] リストから *tlist を取り出してzipを作用させてると…
362 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:24:42 ] >>360 >>> my_apply = lambda f, args: f(*args) ... >>> my_apply(zip, ((1,2),(3,4))) [(1, 3), (2, 4)]
363 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:27:21 ] >>> def apply(func, args): return func(*args) ... >>> for e in apply(zip, [(1,2),(3,4)]): ... print e ... (1, 3) (2, 4) いや、最初から zip(*[(1,2), (3,4)])やろうぜ。
364 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:34:24 ] >>> for e in zip((1,2),(3,4)): ... print(e) ... (1, 3) (2, 4) >>> for e in zip(tuple([(1,2),(3,4)])): ... print(e) ... ((1, 2),) ((3, 4),) >>> (1,2),(3,4) ((1, 2), (3, 4)) >>> tuple([(1,2),(3,4)]) ((1, 2), (3, 4)) zipにリストでデータ渡せないのはどうしてなんだろう…orz
365 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:43:47 ] 引数として一個のリストのリストを渡されたのと複数個のリストを渡されたのを 同一視されたら困るだろ 一体何を悩んでいるのかさっぱり分からん
366 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:45:06 ] >>363 dくす >>> for e in zip(tuple([(1,2),(3,4)])): print(e) ... ((1, 2),) ((3, 4),) >>> for e in zip(*([(1,2),(3,4)])): print(e) ... (1, 3) (2, 4) zip関数というか関数に、『リスト』渡すなら *でキャストして 『引数フォーマット』にしてから渡すよろし、いうことなのね… 引数フォーマットは (1,2),(3,4) != ((1,2),(3,4)) == tuple([(1,2),(3,4)]) と。
367 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:51:00 ] >>365 >>> (1,2),(3,4) ((1, 2), (3, 4)) >>> tuple([(1,2),(3,4)]) ((1, 2), (3, 4)) インタラクティブシェル上の出力が同値だから、 引数フォーマット == (tuple,tuple)の形式かと思ったんよ。 引数フォーマット == tuple,tuple # 括弧なしが正しい引数の形式 入門書嫁乙…orz
368 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 12:08:10 ] >>> あ=(0,1);け=(0,2);ま=(0,3);し=(0,4);て=(0,5) # LOW1 >>> お=(1,1);め=(1,2);で=(1,3);と=(1,4);う=(1,5) # LOW2 >>> mesh_array = [(あ,け),(お,め)] #ラベルを貼った各点を転置して、加工して出力する >>> for e in zip(*[(あ,け),(お,め)]): print(e) ... ((0, 1), (1, 1)) ((0, 2), (1, 2)) >>> >>> for e in zip(*[(あ,け,ま,し,て),(お,め,で,と,う)]): print(e) ... ((0, 1), (1, 1)) ((0, 2), (1, 2)) ((0, 3), (1, 3)) ((0, 4), (1, 4)) ((0, 5), (1, 5))
369 名前:デフォルトの名無しさん [2008/06/28(土) 19:46:02 ] パッケージ名としてハイフンを入れた名前を使うことはできないのでしょうか? www.python.org/doc/essays/packages.html いままで HogeHoge という名前のパッケージを作っていて, これを hoge-hoge に変更したいのですが,ダメ?
370 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 20:00:51 ] だめ。識別子に使うとマイナスと区別つかないから
371 名前:デフォルトの名無しさん [2008/06/28(土) 20:19:30 ] >>370 なるほど,そうか. 言われてみればそうだよな. ディレクトリ名がそのまま識別子になるわけだから. 名前空間とかパッケージ周りはどうも C++ から来ると 自由に付けられないのが不便に思えるけど, その制約が逆にあとから見た時には分かりやすく思えるんだろうな.
372 名前:デフォルトの名無しさん [2008/06/28(土) 23:27:19 ] simplejson 1.9.1 を MingW32 でコンパイルした. 本当のファイル名は simplejson-1.9.1.win32-py2.5.exe だけど アプロダに上げたらこんなファイル名になっちゃった. www.rupan.net/uploader/download/1214663156.exe
373 名前:デフォルトの名無しさん [2008/06/28(土) 23:40:54 ] 2.6 からは simplejson が標準ライブラリに入るのかな? 3.0 からは入るようだけど.
374 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:46:33 ] 2.6から docs.python.org/dev/library/json.html
375 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:53:58 ] >>373 www.python.org/download/releases/2.6/NEWS.txt Library ------- - The audiodev module has been deprecated for removal in Python 3.0. - Issue #2750: Add the 'json' package. Based on simplejson 1.9 and contributed by Bob Ippolito. - Issue #1734346: Support Unicode file names for zipfiles. - Issue #2581: distutils: Vista UAC/elevation support for bdist_wininst. - Issue #2635: Fix bug in 'fix_sentence_endings' textwrap.fill option, where an extra space was added after a word containing (but not ending in) '.', '!' or '?'. 入ってるみたい
376 名前:デフォルトの名無しさん [2008/06/28(土) 23:55:44 ] 2.6 からか.手間が省けるな. W3C では JSON DOM binding も標準化されているようだし, セキュリティの面でちょっと不安もあるけど jsonp 便利だし, 個人的には RSS つーかフィードも JSON でフィードしてくれって感じだ. そのうち RDF のトリプルもJSON表現の標準が出るかもなぁ.
377 名前:デフォルトの名無しさん [2008/06/29(日) 00:13:28 ] デバッグ時にヒープのフットプリント(?)を調べようと思って gc.getobjects() を使ったらできるかなと思ったんだけど, そもそもオブジェクトのサイズってどうやって求めるんだっけ? 文字とか整数とか実数などの基本型のサイズと参照に必要な サイズがわかればいいのか?
378 名前:デフォルトの名無しさん [2008/06/29(日) 08:00:40 ] svk によるレポジトリ分割の作業記録 d.hatena.ne.jp/dayflower/20071211/1197273839 いままで svndumpfilter, svndumpfilter2, svndumpfilter3, svndumpfilter4 とか使ってうまく行ったり行かなかったりしたが,結局 svk でうまくいった. 本来の使い方とは全然違うところでお役立ち.ありがとう,svk svk って perl で書かれてるんだね.
379 名前:デフォルトの名無しさん [2008/06/30(月) 05:02:57 ] Tkinter ではプログラムの最後にウィジェットの mainloop() を呼び出して放置します。 表示されたウィンドウをマウスでクローズすればプログラムは終了しますが、 そうではなくて自発的にウィンドウをクローズしてプログラムを 終了させる方法は無いでしょうか? 別スレッドから何かをすればいいのでしょうか?
380 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 08:03:05 ] sys.exit() すれば?
381 名前:デフォルトの名無しさん [2008/06/30(月) 11:01:22 ] おおヴ たとえば複数のウィンドウ作ってそれぞれmainloopしてるとき 個別にmainloopから抜けるのは無理ですか?
382 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 15:50:51 ] イベントコールバックでそのwindow.destroy()かな。 なんか、うちではmainloop呼ばなくてもウィジェットは全て問題なく動いてるように見えるけど。
383 名前:デフォルトの名無しさん [2008/06/30(月) 16:11:41 ] Python ってディープコピーのための仕組みって特に 決められていませんよね?特定のメソッドを実装して おけば簡単にディープコピーされるとか、そういうの。 クラス毎に hoge.clone() とか作らないとだめ?
384 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 16:26:19 ] copy.deepcopy, __deepcopy__
385 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 17:40:34 ] >>383 copy.copy()とかcopy.deepcopy()とか試してみ
386 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:05:09 ] urlからファイル名を取得する方法って楽な方法はありますか? 正規表現使ったり、split使うしか無いんでしょうか? 例えば、↓から www.python.jp/doc/release/icons/next.png next.pngだけを取得したいです。
387 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:16:54 ] rfind('/')でもすればいいかと。
388 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:23:35 ] ファイル名の定義が不可能なので厳密には無理。
389 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:26:11 ] >>387 なるほど。以下のやり方でいい感じに動きました。ありがとうご ざいます。 url[url.rfind('/')+1:] >>388 今回のケースでは確実にファイル名で終わるようなURLたちを扱 うのでrfind使った方法でやってみようと思います。ありがとう ございました。
390 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:30:19 ] まずurlparse使ってURLを分解したほうが楽だよ! ttp://www.python.jp/doc/nightly/lib/module-urlparse.html
391 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 00:43:57 ] threading が本当にスレッド機能を提供しているかどうかをプログラムの中か ら知るにはどうしたらいいですか?
392 名前:デフォルトの名無しさん [2008/07/01(火) 08:41:46 ] Eclipse の PyDev で補完が効く条件って何? たとえば *.pyd で提供されているような識別子は PyDev は知りようが無いから候補にも挙がらない?
393 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 08:58:21 ] pc11.2ch.net/test/read.cgi/tech/1211505494
394 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 09:12:00 ] >>392 #include <Python.h> //--- Python API ヘッダの指定 // Python.h には既に stdio.h string.h errno.h stdlib.h のインクルード指定が含まれています // メソッドの実体 static PyObject* exec_do(PyObject* self, PyObject* args) { const char* command ; //--- command は PyArg_ParseTuple によって alloc される int status ; if (!PyArg_ParseTuple(args, "s", &command)) return NULL ; status = system(command) ; return Py_BuildValue("i", status) ; } // メソッドテーブル // メソッド名 / 関数へのポインタ / 呼び出し規則 / 説明書き(何を書いても良い) // python の help から参照することができます。 static PyMethodDef executerMethods [] = { { "do", exec_do, METH_VARARGS, "Execute command for Command-prompt in Windows." }, { NULL, NULL, 0, NULL } }; // モジュールの初期化関数 (Python にモジュール名とメソッドテーブルを渡します) PyMODINIT_FUNC initexecuter(void) // 初期化モジュール名は init + "DLL 名" にする必要があります。 { Py_InitModule("executer", executerMethods) ; // モジュール名は DLL 名と同じにする必要があります。 } dll -> pyd(2.5で変更) だからPython C APIで拡張を書いてあげればpython側で認識してくれると思われ
395 名前:391 mailto:sage [2008/07/01(火) 09:16:52 ] C:\mercurial-0.9.5>python Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import executer >>> dir() ['__builtins__', '__doc__', '__name__', 'executer'] >>> from executer import * >>> dir() ['__builtins__', '__doc__', '__name__', 'do', 'executer'] >>> do('dir') ドライブ C のボリューム ラベルは MEB_V7370T です ボリューム シリアル番号は D80C-D8DF です C:\mercurial-0.9.5 のディレクトリ 2007/12/11 05:38 <DIR> . 2007/12/11 05:38 <DIR> .. 2007/10/20 08:25 312 .hgignore 2007/10/20 08:25 660 .hgsigs 2007/10/20 08:25 782 .hgtags >>391 の実行結果。import して dir() して読めるなら補完対象になってるはず。 PyDev使ったこと無いから間違ってたらスマソ
396 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 09:18:44 ] >>392 × 391 ○ 394 >>394 と間違えた…orz
397 名前:392 [2008/07/01(火) 09:26:03 ] どうやら「Forced builtin libs」あたりがキモらしい。 >>394 うん、それはそうなんだけど、それって実行時にしか わからないことなんだよね。そうやって作られた 識別子はソース書いているときに補完に使えない。
398 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 10:14:22 ] >>397 pydev.sourceforge.net/faq.html#what_is_that_forced_builtin_libs_in_the_python_i FAQにも書いてあるけど、多分そのForced builtin libsで指定されたライブラリは裏側で 実行していて、そのデータから補完している sysやosなんかはそうみたい そして実体としてのモジュールが無い__builtin__とかもそれで情報を取っている感じだ それ以外のモジュールはソースコードの静的解析なのかな?
399 名前:392 [2008/07/01(火) 10:46:30 ] >>398 Pure Python なモジュールというかパッケージな, ソースコードの静的解析とのことです. どこで呼んだ情報だったのか忘れちゃったけど.
400 名前:392 [2008/07/01(火) 10:57:55 ] というわけで networkx パッケージに含まれる識別子の PyDev による自動補完ができるようになりました. こういう芸当ができるのは静的に型付けされてないからなんだろうなぁ. 型情報まで解析しようと思ったらめちゃくちゃ大変そうだし.
401 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 11:32:58 ] www.fabioz.com/pydev/manual_101_interpreter.html >How to check if the information was correctly gotten: > >Make sure that you have lots of 'Forced builtin libs' and some 'System libs'. > >The Forced builtin libs are the libraries that are built-in the interpreter, >such as __builtin__, sha, etc. For python, you should have about 50 libs and >for jython about 30 libs. >Additionally, you may add other libraries that you want to treat as builtins, >such as os, wxPython, OpenGL, cStringIO, etc. >This is very important, because Pydev works on the java side only with static information, >but some modules don't have much information when analyzed statically, so, Pydev >creates a shell to get information on those. >Another important thing is that they must be on your system pythonpath >(otherwise, the shell will be unable to get that information). shell だとそういった情報を得ることが出来ないだろう、いう最後のとこが よくわからんけど、相互補完関係みたいになってるのね…。 wxPythonとか設定登録するの面倒そう、なんて落ちがあったりするのかな? 簡単そげなら乗り換えたいかも > PyDev
402 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 15:21:21 ] >>401 ん? PYTHONPATHに指定してくれないと探せない、って当たり前のことを書いているだけじゃね?
403 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 15:28:15 ] >>401 シェル起動して情報得るのに、PYTHONPATHになかったら探せんだろうって ただそれだけの意味だと思うが。
404 名前:401 mailto:sage [2008/07/01(火) 17:00:00 ] This is very important, 〜. Another important thing, 〜. みたいに平行して続いててたから、何か重要こと言ってる んかと思った… ちゅうかもっと英語嫁じぶん…orz
405 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 19:29:23 ] 英語のできないひとはRubyをやればいいとおもうよ。
406 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 22:08:00 ] def iter_walk(elem): yield elem for child in elem: for x in iter_walk(child): yield x def flatten(elem, lst): lst.append(elem) for child in elem: flatten(child, lst) 上のように書くよりも下のほうがずっと速いんだけど、 これはもうどうしようもないのかな。 generator使ってツリーのトラバーサルってどうやるんだろ。
407 名前:406 mailto:sage [2008/07/01(火) 22:25:18 ] すんません 気のせいでした python -m profileとかでプロファイルとると、generator使ってると もの凄く遅いことになるみたいだ 普通に実行したら別に遅くなかったです
408 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 22:52:32 ] Pythonは、Rubyよりゆるい感じがいい
409 名前:デフォルトの名無しさん [2008/07/02(水) 01:20:46 ] 一個も要素を返さないジェネレータって、 def gen(): raise StopIteration てやってもだめだよね def gen(): raise StopIteration yield って冗長なyield いれないとだめなのかしらん
410 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 01:23:57 ] たんに gen = iter(()) とかではだめなの?
411 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 02:08:05 ] def gen(): if 0: yield
412 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 02:40:50 ] Python2#.dll だけを添付してスクリプトを配りたい場合 (いろいろな意味での単純化のため、標準ライブラリをいっさい使わずに組み込みライブラリのみで対処する) って、ソース読み込むときのエンコーディング関係はどうなるの? どうもあのへんの処理系統がよくわからないんだけど、ソースの字句解析の時点で #coding: hogeとあったら ライブラリの hogeコーデックを見に行くよね??多分。 ライブラリがないと構文木つくれないの? なんかすごく仕組みが不思議なんだ じゃあライブラリ自身をインポートするときはどーなってるの? ライブラリ(のコーデック関係部分)は自分を字句解析してほしいけど、字句解析するためにはライブラリが必要???
413 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 08:46:52 ] >>412 www.pycs.net/users/0000323/stories/14.html www.python.org/dev/peps/pep-0263/ bugs.python.org/issue534304 解説記事 -> PEP -> Issue tracker ですね。わかります
414 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 23:42:17 ] >>> id(1) 10507600 >>> id(2) 10507588 >>> id(3) 10507576 なのに >>> id(0.1) 11908136 >>> id(0.2) 11908136 >>> id(0.3) 11908136 となる。なんでかワガンネ
415 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:10:53 ] intの方は他に参照されてて破壊されないで (インデックスとかでよく使いそうだし) floatの方は破壊されてすぐ同じ場所が再利用されてるんじゃない?
416 名前:415 mailto:sage [2008/07/05(土) 00:18:50 ] intobject.cみてみたら-5〜256までは予め作っておいているみたい
417 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:52:52 ] Python2.5.2 (Win) >>> id(1) 11163352 >>> id(2) 11163340 >>> id(3) 11163328 >>> id(0.1) 14145448 >>> id(0.2) 14145432 >>> id(0.3) 14145464 Python2.5.1 (Linux) >>> id(1) 135925560 >>> id(2) 135925548 >>> id(3) 135925536 >>> id(0.1) 136126516 >>> id(0.2) 136126516 >>> id(0.3) 136126516
418 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 05:06:22 ] tkとwxPythonってどっちがいいですか?
419 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 06:53:29 ] 環境によって違うのかー。恐ろしいな
420 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 08:06:32 ] >>419 何も恐ろしいところなんてないと思うが
421 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 08:31:07 ] 419の方が恐ろしいだろJK
422 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 09:03:18 ] 許してやってくれ。 419はゆとり教育の被害者に過ぎない。
423 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 10:06:31 ] >>> for i in range(-10, 270): print eval('%d, id(%d)' %(i, i)), ... (-10, 8702864) (-9, 8702864) (-8, 8702864) (-7, 8702864) (-6, 8702864) (-5, 8402384) (-4, 8402372) (-3, 8402360) (-2, 8402348) (-1, 8402336) (0, 8402324) (1, 8402312) (2, 8402300) (3, 8402288) (4, 8402276) (5, 8402264) (6, 8402252) (7, 8402240) (8, 8402228) (9, 8402216) (10, 8402204) ... (245, 8405408) (246, 8405396) (247, 8405384) (248, 8405372) (249, 8405360) (250, 8405348) (251, 8405336) (252, 8405324) (253, 8405312) (254, 8405300) (255, 8405288) (256, 8405276) (257, 8702864) (258, 8702864) (259, 8702864) (260, 8702864) (261, 8702864) (262, 8702864) (263, 8702864) (264, 8702864) (265, 8702864) (266, 8702864) (267, 8702864) (268, 8702864) (269, 8702864) >>>
424 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 10:16:37 ] d={}; n=[d.update({id(x):x}) for x in range(-10, 270)]; sorted(d.items(), lambda x, y:cmp(x[1], y[1])) これだと違う結果が出る。理由は知ってるけど書かない。
425 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 11:07:35 ] GCに回収させてるやつって何なの?馬鹿なの?死ぬの?
426 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 11:11:30 ] >>> int(1.5) 1 >>> float(1.5) 1.5 >>> float('1.5') 1.5 >>> int('1.5') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '1.5' >>> なんでこうなっちゃうんでしょ?
427 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 11:14:31 ] >>> int(float('1.5')) 1
428 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 12:52:58 ] 数値型 <-> 文字列型 <-> 数値型 A <-> JSon <-> B d.hatena.ne.jp/rubikitch/20080502/tap ary = [1, 2, 3, 4] ary.map{|x| x**2}.tap{|a| p a}.select {|x| x>10 } # => [16] # >> [1, 4, 9, 16] わたしこけた青アザできた # >> こけてる過程をストップモーションで出力(修飾表現) 『こけた』の部分を、整理して表示すると 何が起こってるのかわかりやすくなる… 型変換<文字列:数値>をTrace出力付きのForthみたいなかんじで 出力するには、python だとどう描けばよいですか?
429 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 12:54:27 ] 日本語でおk。
430 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 13:14:47 ] 日本語? いいえ、Pythonです。
431 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 13:18:51 ] >>> L=[1,2,3] >>> map(str, L) #=>['1', '2', '3'] >>> L=[1,1.2,2,3] >>> map(str, L) #=>['1', '1.2', '2', '3'] 型変換<数値:文字列>は問題なし >>> strL=['1','2','3'] >>> map(int, strL) #=>[1, 2, 3] >>> strL=['1','1.2','2','3'] >>> map(int, strL) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '1.2' 型変換<文字列:数値>でこける types とかインポートしてやらないと無理なのかな?