1 名前:デフォルトの名無しさん [2008/04/11(金) 10:55:10 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 Python 使いが優しくコメントを返しますが、 お礼は Python の布教と初心者の救済をお願いします。
684 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 10:04:37 ] >>683 それで合ってる。 inplaceにしたければ、スライス代入を使えばいい。 x[:] = (i * 2 for i in x)
685 名前:683 mailto:sage [2008/06/29(日) 10:55:58 ] >>684 なるほど。ジェネレータ式も勉強になったよ
686 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 11:41:39 ] from timeit import Timer print Timer('x=[1,2]; x=[i*2 for i in x]').timeit() # py3k: 2.0419500243746063 # py25: 1.5092940583230501 print Timer('x=[1,2]; x[:]=(i*2 for i in x)').timeit() # py3k: 5.2120230364473699 # py25: 7.4014716954249735 スライス代入のほうがコストが高いんだろうか… ベンチの取り方が間違ってるだけなのかもしれんけど (汗
687 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 11:44:13 ] >>684 それだ ありがとう
688 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 11:46:37 ] >>686 最終的に代入になってても途中で余分にリスト作ってない?
689 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 12:03:13 ] >>686 普通の代入 x = よりはスライス代入のほうが遅いけど それ以上にジェネレータの実行速度が遅いんだと思うよ ジェネレータで節約できるのはメモリが主だろうし
690 名前:デフォルトの名無しさん [2008/06/29(日) 13:05:03 ] Python って末尾再帰の最適化はサポートされていないのでしょうか?
691 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 13:17:51 ] されてますん。
692 名前:デフォルトの名無しさん [2008/06/29(日) 13:42:00 ] >>691 どっちなんだ〜 ------------- def rec(x = 0): if (x<1000000000): rec(x+1) rec() ------------ RuntimeError: maximum recursion depth exceeded
693 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 13:52:29 ] うん、されてないと思う。 def fib(n): def fib_iter(a, b, m): return a if (m == n) else fib_iter(b, a + b, m + 1) return fib_iter(0, 1, 0) おれの環境ではfib(1000)ぐらいでコケる。 ので、Pythonではiterative processは 素直にループやiteratorで書けということだと思った。
694 名前:デフォルトの名無しさん [2008/06/29(日) 13:53:36 ] 単にトレースが取れるようにするために何か制限しているだけなのかなぁ。 わからん、わからん、わからんちん。 しかし単純にループにするだけならトレースとかそもそもいらないのに。 sys.setrecursionlimit() を勝手にいじるのもどうかと思うし・・・
695 名前:デフォルトの名無しさん [2008/06/29(日) 13:56:07 ] ううむ、つまり、「されてない」が結論だということっすね。 C++ + Boost Graph Library で大規模なグラフ処理してたんだけど、 Python + networkx でやってみようと思ってハマってます。 末尾再帰最適化を前提としたコードかいてたから、 移植のときにアタマをきりかえるのがなんとも・・・
696 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 13:57:05 ] Stackless Pythonというのを調べてみると良いかも。 ただ、Cのハードウェアスタックを使わないというだけなので、 末尾再帰をgotoに最適化してくれるかどうかは知らない。
697 名前:デフォルトの名無しさん [2008/06/29(日) 13:57:49 ] mail.python.org/pipermail/python-list/2003-January/180220.html
698 名前:デフォルトの名無しさん [2008/06/29(日) 13:58:28 ] >>697 さすがに2003年だからな 今でもだめなのか orz
699 名前:デフォルトの名無しさん [2008/06/29(日) 14:05:28 ] sys.setrecursionlimit(10000) でやってみたけど、7000ちょっとの再帰で今度は正真正銘の MemoryError: stack overflow が出た Python赤玉。俺涙目。
700 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 15:21:59 ] Stackless Pythonなら、setrecursionlimit()で限界増やして、メモリの限り再帰しても大丈夫だよ。
701 名前:デフォルトの名無しさん [2008/06/29(日) 16:23:18 ] メモリの限り再帰って・・・本質的な解決じゃない気がする。 そのうち末尾再帰の最適化が入ることを祈って、 とりあえずループに書き直した。
702 名前:デフォルトの名無しさん [2008/06/29(日) 18:42:53 ] Pythonでは定数をどのように宣言(?)すればいいのでしょうか? たとえば C++ において,クラス全体で使われる定数は static const で宣言しますが,それと同じようなことは でこれーたで可能なのでしょうか?
703 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:55:24 ] >>702 デコレータつかうと誤って更新すると例外が出るようのは作れるけど クラスやパッケージ外からはアクセサつかって変数を更新するという ルールにしとけば事故はおこんない。 そもそもPythonの変数は入れ物じゃなくて名前付けというか参照だから そういう文化(というと大げさだけど)だと思うしかない。 まーCみたいに独自プリプロセッサとおすのはありかもね。
704 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 19:58:33 ] ここでもstackの話してるのかw
705 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:23:49 ] ゆとりちゃんは幼稚園からやりなおしてくだちゃいね
706 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:09:54 ] やりなおしても、またゆとり教育で永久ループか?
707 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:37:55 ] ゆとりはPython使うな。 以上。
708 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:25:22 ] Python3.0について質問です。 名前空間ってやつで悩んでます。 urllibモジュールについて、 import urllib.parse.urlparseとやるとimportに失敗します。 from urllib.parse import urlparseとやるとモジュールのimportに成功します。 なぜでしょうか?? なぜ下の方は成功し、上のほうは失敗するのでしょうか。
709 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:35:21 ] urlparseがモジュールじゃなくて関数だから (lib/urllib/parse.py)
710 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:43:14 ] >>708 ttp://www.python.jp/doc/release/ref/import.html 単純なimport文やfromに指定できるのは「モジュール名」に限る。 パッケージがサブディレクトリを持っていて階層構造になっている場合は モジュール名にドットが含まれることもある。
711 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:56:00 ] >>709 ,>>710 ありがとうございます。 疑問点について氷解しました。
712 名前:デフォルトの名無しさん [2008/07/02(水) 09:12:25 ] PEPってPython Enhancement Proposals のことだって始めて知った今日。
713 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 13:39:10 ] PHPってPrintHtmlPrototyping
714 名前:デフォルトの名無しさん [2008/07/03(木) 08:36:51 ] Pythonで簡単なウェブサーバを作成するパッケージってありますか? ローカルで実験してて計測結果を表示するウェブインターフェース付けたいんだけど
715 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 08:54:55 ] >>714 >>651 >>> python -m CGIHTTPServer 50レス程度も読めないの?馬鹿なの?死ぬの?
716 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 09:11:23 ] そういう人間のたまり場だということになぜ気付かないの?
717 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 12:58:39 ] ログを読まないより、ググらないのとリファレンスを引かない方が…
718 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 19:41:22 ] プログラム初心者がpythonでcgiやりたいとかならともかく、 実験してるような人なら、必要な情報を調べる技術は備えてるはずだと思うんだけどなあ
719 名前:714 [2008/07/04(金) 07:00:11 ] 思いついた時にケータイで取り合えず聞いておくから. 後で調べる. とにかく古い測定器で,GP-IBインターフェイスカードが そのマシンにしかついてなくって,面倒だなぁ,と.
720 名前:714 [2008/07/04(金) 07:02:01 ] レスしてくれる人があったらラッキーだし, なくてもまぁ,なんというか,メモ代わり. 自鯖のp2経由だから自分がどこに何書き込んだかログ残るし.
721 名前:714 mailto:sage [2008/07/04(金) 07:33:41 ] だから,レスは別にいらないし、回答をくれても特に感謝もしない. こっちが要求したワケじゃないから,ね.
722 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 07:38:31 ] つチラシの裏
723 名前:714 mailto:sage [2008/07/04(金) 07:41:48 ] わかってると思うけど,721は別人. …まあ,言ってることは当たってるけど.
724 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 08:46:23 ] あんま参考にならない意見かもしれんけど coreblog.org/ats/python-de-cgi coreblog.org/ats/stuff/minpy-web-support 目次 とか薦めてみるテスト じぶんもCGIよくわからないひとなので、今週の土日使って 読んでみる予定。
725 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 11:30:17 ] ものすごいインストーラー嫌いなんです Windows用のはインストーラーしか見当たらないのですが Pythonをインストールせずに使う方法はありますか? Portable Pythonっていうのを使えばいいんでしょうか?
726 名前:デフォルトの名無しさん [2008/07/04(金) 11:51:14 ] >>725 そんなに嫌がらないで・・・
727 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 13:21:23 ] >>725 ソース落としてコンパイル or msiを展開する
728 名前:デフォルトの名無しさん [2008/07/04(金) 15:49:43 ] 1バイト以下に収まる整数のでっかい配列を扱いたいと 思ったんだけど、基本型には「短」整数型ってのはないのな orz
729 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 15:50:44 ] >>728 import array
730 名前:デフォルトの名無しさん [2008/07/04(金) 16:22:22 ] 多次元配列を扱いたいんだ・・・ できれば符号なし8ビット整数の。 NumPy ってページを見てみた。 It also adds the features introduced by Numarray and can also be used to replace Numarray. ってことらしいのだが、つーことは今は numpy.array を使えと?
731 名前:デフォルトの名無しさん [2008/07/04(金) 16:29:12 ] A newer implementation, Numarray, is a complete rewrite of Numeric but is also deprecated. NumPy is a merge between the two that builds on the code base of Numeric and adds the features of Numarray. ---- Wikipedia にはこうかかれていました。
732 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 18:47:31 ] ありがとうございました
733 名前:デフォルトの名無しさん [2008/07/04(金) 19:21:43 ] どう見ても精子です。 本当にありがとうございました。
734 名前:デフォルトの名無しさん [2008/07/05(土) 20:03:29 ] 自鯖クラッシュに伴い、Python ベースのブログツールに して気分一新しようと思ってるんですが、この世界は 大体 Zope ベースと TurboGears ベースに収束しつつあるんでしょうか? Apache + Pythonベースの CGI というよりは、 サーバ機能も含めて全部 Python で固めたシステムに してみたいんですが、そうなると Zope ベース一択ですか?
735 名前:デフォルトの名無しさん [2008/07/05(土) 20:34:16 ] Debian に zope3 パッケージが見つかったんで入れちまった。
736 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 20:48:34 ] Zope3はガチで地雷。
737 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 20:50:44 ] 言うな。個々のパーツは素晴らしいと思うんだが
738 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 21:17:12 ] ブログツールってのが既成のなら 何ベースというより機能で選択すればいいとおもうけど 自分で構築するならlighty+WSGIかSCGIなPythonアプリかな。 Zopeは2.6以降追っかけてないけど 当時の設計思想でコアなProductも同等以上なら Python自体がバージョンアップしてる分そうとう楽しく書けるはず。 でも実際は>>736 のとおりなんだろうな。
739 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 22:23:27 ] Zope3はすばらしいと思うが周りに集まってくる日本人がクソ。
740 名前:デフォルトの名無しさん [2008/07/05(土) 22:26:12 ] え?地雷なの? なんか改造したくなったときにPythonだと普段から使っているからやりやすいかと思って。 PerlとかPHPで書かれたやついじりまくって収集つかなくなった。
741 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 22:29:01 ] 舞の海
742 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 23:27:31 ] >>740 >PerlとかPHPで書かれたやついじりまくって収集つかなくなった。 センスのある奴は道具に左右されずそつなくなんでもこなすもんだがね。
743 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 00:25:22 ] クマー
744 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 01:40:50 ] ちょ PHPはセンスあっても無理な時は無理 grobal依存しまくりな著名アプリがほぼ絶滅したら認識改めてもいいが なんかSquirrelMailっての改造作業回された時にほんと死ねクズ開発者共って思った
745 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 03:10:32 ] PHPにはnamespaceすらも無いの?
746 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 03:13:36 ] ねえよンなもん
747 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 04:53:51 ] PHPは言語自体行き当たりばったりなハックで作られてる印象
748 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 08:31:52 ] >>744 >SquirrelMailっての改造作業回された時 ドカタ乙。
749 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 08:45:48 ] ワラ
750 名前:デフォルトの名無しさん [2008/07/06(日) 11:23:57 ] Perlは綺麗なのか? かなりアドホックに建て増ししてるように見えるが。
751 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 11:35:17 ] Zope3の実装はきれいだけど、使っている日本人がババッちい。
752 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:02:04 ] zopeはメメタァなだけだろ
753 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:49:36 ] >>751 なんでZope関係の日本人は変な感じがするんだろう…
754 名前:デフォルトの名無しさん [2008/07/06(日) 13:35:53 ] CMSでいえば俺が以前使ってた geeklog の人なんて もっと気持ち悪いよ。
755 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 14:39:40 ] CMSスレでも評判悪いなw
756 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 16:02:22 ] >>745 namespaceは5.3で導入される。6.0からunicodeのネイティブサポート。
757 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 16:22:21 ] 総じてCMS開発者は気持ち悪いのか?
758 名前:デフォルトの名無しさん [2008/07/06(日) 16:54:27 ] >>755 俺もね,いろいろと改良しようとはしたんだ. というか,実際やった.自分のブログだけは. でもさ,モジュール化が難しい PHP だと, 上流の変更に合わせてマージできるように確認 するだけでえらい手間がかかるんだ. そこまでしてコントリビューとするのも面倒だったからやめた. 上流での変更範囲のどこまでが自分がコミットした パッチに影響あるか,確信が持てないし, 退行テストするほど時間に余裕もない. つーわけで Zope 3 だとその辺考慮されてるかな? とか淡い期待を抱いてインスコはしてみたものの, まだインスタンス作成すらしてないや. Zope スレも過疎ってるみたいだしさ
759 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 01:30:40 ] 全然話は変わるけど、pythonってなんで file = open('hoge.txt') for line in file : hogehoge() って書けないのよ
760 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 01:33:24 ] 書けるよ
761 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 03:01:11 ] 行毎なのか文字毎なのかバイト毎なのか はっきりしろ
762 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 03:17:19 ] >>759 Oh! Python勉強中なのでその話題は気になります Perlだったらこんな感じ? open(IN, "hoge.txt") or die "Can't open hoge.txt"; while(<IN>) { chomp; print $_; } close(IN); Pythonなら
763 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 03:22:47 ] Pythonならこう? f = open("hoge.txt", 'r') while True: l = f.readline() if l == '': break l = l.rstrip('\n') print l f.close() …もっと上手い書き方・短くなる書き方があるのでしょうか? while True: が気になります ここに条件判断入れて短くできないのでしょうか?
764 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 03:24:57 ] というか Perlの or die "〜" に相当する部分がないのも気になるな… try: 〜 except: 使わなきゃダメなのかな
765 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 04:39:35 ] >>763 ファイルから1行ずつ読むループは for line in file: でいいんだよ。 759が何を駄目と言ってるのか分からない。
766 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 04:58:16 ] >>763 f = open('hoge.txt') for line in f: print f, # 末端にカンマつき f.close() stdout.writeのほうが好みならそっちを あと例外は補足しなければ大概はdieの代わりになるよ
767 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 05:10:36 ] >>765 おお…ホントだ! 試してみたら行けました 「Python ファイル読み込み」で検索すると>>763 のような書き方しか出てこなかったので for line in file: なんて書き方ができるとは知りませんでした …どうして初心者向けの解説ページでは長々とした書き方を紹介してるんだろう もしかして比較的最近の版じゃないと書けないやり方なんでしょうかね? 何にしても短く書けて嬉しい限りです 後は or die "〜" 相当の書き方を調べてこないと…
768 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 05:10:41 ] ごめん間違い for line in f: print line, で
769 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 05:15:50 ] >>766 膝を打ちました print の最後にカンマをつけることで改行を出力しない =読み込んだ行の改行を利用して改行してしまう、ということなのですね 上手いやり方があるなあ… しかもたったの3行になってて感動しました 同じ処理でもこんなに短く書けるのか…
770 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 06:54:27 ] 公式に良いチュートリアルがあるよ。 >>759-769 の内容は網羅されてる。 ttp://www.python.jp/doc/release/tut/
771 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 12:19:44 ] sys.stdout.writelines(open("hoge.txt")) for line in open("hoge.txt"): print line
772 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 20:51:05 ] >>770 「網羅されてる」ようには見えませんが… 7.2 ファイルを読み書きする www.python.jp/doc/release/tut/node9.html#SECTION009200000000000000000 目についたのはこのへんですが、この内容から上記の話を知識として得るには無理がありませんか? それとも、そちらで見ている項が違うんでしょうか? 余談ですが こういってはなんですけど、公式のチュートリアルってなんだか判りづらくないですか…? プログラミングそのものが初めての人向け、のように一見始まりながら しかし噛み砕き方がかなり中途半端で、そのうえ、どこに何が載っているかが判りづらく 初心者にも、他言語習得済みの人にも どちらにもお勧めできない解説になってるように思えます …和訳文書があるだけマシではありますが、おそらくコレは原文からしてよくないんでしょうね
773 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 21:49:17 ] >>772 もっと先のイテレータのところにちょろっと書いてある。
774 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:29:17 ] 余りわかりやすく書いてしまうと本が売れなくなる
775 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:35:07 ] イタリックは止めて欲しいよね
776 名前:770 mailto:sage [2008/07/09(水) 22:43:43 ] ちなみにPython2.4.2以降のチュートリアル(英語)には ファイル読み書きの項にも載ってる ttp://docs.python.org/tut/node9.html#SECTION009210000000000000000 >>772 > 初心者にも、他言語習得済みの人にも > どちらにもお勧めできない解説になってるように思えます 確かにチュートリアルは初心者向けではない ただ良いと感じるかそうでないかは あくまで読む人の経験に左右されるので一概には言えない 良くないと感じたら入門書を買うのが吉
777 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 23:03:38 ] pythonの入門書なんか書籍数が少ない上に中途半端なのばっかじゃん python勉強しようって連中からしたらifとかforとかたらたら書いてあっても無意味なのにさあ EffectiveC++とかEffectiveJava的な本が無いのがいかん
778 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 23:49:04 ] >>773 あっ…そこでしたか。これは失礼しました。たしかにちらりと紹介されてました 9. クラス - 9.8 イテレータ (iterator) www.python.jp/doc/release/tut/node11.html#SECTION0011800000000000000000 頭の中で「ファイル」「for文」のキーワードしか浮かばなくて違うところを探してました… www.python.jp/doc/release/tut/node6.html#SECTION006200000000000000000 4. その他の制御フローツール - 4.2 for 文 Pyhon 2.5.2版チュートリアルでは、ファイル関係の項に事例が載ってるのが興味深いです 版が新しくなるたびに、微妙に改善?されてるのですね>原文
779 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 12:40:48 ] Cookbookでもみたら。 プログラミングの初心者には、 pythonで学ぶプログラミング作法がおすすめなんだがさすがに古いんだよな。
780 名前:デフォルトの名無しさん [2008/07/10(木) 12:41:34 ] is 演算子はオブジェクトに関するアイデンティティテストですが, 定数に対しての式 3 is 3 が True になるのはどういう理屈によるのでしょうか.
781 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 14:01:23 ] 定数じゃないから >>> int(3) is 3 True
782 名前:デフォルトの名無しさん [2008/07/10(木) 15:42:02 ] is ってオブジェクトとして同じってことであって, 値として同じってことじゃないと思うんですよ. i = int(3) j = int(3) print i is j #これは True print i == i #これは True class TestClass(): def __init(self): pass def __eq__(self, right): return True p = TestClass() q = TestClass() print p is q #これは False print p == q #これは True
783 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 15:46:43 ] Pythonの数値はimmutableだから 同じオブジェクトを使いまわしても問題ないんです
784 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 15:48:19 ] int,float,str等の場合はa==bがTrueでもa is bはFalseになる場合もあるので 使うべきではないね