1 名前:デフォルトの名無しさん [2008/04/29(火) 23:47:08 ] 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/1206876081/ ◆関連スレッド 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統合M24【Java/C/PHP/Ruby/Python/Perl】(PyDev) pc11.2ch.net/test/read.cgi/tech/1200918324/ 【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
285 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 01:34:00 ] >>283 最も適しているのは並列処理の分野で embarrassingly parallel と呼ばれるカテゴリに属する種々の計算、 すなわち入力データを複数の独立した部分に分割できて、各部分について他から独立して計算が行なえる タイプの用途に適している。 en.wikipedia.org/wiki/Embarrassingly_parallel Wikipediaに例があがっている。フラクタル計算とか3DCGのレンダリング(例:レイトレーシング)とか力任せの 暗号解読とか色々ある。 並列処理って概して複雑で長時間計算し続ける必要のある応用が多い。そういう応用には C とか Fortran を 使うことがほとんどなんだけど、きちんと動くようになるまでの開発時間が長くてデバッグがたいへんだったりする。 そういう並列プログラムの試作(プロトタイピング)に Python が使えたらいいなーと個人的には思っている。
286 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 08:49:01 ] >>274 おまえにいいこと教えてあげよう。 市場の中の肉屋さんいって、 「ホースください」頼んでみ。 解体処理した豚の膣の部分がもらえる。 ほんとは金かけて廃棄しないといけない部分だから無料でもらえる。 食い物にはならないから。 この豚の膣が極上。 まあ考えたら膣だからな。 人間のじゃないだけで本物の膣だから、気持ちよくて当たり前。
287 名前:252 mailto:sage [2008/05/11(日) 09:30:17 ] re.escapeってなんでもかんでもエスケープしちゃうのか・・・ \山\田\太\郎て
288 名前:デフォルトの名無しさん [2008/05/11(日) 09:43:58 ] >>285 PythonでCPU8個使って並列計算するよりCで書いたプログラムの方が速そうだったり。。。
289 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:57:09 ] >>288 何言ってんだ?
290 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 10:28:52 ] >>289 あ?ヤンのかコラ
291 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:21:19 ] www.geocities.jp/gaijin_e3/omae01.jpg
292 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:21:53 ] >>286 ついでに言うと豚の内臓と人間の内臓はかなり近いらしいね 豚の心臓を人間に移植した話もあるからな
293 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:13:17 ] >>292 羊の膣も極上という話だけどどうなのだろうね?
294 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:14:24 ] 膣なんてどうでもいいから チャッチャとpygame資料の和訳作業に務めろ糞野郎共
295 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 14:39:25 ] >>285 自分も並列化するときのプロトタイプとしてPythonの並列環境を使ってみたいと 考えているんだけれど、今のところプロトタイプとしての感触はどう? データ分割の楽な問題ってCとかFORTRANでもOpenMPを注意深く使うだけでも早くなる事が 多いし、MPIでも慣れれば苦労せずに書けるけれど、そうでない、スレーブ間での通信が必要 とかうまく分割できないとかそういう問題はMPIでやろうとするとデバッグが(;゚д゚) なことになりがちで、そういう用途にPythonのプロトタイプが役に立つなら素晴らしいと思う 実はC並列版とそれほど速度とメモリ使用量が変わらないとかなら最高 C並列版より速ければ神
296 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 16:53:12 ] Parallel Python だけど pp.Server.__scheduler() を適当に書き直せばワーカと仕事の対応(割り当て)を ユーザ側で決められそうな希ガス。問題はワーカ間のプロセス間通信。これが一番面倒なところなんで 自前で実装となると Parallel Python を使ううまみがほとんどない・・・。 やっぱ MPI の Python バインディングあたりが一番現実的な解かなー。でもなんか気が重いんだなー。 もっと Python らしく lightweight なソリューションがないかなー。 >>288 Python の並列プログラムより C の逐次プログラムの方が速そうってことだよね。 そういうことは十分(多分頻繁に)あると思われ。 >>295 残念ながらまだ並列プログラムのプロトタイプ用途には使えてなくて感触を得るところまでいってない。 理由は単純で、Python で手軽に並列プログラミングを実現できる道具を見つけられていないから。 >>209 に書いたようにいろいろ試してるんだけどなかなか・・・。 ただ、個人的には Python を並列化のプロトタイピングに使うのは大いに有望だと思っている。 プロトタイピングの場合、欲しいのは並列度やデータ量を上げたときの実行時間の変化であって、 実行速度が多少遅くて実験に時間がかかるとしても知りたいことは分かるはずだから。 プロセス間通信にソケットを使うとすると、データ量が大きくなれば Python でも C 等と同じぐらいの 速度が出る(ハズ)。演算量が多い部分に numpy 等の C/Fortran で書かれた数値カーネルを使うことに すれば、プロトタイピング用途には十分な速度とメモリ使用量が得られるのではと思う。
297 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 01:33:26 ] Linux で wxPython をコンパイルしようとして、 ttp://ymasuda.jp/python/wxpython/installation.html ここを参考に進めて行ったんだけど、最後の python setup.py install を実行したところでむちゃくちゃエラー吐いて止まるんだけど・・・ 一部だけエラーを載せるけど、同じファイルのエラーが延々と120行近くでるんだ。 contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: 'wxGLCanvas' was not declared in this scope contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: 'arg1' was not declared in this scope contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: expected primary-expression が ')' トークン前にあります contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: 数値定数の前に expected ';' 「glcanvas_wrap.cpp wxPython」で検索したら英語で色々皆同じ問題にあってるみたいだけど、解決方法を探せなくて(読めなくて)困ってます・・・教えて!エロイ人!
298 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 02:10:10 ] config.py(setup.py?)のBUILD_GLCANVASを0にしてみたら?
299 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 08:47:31 ] >>297 どのディストリ使ってるのか不明なんだけど、 バイナリパッケージでは存在してないの?
300 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 17:11:39 ] 単なる興味なのですが、Unicode文字列と等価なバイト列を得る方法をご教示頂けないでしょうか? 'hello'と等価なバイト列は'\x68\x65\x6c\x6c\x6f'です。 で、u'hello'と等価なバイト列は、例えば'\xff\xfe\x68\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' と思うのですが、pythonで両者の直接変換はできるのでしょうか?という質問です。 u'hello'.encode('utf-16')がほぼ等価ですが、これはあくまでエンコーディングなので、 直接バイト列を得てるわけじゃないのかな、と思った次第です。
301 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 17:19:12 ] 内部表現はUCS2かUCS4だったと思うのだが 中身に触る方法はないほうがいいんじゃないかな
302 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 17:23:20 ] ord 関数じゃダメなんすか
303 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:12:59 ] >>300 文字列はエンコーディングを決めなければバイト列では表現できないよ。 > 'hello'と等価なバイト列は'\x68\x65\x6c\x6c\x6f'です。 ここで実は300さんはエンコーディングとして ASCII を仮定している(ASCII をサブセットとして含む 別のエンコーディングかも知れない)。例えば、もし EBCDIC を仮定していたら別のバイト列になる。 > pythonで両者の直接変換はできるのでしょうか? エンコーディングが分かっていればご存知の通り unicode() と .encode() で可能。
304 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:39:43 ] print repr([u'hello'])
305 名前:297 mailto:sage [2008/05/13(火) 01:30:38 ] >>297 です。 >>298-299 大変申し訳ない。 上記URLの、下記の文をすっとばしてました・・・。 cd $WXDIR (ソースツリーに移動する) mkdir bld (ビルドディレクトリ bld を作成) cd bld (ビルドディレクトリに移動) ../configure (configure を実行) 一番最初からやり直したらエラーを吐かなくなったよ。 でも、色々可能性を考えて下さってありがとうございました。 お騒がせしてしまい申し訳ございませんでした。
306 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:29:09 ] >>305 うわ、ビルド方法が面倒くさいね
307 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 10:12:52 ] >301 ないほうがいいってことはないでしょ 初心者が文字列操作で使うべき方法として 提示されるかどうかはともかく
308 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 11:09:48 ] >>> repr(unicode('あいうえお')) "u'\\u3042\\u3044\\u3046\\u3048\\u304a'" >>> unicode('あいうえお').encode('unicode_escape') '\\u3042\\u3044\\u3046\\u3048\\u304a' >>> unicode('あいうえお').encode('raw_unicode_escape') '\\u3042\\u3044\\u3046\\u3048\\u304a' >>> unicode('あいうえお').encode('unicode_internal') 'B0D0F0H0J0' 好きなのを選べ
309 名前:300 mailto:sage [2008/05/13(火) 12:46:51 ] >>301-304 >>307-308 皆様ご助言どうもありがとうございました。 >>302 >>308 さんご提示の、コードポイント取得方法が私の期待に非常に近いものでした。 ですがそもそも、>>303 さんご指摘の通り、私には「バイト列はエンコーディングによって はじめて定義されるもの」という認識が甘かったように思います。 私が例示したu'hello'のバイト列は、既に何かのエンコーディングが施されたもののはずだから、 そのバイト列と.encode(...)は全く等価ですね。 御蔭様で理解が深まりました。ご教示どうもありがとうございました。
310 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:58:29 ] 最近の初心者は文体が丁寧だな
311 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:13:00 ] いいことじゃないか。
312 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:42:46 ] ipython1.0 は並列に対応しているみたいだね 使ってみたいがインストールできないorz
313 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:05:48 ] threading.threadで作ったスレッドをKillするにはどうすればええの? class myThread(threading.Thread): alive = True def run(self): while self.alive: """ なにか """ def kill(self): self.alive = False こういうのじゃなくて、イメージとしては threading as th myth = th.Thread() myth.start() print "あへあへ" myth.kill() みたいな。
314 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:27:04 ] 無理。 他のOSネイティブなスレッドでも、そういう手段は用意されていないか 用意されていても推奨されていない。
315 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:33:36 ] 基本的にスレッドはスレッド自身で終了させた方がいいよ
316 名前:デフォルトの名無しさん [2008/05/14(水) 00:04:03 ] ttp://www.devchix.com/2008/05/10/kamaelia-the-future-of-python-frameworks-looks-promising/ > Kamaelia: The future of Python Frameworks looks promising.
317 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 06:37:55 ] とりあえず clss GetBBC はよしたほうがいいな
318 名前:デフォルトの名無しさん [2008/05/14(水) 17:22:08 ] groups.google.com/group/comp.lang.ruby/search?group=comp.lang.ruby&q=rpdf2txt+ 空のtxtファイルが出来る言ってるから、日本語通らない? とかスレ違い気味だけど聞いてみる
319 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 19:29:11 ] 日本語でおk
320 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 19:23:25 ] ウェブアプリを作りたいなと思い、教育用らしいPythonを始めようと思うのですが XAMPPみたいにアーカイブを展開するだけで ApacheとPythonのApacheモジュールが使えるようになるWindows向けソフトとかありますか? お手軽な感じで始めたいです
321 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 19:30:13 ] cd htdocs C:\Python25\python.exe -m CGIHTTPServer Pythonだけでできるよ。apacheなんてイラネー
322 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 19:55:26 ] 320です どうもありがとうございます ブラウザで表示確認できるんでしょうか よくわからないので調べてきます ほんと無知ですみません
323 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 22:07:06 ] CGIHTTPServer にあったディレクトリのバグは直ったんだろうか?
324 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 22:13:14 ] これ? svn.python.org/view/python/trunk/Lib/CGIHTTPServer.py >[Bug #737202; fix from Titus Brown] Make CGIHTTPServer work for scripts in sub-directories
325 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 00:01:14 ] >>321 終了のしかた教えて
326 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:59:21 ] Python の C コード書くときのコーディング規約って、みんなちゃんと守ってる? どこまで守ってる? static PyObject * Hoge(........) { •関数の戻り値型の直後に改行を入れる •関数ブロックの始まりの括弧の直前で改行する if (a + b + c) { } •関数以外のブロックは、始まりの括弧を行末に置く •括弧の中に余分な空白を入れない •二項演算子の両側には空白を置く X return ( expr ); O return expr; •冗長な括弧は使わない
327 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 06:14:03 ] >>325 Ctrl + D とかじゃないの
328 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 10:01:43 ] >>326 そんな規約があるとは知らなかった。
329 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 10:10:11 ] >>326 ttp://www.python.org/doc/ の下のどこかにあります?
330 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 10:59:22 ] どう見てもPEPだろ
331 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 11:14:13 ] WindowsならCtrl+ZのあとにEnter でも最初の表示どおりhelp→help()→quit→quit()と入力していってほしいかも。
332 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 11:49:46 ] >>328 ,329 PEP 7 -- Style Guide for C Code www.python.org/dev/peps/pep-0007/
333 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 14:47:26 ] >>321 >>327 >>331 ありがとうございます Windows で python -m CGIHTTPServer を実行しています Ctrl + C Ctrl + D Ctrl + Z どれもダメだったのでタスクマネージャーから殺したら終了出来ました あとでわかったのですが、 Ctrl + C を押したあとにブラウザの更新ボタンで再度リクエスト投げると Keyboard Interrupt が出て終了するようです Windows だから select で監視出来ていないということでしょうか?
334 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 15:22:22 ] 単純にaccept()がブロックしてるだけでしょ try節で囲むかtelnet localhost 80とかやってから落とせばいい
335 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 15:44:26 ] >>333 普通のCGIがやりたいの? ApacheでCGIがやりたいの? 320を読む限りではGoogle App Engineとかそういうのが近いのかな? GAEはお勧めしないけど。
336 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 19:40:24 ] >>335 320ですが320は322しか書き込みしていません・・・ 私とはしたいことが異なるのではないかと思います あと、質問してもよろしいでしょうか じつはまだサーバ上でファイルを実行できていないんですが、そのことについて・・・ CGIHTTPServer.pyを起動させて htdocsフォルダを作って まだpythonのスクリプトが書けないので既存のスクリプトファイル (python.rdy.jp/wiki.cgi?page=PythonAvailableServers のcheck.cgiとexplore.cgi)を localhost:8000/htdocs/ に入れて表示させてみたのですが ieだとそのまま中身のテキストが表示され firefoxだとcgiファイルのダウンロードが始まってしまいます 拡張子をpyに変えてみたらie、firefoxともそのまま中身のテキストが表示されます cgi-binフォルダを作って 同様に既存のスクリプトファイルを localhost:8000/cgi-bin/ に入れて表示させてみたら 拡張子がcgiだと ie、firefoxともに > Error response > Error code 403. > Message: CGI script is not executable ('/cgi-bin/check.cgi'). > Error code explanation: 403 = Request forbidden -- authorization will not help. と表示されます 拡張子をpyに変えてみたら ie、firefoxともに真っ白な画面が表示されます うまく実行させるにはどうすればいいのでしょうか・・・
337 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:05:18 ] それsh辺りのスクリプトだからwinじゃ動かないよ .pyに変えたらコマンドプロンプトにエラーメッセージが表示されてるからよく嫁 とにかくエラーメッセージはきちんと嫁
338 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:05:43 ] Apacheの場合、デフォルトで * htdocsにはHTMLおよび画像ファイル * cgi-binにはCGIスクリプト と分けて設置しなければいけない。 CGIHTTPServerでも似たようなものだと思う > Message: CGI script is not executable ('/cgi-bin/check.cgi'). とりわけ使ってるのがLinuxなら CGIスクリプトの一行目にshebang入れてchmod +xしなきゃだめ WindowsだとWebサーバにもよるけどshebangは必要かも
339 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:08:17 ] ああほんとだ。見てなかった >sh辺りのスクリプト explore.cgiはPythonで書かれてるから動くんじゃないかな
340 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:13:03 ] >>336 htdocs フォルダが My Documents みたいにスペースの入ったフォルダの配下にない?
341 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:16:50 ] >>337-340 336です 親切にどうもありがとうございますm(_ _)m ただ話の内容が難しくて理解が追いついていません・・・ windows上で使っています いつかはレンタルサーバを借りて動かしたいと思っているのですが windowsとlinuxでスクリプトの書き方(?)が異なるのでしょうか・・・ コマンドプロンプトにメッセージが表示されるんですね 読んでみます テスト用に選んだスクリプトも選択ミスだったんですね パスにスペースは入っていません ピリオドと数字は入っています エラーメッセージをよく読みます
342 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:35:42 ] 実際に試してきた 1. c:\cgi-bin\ に env.py を置く import os print 'Content-type: text/plain\n\n' for key in os.environ: print '%s: %s' % (key, os.environ[key]) 2. cd c:\ して python -m CGIHTTPServer する 3. ブラウザで localhost:8000/cgi-bin/env.py にアクセス 環境変数がずらっと表示されたら成功 Windowsの場合、shebang も chmod +x も必要ないが 拡張子は .py にしないと動かないみたい あと My Documents みたいなフォルダの配下だとこけるのは >>340 が指摘してくれている通り
343 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:01:56 ] >>342 336です env.pyはうまく動きました!と思います 45行ほどの文字列が表示されました explore.pyもうまく表示されました 表データが表示されました cgi-binに拡張子をpyにして入れるんですね 初歩的なことに付き合っていただき みなさん ありがとうございますm(_ _)m
344 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:10:10 ] めずらしくpythonのお勉強なんかやってるやつがいるな
345 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:34:07 ] まだpythonにたどり着いてない気が…
346 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:44:28 ] c:\ に置かせようとするセンスが理解出来ん
347 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:50:30 ] センスっつーより悪意を感じる
348 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:13:52 ] 拡張子がcgiでも関連付けでpythonを起動してやるようにすれば動くかもしれない。 実行可能ならbatなんかでもCGIとして動作するみたいだから。
349 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 16:39:43 ] こんにちは。いつも参考にさせていただいております。 さて、早速なのですがPythonでテキストファイルへの書き込みは出来るのですが追加の書き込みの方法がわかりません。 一度内容を読み込んで結合してから書き込んでもよいのですがあまりスマートとは思えませんでしたのでここに投稿した次第です。 方法をご教授いただければ幸いです。
350 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 16:42:06 ] open(path, 'a')
351 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 16:48:57 ] レスありがとうございます。解決いたしました。
352 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 20:59:01 ] 下記をCGIとして動かしてみたところ、何も表示されません。 # -*- coding: utf-8 -*- import os import cgi import cgitb; cgitb.enable() print "Content-Type: text/plain\n\n" form = cgi.FieldStorage() if not (form.has_key("name") and form.has_key("addr")): print "<H1>Error</H1>" print "Please fill in the name and addr fields." return print "<p>name:", form["name"].value print "<p>addr:", form["addr"].value 以下は動作するのでバーミッションの設定ではないと思います。 # -*- coding: utf-8 -*- import os import cgi import cgitb; cgitb.enable() print "Content-Type: text/plain\n\n" print "hoge" 解決策など示していただければ幸いです。
353 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:06:40 ] returnが関数外じゃない?
354 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:18:28 ] すいません。インデントが外れていたので codepad.org/r6g67n1j codepad.org/vUcQXO9g
355 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:30:37 ] return→sys.exit()に
356 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:33:21 ] いや、だから>>353 が言っているように、関数内じゃないのに returnがあるのがおかしいんじゃないの # -*- coding: utf-8 -*- import os import cgi import cgitb; cgitb.enable() def main(): print "Content-Type: text/html; charset=UTF-8\n\n" form = cgi.FieldStorage() if not (form.has_key("name") and form.has_key("addr")): print "<H1>Error</H1>" print "Please fill in the name and addr fields." return print "<p>name:", form["name"].value print "<p>addr:", form["addr"].value if __name__ == '__main__': main()
357 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:34:44 ] apacheならerror_log(error.log)に出なかったっけ
358 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:38:05 ] pychecker, pylintあたりで文法チェックしといた方がいいかもね
359 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 06:24:41 ] >>355 でFAもいいところなわけだが
360 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 13:59:12 ] codepad.org/AkQK38ei 関数の引数って参照渡しなの? Traclight/plugins/themaengine/api.py あとTracってAPacheがないと動かせないですか? PythonをUSBメモリに入れて持ち運びたい(できればtracも持ち運びたひ…)
361 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:50:11 ] >>360 >関数の引数って参照渡しなの? そうだよ。入門書嫁。
362 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:54:54 ] どんな入門書だよ
363 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:55:42 ] >>360 いっちゃうと代入も何もかもぜんぶ参照渡しです。 だから逆に参照渡しという概念がでてこない。 TracはFastCGIやWSGIでも動作するからApacheじゃなくてもいい。 lightyなんかいいとおもう。 あとWindows版Pythonならパスが変わっても動作するはず。
364 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:08:52 ] >>362 まともな入門書にはたいてい書いてあるよ
365 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:09:35 ] Pythonって参照渡しって言うのかな >>> def foo(x): x = 2 ... >>> a = 1 >>> foo(a) >>> a 1 いわゆる参照渡しだと、aの値が書き換えられるんじゃないの
366 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:10:56 ] >>365 def foo(&x): x = 2 これでOK まともな入門書にはかいてあるよ
367 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:15:57 ] >>366 つまり、「何もかもぜんぶ参照渡し」というわけでなく、 特に指定しなければ値渡し、ということじゃない?
368 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:16:42 ] 参照をリファレンスという意味で使ったなら ある意味正しいと思う
369 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:21:18 ] >>> def foo(&x): x = 2 SyntaxError: invalid syntax ついに嘘書く奴が出てきたよ
370 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:30:59 ] >>365 def foo(x): ↑ここのxには確かにa = 1と同一の1が渡る。 x = 2 ↑でもこれはその1を2に置き換えるのではなく xの参照先を2に変更することになるのでaは1のまま。
371 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:31:48 ] >>365 Pythonで数字はイデア界にあるから 書き換え不能なんですよ。
372 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:33:56 ] >>369 嘘を嘘と見抜く練習をしような(w
373 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:49:35 ] つまり = は代入ではなく束縛ってことか ところで >>> lst = [0] >>> lst[0] = lst >>> lst [[..]] >>> def p(x): print x >>> [p(x) for x in lst] [[..]] [None] なんぞこれ
374 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:55:14 ] 循環参照は[...]になるのか。賢いな。
375 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 18:42:18 ] >>370-371 えーと、本当に参照渡しの意味わかってんの? fooの仮引数がxと宣言されているが、aを渡したときにそのxがaのエイリアスとして 機能する(つまりxがaと同等である)ようなものが参照渡しなんだが。 FORTRANはデフォで参照渡しだし、C++やC#は参照渡しもサポートする。 Pythonの場合、a, xは同一のオブジェクトを指している*別変数*だから、 xへの代入はaに影響を与えない。 そういうのは参照渡しとはいえないでしょ。
376 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:00:23 ] >>365 引数そのものはimmutable(不変)なので、関数内で書き換え不可。 この場合の引数とは、変数のアドレスのこと。 変数が指しているデータを書き換えたい場合は、例えば以下のように出来る。 def bar(x):x[0] = 2 a = [1,2,3] bar(a) print a # --> [2, 2, 3]
377 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:14:55 ] ミュータブルorイミュータブルというのはオブジェクトの特性であって 変数の特性ではない
378 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:15:06 ] そもそもPythonのオブジェクトには代入演算子ないし
379 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:36:17 ] Mr.NishioのJython本を読むと、変数はオブジェクトへのリファレンス貼る ってことが書いてある。 買って読んでみなよ。
380 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:01:56 ] > 変数はオブジェクトへのリファレンス貼る 俺の頭が弱いのか? 何が言いたいのかわからん
381 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:05:15 ] C風に言えば、Pythonの変数はオブジェクトへのポインタ 代入はポインタのコピー 関数呼び出しは全部値渡し Javaも値型(基本データ型)以外は一緒
382 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:12:01 ] >>360 > 関数の引数って参照渡しなの? 違います。 www.python.org/doc/faq/programming/#how-do-i-write-a-function-with-output-parameters-call-by-reference > Remember that arguments are passed by assignment in Python. Since assignment just creates references to objects, > there's no alias between an argument name in the caller and callee, and so no call-by-reference per se. (引数は Python でいうところの代入によって渡されることを思い出して下さい。代入は単にオブジェクトへの参照を作るものなので、 呼び出す側の引数名と呼び出された側の引数名のあいだにはエイリアスはなく、「参照による呼び出し」も本質的に存在しません。)
383 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:44:09 ] 渡す物がlistになると挙動が変わるはず
384 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:47:37 ] >>383 リストだろうが何だろうが、何も変わらない。 >>> def f(x): x = [1,2,3] ... >>> a = [] >>> f(a) >>> a [] >>>
385 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:58:26 ] >>> m = [] >>> def a(x): x.append(3) >>> a(m) >>> a(m) >>> m [3, 3] これは何が起きているんだ? 俺の頭が弱いのか? 何が言いたいのかわからん