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


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

Pythonのお勉強 Part 26



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]

これは何が起きているんだ?


俺の頭が弱いのか? 何が言いたいのかわからん






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

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

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