Pythonのお勉強 Part3 ..
263:
08/11/28 20:33:07
>>256
ごめんなさい
264:デフォルトの名無しさん
08/11/28 20:37:06
python <i>file</i>
python < <i>file</i>
このようになってたら分かり易いんだけどな。
fileがファイル名なのか "file" という文字を
そのまま打つ必要があるのかが解り難い
265:デフォルトの名無しさん
08/11/28 21:07:38
>>251の訳文「入力は <i> file </i> から取り込まれます」とすべきだったんだな
266:194
08/11/28 22:38:59
>>225
URLリンク(codepad.org)
枝刈りとして分岐が少ない場所から走査するようにしたところ
5秒で回答できるようになり5倍高速化しました。
数十倍は難しいです。もしよろしければ後学のために
ソースを見せていただけないでしょうか?
>>244,245
2.8秒でした。自分のプログラムもそれなりの速さがでているようで
安心しました。
>>198,201,202,232
C++勉強して書き直したところboost.pythonを利用して
0.5秒で回答できるようになりました。
きちんとC++やりなおさないとだめですね。
ところでC++とPythonで配列をやりとりするとき
URLリンク(codepad.org)
のように書いてみたのですが他にうまい書き方があるのでしょうか?
URLリンク(www.boost.org)
を見たのですが、vector<->listの変換の自動化は未実装である
ということでしたが毎回wrapperを書かないといけないのでしょうか?
267:デフォルトの名無しさん
08/11/28 23:00:46
>>266
python標準のリストって何でも入るからな
効率よくC++のvector<int>とやりとりしたいんなら
とりあえずarrayがいいんじゃないの
arrayモジュールについて調べてみることを薦める
arrayは単一型のシークエンスで、バッファインタフェースを備えていて、
buffer_info()で思いっきり内部にアロケートされてる配列のアドレスも取れるから
268:225
08/11/29 00:36:50
あれから遊びで、複数解を求めるように
改造しちゃったけど、それでよければ。
URLリンク(codepad.org)
269:デフォルトの名無しさん
08/11/29 05:23:48
for(std::size_t i=0; i<boost::python::len(l); i++)
{
board[i]=boost::python::extract<int>(l[i]);
}
イテレータでまわすほうが速くなると思う
270:デフォルトの名無しさん
08/11/29 05:29:06
>>268
助けて
$ python sudoku.py
Traceback (most recent call last):
File "sudoku.py", line 80, in <module>
main(sys.argv[1])
IndexError: list index out of range
271:デフォルトの名無しさん
08/11/29 05:32:09
ごめん
#test()
#sys.exit(0)
のコメントアウトを外すんだね。
吊ってくる。
272:デフォルトの名無しさん
08/11/29 05:50:26
つ URLリンク(codepad.org)
ポイントは
・セルごとに次に置ける数字のsetを用意する(テーブル)
・一番数字の個数が少ないセルから分岐する
・テーブルは再帰ごとに新しいのをつくる
最初、数字ごとに次におけるセルをテーブルにして苦労した。
273:デフォルトの名無しさん
08/11/29 11:51:43
pynumはPython2.6に対応してないんですか?
274:デフォルトの名無しさん
08/11/29 12:55:56
URLリンク(inforno.net)
また、-3コマンドラインスイッチにより3.0で削除される機能を使っている場合、警告を出せる。
URLリンク(d.hatena.ne.jp)
2.6を使用するために、あなたのコードに下記の変更が必要かもしれない。
275:デフォルトの名無しさん
08/11/29 17:07:00
Python 言語の中身を詳しく説明したサイトはないの?
例えば AST とか、バイトコンパイルの実装とか、そういったやつ。
276:デフォルトの名無しさん
08/11/29 19:02:43
あるよ
277:デフォルトの名無しさん
08/11/29 19:05:49
いじわるな人・・・
278:デフォルトの名無しさん
08/11/29 19:10:38
>>277
そういう池沼にはレスつけないでくれ。
279:デフォルトの名無しさん
08/11/29 19:33:54
>>276
そうか、なら安心だな。
280:デフォルトの名無しさん
08/11/29 19:35:53
>>275-279
どうみても同一人物だな
281:デフォルトの名無しさん
08/11/29 19:36:24
>>275-280
どうみても同一人物だな
282:デフォルトの名無しさん
08/11/29 20:30:01
matplotlibのplot3Dにバグあるってどんなバグ?
自分は普通に使えてるんだけど
283:デフォルトの名無しさん
08/11/29 20:46:37
pythonで3次元plotしたい場合のお勧めはどれ?
matplotlibがもうサポートしないよと言ってる
284:デフォルトの名無しさん
08/11/29 22:45:23
vpython
285:デフォルトの名無しさん
08/11/30 20:49:38
>>284
便利そうだ
URLリンク(www.nasuinfo.or.jp)
286:デフォルトの名無しさん
08/12/01 11:47:04
3.xへの移行ってまだまだ先でいいんですかね?
色んなライブラリのパッケージもあって楽だし
今のところは2.5が一番使いやすい環境みたいだけど、
今からそれ勉強しても無駄になりますか?
287:デフォルトの名無しさん
08/12/01 15:29:43
>>286
>今からそれ勉強しても無駄になりますか?
無駄にはならないと思うよ。ただ2.6を使ったり、Python 3.0で何がどう変わるのか、なぜ変わるのか、その辺りの事情についてアンテナ張って勉強しとけばオッケーかと。
288:デフォルトの名無しさん
08/12/01 15:47:03
邦訳ドキュメントも2.5になったばかりだし、しばらくは2.5でいいよ。
289:デフォルトの名無しさん
08/12/01 18:28:12
2.6をわざわざVC9でビルドしたが、そこで力尽きてしまった
環境全部移行するのが面倒くさすぎて、結局まだ2.5.2を使っている
どーせ主要なディストリとかcygwinとかもまだキャッチアップしてないだろ
290:デフォルトの名無しさん
08/12/01 19:15:10
>>289
Debian stableだとまだ2.4だw
3に完全移行するのは当分先になるだろうな
291:デフォルトの名無しさん
08/12/01 19:15:26
このスレでturbogearsやってるのは俺だけの予感
292:デフォルトの名無しさん
08/12/01 19:32:20
そんなメジャーなものを使ってて良くいうよ。
俺なんかTenginだもんね。
293:デフォルトの名無しさん
08/12/01 19:37:18
でもturbogearsって聞かなくね?
mod_wsgiで動くの?
294:デフォルトの名無しさん
08/12/01 19:37:56
pythonで画像処理ならPILですが
動画なら何を使うといいのでしょうか?
295:デフォルトの名無しさん
08/12/01 21:51:44
俺なんかTempita
296:デフォルトの名無しさん
08/12/01 22:21:28
なんでマイナー自慢になってんだよw
297:デフォルトの名無しさん
08/12/01 22:34:55
俺はダンジョーで毎日ヤッてるよ。
298:デフォルトの名無しさん
08/12/01 22:38:07
>>297
Djangoの話題はスレが荒れる
299:デフォルトの名無しさん
08/12/01 22:57:04
ぞぺの仲間入りですね
300:デフォルトの名無しさん
08/12/01 23:04:19
ぞぺとどじゃんごっていろいろ似てるよな
使ってる人たちの香ばしさとか
301:デフォルトの名無しさん
08/12/01 23:26:18
パイパイで、ぽろーーん
302:デフォルトの名無しさん
08/12/02 00:55:46
pythonでインデント使わない方法はありませんか?
ファイルサイズが大きくて困ってます
303:デフォルトの名無しさん
08/12/02 01:00:59
気にするな
304:デフォルトの名無しさん
08/12/02 01:03:52
x=range(100);print x
for i in x: print i;print '\n';
これなら出来るけど
class hoge: def func(): pass;
みたいにインデントが必要なのが2つ以上は無理だと思うよ
305:デフォルトの名無しさん
08/12/02 01:18:02
今時メモリすらギガ単位で計られる時代に
たかがスクリプトのファイルサイズを気にする奴がいるとはな
306:デフォルトの名無しさん
08/12/02 01:30:41
低スペックに気を配れないプログラマはゴミ
307:デフォルトの名無しさん
08/12/02 01:31:53
可読性に気を配れない奴もな
308:デフォルトの名無しさん
08/12/02 01:32:03
300K以上のスクリプト起動すると遅くない?
309:デフォルトの名無しさん
08/12/02 01:34:27
インタプリタだから容量は実行速度にも影響出るだろ
310:デフォルトの名無しさん
08/12/02 01:51:35
じゃぁメモリに置いとけや
311:デフォルトの名無しさん
08/12/02 01:53:12
バイトコンパイルして実行するんだから
インデントが実行速度に影響するわけないだろ
312:デフォルトの名無しさん
08/12/02 01:53:36
>>309
> インタプリタだから
関係ねえし。
313:デフォルトの名無しさん
08/12/02 01:57:51
インデント削るととか、大昔のBASICの高速化技術みたいだな
発想が化石過ぎて感動した
pycってファイルが何なのか分かってるか?
314:デフォルトの名無しさん
08/12/02 02:11:32
書き込み権限がないからpycが無いです
315:デフォルトの名無しさん
08/12/02 02:13:22
1つの.pyに詰め込んでるのでpycが無いです
316:デフォルトの名無しさん
08/12/02 02:13:30
昔のBASICって、よく使う変数はプログラムの最初の方で
宣言しておいた方が速くなるとかあったなw
そういえば、レンタル鯖とかでPythonのCGIを実行する場合って
pycは作られるのかな?
317:デフォルトの名無しさん
08/12/02 02:14:17
>>316
作られるよ
318:デフォルトの名無しさん
08/12/02 02:14:52
pyc作られようが作られまいが、内部的にはバイトコンパイルしてから
実行だから、「インデントが」速度に影響出るなんてことは、あり得ねえけどな
319:デフォルトの名無しさん
08/12/02 04:06:23
>>302
> pythonでインデント使わない方法はありませんか?
> ファイルサイズが大きくて困ってます
ハードタブにしろ
320:デフォルトの名無しさん
08/12/02 07:30:44
今時ハードタブはありえない
321:デフォルトの名無しさん
08/12/02 08:30:29
内部的にバイトコンパイルする速度には影響出るが
全体の実行時間に対する割合で言えば影響は無いと言ってもいいくらいという
322:デフォルトの名無しさん
08/12/02 08:42:55
スレリンク(tech板)l50
323:デフォルトの名無しさん
08/12/02 10:06:44
>>321
ギャバンが蒸着を完了する程度の差しか無いだろうな。
324:デフォルトの名無しさん
08/12/02 10:29:07
Pythonのスレで思うのは
バージョン間ごとの信者なんて沸かないことだな。
安定だの不安定だの、信頼性に欠けるとか。
ドキュメント化されてるからそうなってるんだろうなー。
325:デフォルトの名無しさん
08/12/02 10:36:25
>>324
バージョンあがるごとに確実によくなってるし、Deprecated Warning を無視していない
限りはほぼ確実に次のマイナーバージョンアップ (2.4 -> 2.5 みたいな) で問題ないから
移行も楽だからねぇ。
Python3.0も、互換性はなくなるけどオブジェクトシステムとか基本が変わらないし、
Python2.6にPython3.0移行支援が用意されてる (大量の Deprecated Warning と 2to3) から、
php4 -> php5 とか perl5 -> perl6 とか ruby1.8 -> ruby1.9 とかよりも簡単に
移行できそう。まぁ、ある程度有名ライブラリが3.0に対応してくるまで自分のアプリは
2.x 用のままだけど。
326:デフォルトの名無しさん
08/12/02 10:37:20
まぁ一年は様子見るけどな
327:デフォルトの名無しさん
08/12/02 18:45:34
PILでimage sequenceをゼロから作る方法をみつけれない
どこかにいいsample codeないのかな
328:デフォルトの名無しさん
08/12/02 18:51:24
GoogleCodeSearch
329:デフォルトの名無しさん
08/12/02 21:41:14
静止画はPIL
動画はpygame
という使い分けでいいのか?
330:デフォルトの名無しさん
08/12/02 22:40:31
どういう用途において?
331:デフォルトの名無しさん
08/12/03 02:00:48
PILはaviファイルの読み込みする方法はみつけたけど
加工して書き込みできなかった
pygameが読み込みも加工も新規作成もできる
332:デフォルトの名無しさん
08/12/03 14:21:04
クラス変数についてです。
class foo(object): CON = 'const'
print foo.CON # print CON としたい
例えば上のprint文で、いちいち"foo."を書くのが面倒です。
importっぽいことをやって、"foo."を省略できるように
させる方法はあるのでしょうか?
333:デフォルトの名無しさん
08/12/03 14:53:10
研究室の学生の人数全分のmatlab買えないので
pythonに切り替えた
はたしてこの選択は間違っていなかったのか
334:デフォルトの名無しさん
08/12/03 15:10:02
カローラと自転車を比べてもしょうがないな
335:デフォルトの名無しさん
08/12/03 16:25:36
>333
python というより numpy, scipy の話って感じかな
sage ってのもなんか似た臭いなんだけどどういう位置づけなのかな?
scipy のさらに上位のまとめライブラリ?
ただ matlab から"乗り換え" というのなら普通は
scilab とか octave とかが思い浮かぶけど
336:デフォルトの名無しさん
08/12/03 16:41:24
>>333
俺は windows用の matlab なら持ってるけど、俺がメインでつかう
linux 用の matlab はもってないから、完全に matlablib に乗り換えた。
(URLリンク(en.wikipedia.org))
matlab はソフトウェアには組込めないけど、matlablibは
簡単にインテグレーションできるので、移行してよかった。
てか、matlablib を見つけれてよかったとおもってる。
お勧めするよ。
337:デフォルトの名無しさん
08/12/03 16:45:21
matplotlib の話なのか、
おれが知らない matlablib の話なのか
はっきりしてくれ
338:デフォルトの名無しさん
08/12/03 16:48:23
>>337
ごめん、matlablib は自分用語で、公式にはmatplotlib。
339:デフォルトの名無しさん
08/12/03 20:20:50
>>333 pythonに切り替えた
はたしてこの選択は間違っていなかったのか
Matlab は揃いすぎ。理屈が解らなくても、マウス・クリックだけでフィルタ設計ができ
てしまう。Python ならば、学生が理論を理解できていなかったら結果を出せない。学生
用ならば python のほうが良いと思う。
>>335 ただ matlab から"乗り換え" というのなら普通は
scilab とか octave とかが思い浮かぶけど
Python 使いならば matlab から scipy に乗り換えてもおかしくない。sympy など、他の
モジュールとの連携させる意味では python のほうが matlab より扱いやすい。もう
matlab は言語としては古臭くなっていると思う。
Matlab の優位性は、matlab 言語での膨大な蓄積とドキュメントの豊富さだと思う。
340:デフォルトの名無しさん
08/12/03 22:08:10
>>332
class foo(object): CON = 'const'
CON = foo.CON
print CON
どうよ?
341:デフォルトの名無しさん
08/12/04 01:25:08
>332
import foo.CON as CON
342:デフォルトの名無しさん
08/12/04 01:36:37
すみません、12文字以内でお願いしますです。
343:デフォルトの名無しさん
08/12/04 02:45:06
file1
--------
class foo(object): CON = 'const'
--------
file2
--------
from file1 import foo.CON as CON
print CON
--------
344:デフォルトの名無しさん
08/12/04 05:42:06
matlabが今のlapackみたいな位置づけになるのも遠くないのか
345:デフォルトの名無しさん
08/12/04 09:09:15
話のネタっす
ナイトツアー問題
URLリンク(slashdot.jp)
346:デフォルトの名無しさん
08/12/04 09:56:16
shutil.move()
ってめっさ遅くないですか?
ローカルにある2MBくらいのファイルを移動するのに0.4秒から1秒かかったんですけど
流体の計算より時間かかるってどんだけ
347:デフォルトの名無しさん
08/12/04 10:48:53
OSやドライブorディレクトリのマウント状況によるだろう
348:デフォルトの名無しさん
08/12/04 11:05:44
>>346
時間がかかってるんなら、それはクロスデバイスな移動を行おうとしたからで、
実際にはコピーが走ってるんだろ
コピーはshutil.copyfileobj()で行われるはずだが
デフォルトでは16KB単位(デフォルト引数でlength=16*1024となっている)
のようだから、ddでも使ってその環境での最適なバッファ長を確認したうえで、
shutil.copyfileobj.func_defaultsを書き換えてみたら
349:デフォルトの名無しさん
08/12/04 11:08:41
言わずもがなだが、念のため
キャッシュに一旦入ってしまうとコピーは一瞬で終わるし
コピーの性能を評価する時には色々気をつけなければならないことは沢山あるぞ
勿論同一デバイス上でのrenameでいいのなら、それに越したことは無い
350:デフォルトの名無しさん
08/12/04 11:42:52
3.0きたな。
351:346
08/12/04 11:43:58
いちおスペックは
XPsp2 core2 Cドラ 空き100ギガ以上
とりあえずファイルの操作はpopenでシェル呼んでやったほうが速いですか?
popen2.popen4('move '+ファイルパス+' '+ディレクトリパス+' /y')
でいけますか?
352:332
08/12/04 12:02:47
>>340 >>341 >>343
お返事有難うございました。
するとなると、下記のような場合で foo.CONX を一気に CONX と
書けるようにするのは難しいのでしょうか?
class foo(object):
CON1 = 'const1'
CON2 = 'const2'
# 以下CON3などたくさん
353:デフォルトの名無しさん
08/12/04 12:04:09
>>351
よくわからんな
Cドライブ→Cドライブの移動で、そんなに時間かかってんの?
354:デフォルトの名無しさん
08/12/04 12:21:56
3.0きたけど様子見。
他のライブラリーが対応してないから
355:デフォルトの名無しさん
08/12/04 12:24:11
まあクオリティ的には Ruby 1.9 より断然上だよな> Python 3.0
そういえば、 Perl 6 という vaporware もありました。
356:デフォルトの名無しさん
08/12/04 12:30:13
まだ2.6にも移行してねえんだが……
357:デフォルトの名無しさん
08/12/04 12:41:44
>>353
CからCです。
いくらなんでも遅すぎですよね。
358:デフォルトの名無しさん
08/12/04 12:45:06
>>352
file1
--------
class foo(object):
CON = [('const%d' % n) for n in xrange(1000)]
--------
file2
--------
from file1 import foo.CON as CON
for n in len(CON):
print 'CON%d = %s' % (n, CON[n])
--------
359:デフォルトの名無しさん
08/12/04 12:47:22
>>357
早めにディスクのバックアップ取っとけw
360:デフォルトの名無しさん
08/12/04 13:51:33
sage使ってる人います?
numpy単独よりも便利なのかな
361:デフォルトの名無しさん
08/12/04 14:13:38
pythonのコードをdllや.soにする方法ってあるのかな
362:デフォルトの名無しさん
08/12/04 14:17:33
3.0のWhat's Newは短いなぁ
363:デフォルトの名無しさん
08/12/04 14:21:57
>>362
変更点は全て列挙してあると思うけど、例を載せてほしいってこと?
364:デフォルトの名無しさん
08/12/04 15:05:48
2.6に多くの機能が入ったからその分短くなったね
365:デフォルトの名無しさん
08/12/04 15:43:10
そういう問題なのか???
ありすぎて書けない… わけじゃなく段差の分結果的に
"what's new" の項目数は少なくなったって感じ?
366:デフォルトの名無しさん
08/12/04 15:44:05
>>365
いやいや、十分長いがなw
参考文献へのリンクも含めて読んでみろよ。
367:736
08/12/04 15:59:14
>>359
ちなみに正常な環境だと shutil.move()の実行速度って何秒くらいですか?
テスト条件はできれば同じくらいの環境で
368:デフォルトの名無しさん
08/12/04 16:16:05
shutil.move("C:\test.txt", "C:\Test")みたいにdstにディレクトリを指定すると
実装のos.renameでOSErrorが発生してcopy2の方が呼ばれてるから遅くなってるのかな?
shutil.move("C:\test.txt", "C:\Test\test.txt")みたいにファイル名を追加するか
os.renameを直で使ってみたら?
369:368
08/12/04 16:17:10
↑のはWindowsでの話。他のOSは分からない
370: 株価【52】
08/12/04 16:29:59
371:デフォルトの名無しさん
08/12/04 17:37:20
>367
0秒
372:デフォルトの名無しさん
08/12/04 19:02:54
具体的にはどの段階で3.0にいこうすればいいのかね?
373:デフォルトの名無しさん
08/12/04 19:35:22
>>372
お前の使ってるライブラリが対応したときだろ。
374:デフォルトの名無しさん
08/12/04 19:59:37
まだ 3.0 リリースせずにユーザーがもうちょっと 2.6 に慣れてから
リリースすればよかったような気がする。
でも、3.0は長い移行期間が必要とされるから、逆に早めにリリース
しておきたかったんだろうね。
375:デフォルトの名無しさん
08/12/04 20:17:04
>>352
... class a:
... CONST1=1
... CONST2=2
... for x in dir(a):
... if x.startswith("CONST"):
... exec(x + "=" + "a." +x)
... print CONST1
どうよ?
376:375
08/12/04 20:18:06
インデントがめちゃめちゃだ。
ごめんよ。
377:デフォルトの名無しさん
08/12/04 20:57:18
printのカッコが地味に面倒だな。
こっちの方が言語的にいいのは、頭では理解してんだけどさ。
いままでの癖がなかなか抜けなくて、ぱいそんたんに怒られてばっかりだ。
378:デフォルトの名無しさん
08/12/04 21:26:41
3.0が出たので入れてみた(Vista)
早速起動した。
> help()
打ってみた。動く。
そこで出た文章に従って
> modules spam
打ってみた。
エラー出た。
uft-8 ってエンコーディングが見つからないって。
・・・・あたりまえじゃああああ
どこが間違ってるのかよく分からんです。
Python30のディレクトリ下をgrepして出てくるのは
Lib/test/bad_encoding.py だけ。これは想定通りだろうが・・・
379:デフォルトの名無しさん
08/12/04 21:35:52
・・・もしかしてLib/testはインストール後に
除去するのが正しい使い方?
別んとこによけておいたら、↑も通った。
380:デフォルトの名無しさん
08/12/04 22:38:47
print("a%s%s" % ('b', 'c'))
なんかキモイな…
381:デフォルトの名無しさん
08/12/04 22:42:12
Py3kはユニコード指定しなくていいのが嬉しい。
これでフレームワークが対応してくれれば・・・。
382:デフォルトの名無しさん
08/12/04 22:52:02
つーか2.5とかでも別に
def printf(fmt, *args): print fmt % args,
def fprintf(f, fmt, *args): print >>f, fmt % args,
とか定義すりゃ
printf("a%s%s\n", 'b', 'c')
とか書けるわなあ
print()関数は、%とカッコがC風のprintf()より冗長に見えてしまうね
383:デフォルトの名無しさん
08/12/04 23:03:10
setuptoolもまだ対応してないのかな?
384:デフォルトの名無しさん
08/12/04 23:06:11
3.0わしょーい
385:デフォルトの名無しさん
08/12/05 00:17:30
>>380
boost::format
みたいだ
386:デフォルトの名無しさん
08/12/05 00:28:39
print("a{0}{1}".format('b', 'c'))
print("a", 'b', 'c', sep="")
387:デフォルトの名無しさん
08/12/05 00:32:32
>>386
それもキモいな
あまり意味の感じられない多様性
Perlみたい
388:デフォルトの名無しさん
08/12/05 00:44:15
string template は
389:デフォルトの名無しさん
08/12/05 00:53:59
print文なんて一発プログラムでしか使わん。
ちょっと込み入った規模ならファイルオブジェクトにwriteするか
loggingを使ってる。
潔癖症にかかってる人は
変える必要など無い所まで変えやがるから
迷惑この上ない。
390:デフォルトの名無しさん
08/12/05 01:03:49
一貫性に拘りすぎるのはバカみたいなことを
Pythonの中の人言ってなかったっけか
391:デフォルトの名無しさん
08/12/05 01:06:36
>>390
それは本当にそう思うけど
print()関数は、後方互換性潰してまで導入したのがこれか、とは思う
392:デフォルトの名無しさん
08/12/05 01:07:24
printは最初っからキモイ
393:デフォルトの名無しさん
08/12/05 01:09:51
>>392
全くだw
394:デフォルトの名無しさん
08/12/05 01:12:03
自演オワタ
395:デフォルトの名無しさん
08/12/05 01:15:56
単要素のタプルもキモイ
396:デフォルトの名無しさん
08/12/05 01:21:54
>>389
じゃぁお前はprintの変更の影響受けて無いじゃん。
Python開発者は潔癖症なんかじゃないよ。
print文の変更も議論の上だよ。 print文でファイルに出力する方法とか、最後に改行しない
方法とか、その為だけに構文を増やしていたのを、普通の関数呼び出しにして柔軟に
使えるようになった。
数タイプを削減するためだけに構文増やしまくってたprint文がキモ過ぎただけで、
print関数は素直で自然な姿。
397:デフォルトの名無しさん
08/12/05 02:15:03
後方互換性潰してまで導入したのがこれか
398:
08/12/05 02:22:59
それが何か?
399:デフォルトの名無しさん
08/12/05 04:52:48
Cとの互換性を重視して文法がカオスになってるC++を見てると、
どこかで切り捨ては必要だなって思う。
400:デフォルトの名無しさん
08/12/05 09:11:27
printの構文くらいしか噛みつくとこないんですね
401:デフォルトの名無しさん
08/12/05 10:00:42
デバッグプリントしようとしてエラー吐いたときのイラつきは異常
402:デフォルトの名無しさん
08/12/05 10:32:16
>>400
printの構文くらいしか噛みつくとこないということにする以外に噛み付く方法無いんですね
403:デフォルトの名無しさん
08/12/05 10:41:21
print以外に互換ない所ってどこ?
404:デフォルトの名無しさん
08/12/05 10:44:28
そもそも、printの構文なんて存在しなくなったというのが正しい。
printが関数になって、関数の構文で呼び出せるようになり、
Pythonの構文がいっそうシンプルになった。
405:デフォルトの名無しさん
08/12/05 10:46:27
>>400
ぶっちゃけPython3.0の新機能なんざ、後方互換性の破壊による
二重保守や移行の手間に見合うほどのもんじゃないよ、どれもこれも
Python3.0のほうがより良い仕様だということは認めるが、
別に言語仕様だの性能だのの明白な強化に繋がる仕様じゃないし
単なる切り落としも多い
例えば、reduce()がbuiltinから消えて喜ぶ奴がいるか?
はっきりしているのは、それでスクリプトを書き換える必要が生じる
ユーザだけは沢山いるということだ
周辺ライブラリとか作ってる人たち、今後は二重保守やテストを強いられることに
なんのかね
当たり前のようにC APIも仕様変わってんだろ
ぞっとするぜ
406:デフォルトの名無しさん
08/12/05 10:47:36
>>403
文字列の扱いは全く完璧に変わった
例外のハンドリングも構文が変わった
シンタクスレベルの変更なので、スクリプト内で動的にバージョンを判断して
分岐することはできない
バイトコンパイルの時点でシンタクスエラーになるからな
407:デフォルトの名無しさん
08/12/05 10:49:24
変化に対応できないじじいは史ねってことですね、分かります。
408:デフォルトの名無しさん
08/12/05 11:02:43
>>405
移行したくないならどうぞそのまま Python 2.x をお使いください。
だれもあなたに移行しろと言ってませんし、俺もまだ移行しません。
1年や2年は様子見で良いよ。
ライブラリが揃いだしてから、新規のコードは Python3.0 用に書き始めれば良い。
409:デフォルトの名無しさん
08/12/05 11:09:44
> ライブラリが揃いだしてから、新規のコードは Python3.0 用に書き始めれば良い。
なるほど、使ってる全部の端末に2種類のPythonインタプリタをインストールして
二重運用するわけかw
そして今までのコードベースはそのやり方じゃ、3.0からは使えない、と
うっかりミスでトラブル続出だな
boost.pythonとかどうなるのやら
410:デフォルトの名無しさん
08/12/05 11:11:52
>>409
俺は1.9、2.4、2.5、2.6、3.0全部入れてるぞ
411:デフォルトの名無しさん
08/12/05 11:13:16
>>410
>1.9
Ruby厨乙(ww
412:デフォルトの名無しさん
08/12/05 11:13:56
流石反応はええな
413:デフォルトの名無しさん
08/12/05 11:51:49
hoge.cppからhoge.hppを自動生成するschemeのprogramが
format文(pythonのprint文)のきもい使い方駆使しまくってたんだけど
似たことpythonでもできるようになるのかい?
414:デフォルトの名無しさん
08/12/05 11:59:32
>>405
C APIについてはどうなのか知らないけど、
通常のPythonスクリプトのプロジェクトでの2重保守のコストは、
テストを自動化してるかどうかによると思う。
変換ユーティリティ 2to3 の利用もテストを前提としてるみたいなので。
URLリンク(www.artima.com) より、簡単に抜粋すると。
0. テストを書く。
1. python 2.6 へ移植。
2. py3k 警告モードでテスト。
3. 警告がなくなるまで修正を繰り返す。
4. 2to3で 3.0 向けに変換。
5. 3.0 でテスト。
6. エラーがあれば変換前のコードを修正する。
7. release
手作業が必要なところ以外を自動化してしまえば、
保守コストが2倍掛かるなんてことにはならないはず。
移植コストは 2to3 がどの程度の変換をサポートしてるかに拠るのかな。
8割程カバー出来ればいいや、みたいな事言ってたを何処かで読んだけど。ソース失念。
415:デフォルトの名無しさん
08/12/05 12:05:31
URLリンク(gihyo.jp)
に2to3の適用範囲についての説明はあるな
その後もっとマシなものになっているのかどうかは分からんが
その辺は、要求品質にもよるだろうな
業務としてやってるようなものなら、テストだって全自動で終わりとかありえねえし
ゲームの自動テストでも書いてみるか?w
416:デフォルトの名無しさん
08/12/05 12:32:19
C apiの変更はboost.pythonに吸収してもらえないのかねえ
417:デフォルトの名無しさん
08/12/05 12:47:45
URLリンク(docs.python.org)
を見ると、Sequence ObjectsからString Objectsの記述は無くなって、
Bytes ObjectsだのByte Array Objectsだのが登場している。
Unicode Objectsは残っている。
strはUnicode Objectsにマップするのだろうか。
URLリンク(docs.python.org)
を見ると、相変わらずフォーマット"s"が存在し、
「string or Unicode Objects」とか書いてある。
そしてそれが「char*に」変換する。
byteからのフォーマット指定子も追加されているが。
正直何がしたいんだか良く分からないんだが。
上っ面だけ整理して、C APIはカオスに見える。
ドキュメントが追いついていないだけか?
418:デフォルトの名無しさん
08/12/05 13:38:36
まあ3.0移行とか関係なく、普通にテスト書くだろ。
テスト書かないハゲは消えろや。
419:デフォルトの名無しさん
08/12/05 15:34:22
python 2.5/2.6 を使っているんですが、
この段階では print 文でなくて print 関数を使うようにはできませんか?
future import なんとかでできたらいいなぁ、と。
いずれ python 3.0 に移行するまでのつなぎとして
今からそう書いておきたいんですが・・・
420:デフォルトの名無しさん
08/12/05 15:36:26
2.6なら from __future__ import print_function
421:デフォルトの名無しさん
08/12/05 15:44:51
>>419
>>382
422:デフォルトの名無しさん
08/12/05 16:26:39
いつのまにか2.6.1
423:デフォルトの名無しさん
08/12/05 17:42:43
>>420-421
ありがとうございました.
めでたく print("aiueo") できました.
ところで,Python でメッセージを標準エラー出力
に出す時に簡便な方法といえば何でしょうか?
やはり os.write などを使って出すのでしょうか?
print2("aiueo") のような関数は標準的にはありませんか?
自分で便利関数を作ってもその存在を忘れてしまうほど
頭が弱いので,与えられたものがあればそれを使おうと思います.
424:デフォルトの名無しさん
08/12/05 17:45:34
sys.stderr.write(...)
print >>sys.stderr, ...
print(..., file=sys.stderr)
425:デフォルトの名無しさん
08/12/05 17:47:20
>>424
> print >>sys.stderr, ...
これは非推奨。
426:デフォルトの名無しさん
08/12/05 18:02:02
logging
427:デフォルトの名無しさん
08/12/05 19:03:20
おお,logging なんてのがあるんですか.
>>425 のような書き方も知りませんでした.
もう一つ質問があります.
設定ファイルであれこれ設定する必要があるのですが,
できれば UNIX/Windows で共通に使えるように
したいと思っています.こういうときホームディレクトリ
直下に .myapplication ファイルでも用意して,
その中に ConfigFile 形式や JSON 形式で設定を
書くようにすればいいのでしょうが, Windows の
場合だったらプロファイル直下かなぁ,とか,
ポータブルにするための手間は惜しみたいとか考えてしまいます.
アプリケーションの個人用の設定ファイルの扱い方,
特にその配置場所について,Python 流のお決まりの
やり方というのはあるのでしょうか?
428:デフォルトの名無しさん
08/12/05 19:14:45
レンタルサーバーでもpython3.0対応してくれたら
移行してもいいんだがな
429:デフォルトの名無しさん
08/12/05 19:58:03
>>427
os.path.expanduser()
430:デフォルトの名無しさん
08/12/05 20:23:29
>428
自分で入れればいい
431:デフォルトの名無しさん
08/12/05 20:32:07
ブロックの終わりを示すキーワードを強要するオプションがほしかったな
432:デフォルトの名無しさん
08/12/05 20:39:22
>>427
Pitおすすめ
URLリンク(d.hatena.ne.jp)
433:デフォルトの名無しさん
08/12/05 23:56:09
以下の呼び出しはaがアサインされてないよと言われて失敗してしまうんですが
そういうものなんですかね?
def maker(a):
# return lambda(c): a + c
def f(c):
a = a + c
return a
return f
f = maker(3)
print f(4)
左辺値のaを別の変数にすれば動きます。
434:デフォルトの名無しさん
08/12/06 00:07:22
俺はBeautiful Soupが3.0に対応するまで移行するのは待っていよう
435:デフォルトの名無しさん
08/12/06 00:08:36
Python3.0ならnonlocalで出来たかと
436:デフォルトの名無しさん
08/12/06 00:09:04
>>433
URLリンク(docs.python.org)
If a name binding operation occurs anywhere within a code block,
all uses of the name within the block are treated as references to
the current block.
This can lead to errors when a name is used within a block before it is bound.
This rule is subtle. Python lacks declarations and
allows name binding operations to occur anywhere within a code block.
The local variables of a code block can be determined
by scanning the entire text of the block for name binding operations.
と書いてあるので、仕様だろう
結局のところletのような構文は無いのだし、それがPythonなのだと思うしかない
俺は最近はletだのvarだのmyだのが無いことの不便さのほうを感じることが
多いな
437:デフォルトの名無しさん
08/12/06 00:19:56
64になって困るのだろうか?
438:デフォルトの名無しさん
08/12/06 00:30:47
pythonでswitch文書くにはどうしたらいいの?
439:デフォルトの名無しさん
08/12/06 00:32:02
switchなんてものは無いが、別にいらんだろ
パターンマッチもないよ
ifで頑張れ
440:436
08/12/06 01:38:31
すまん、ちょっと意図を勘違いしていた。
>>433は左辺も右辺も自由変数を参照したいわけだな?
ならPython3ではnonlocal文でいいはずだが、
それ以前のPythonでは、自由変数に代入することはできない。
global変数にはglobal文を使うことで代入することはできるが
global変数を使うこと自体稀だろう。
Schemeなどのlet文では左辺がローカルな束縛で右辺が自由変数という
ケースも良く出てくるが、それもPythonではできない。
できない理由は>>436の引用に説明されている通り。
いずれも変数宣言を持たないことによる帰結だな。
441:デフォルトの名無しさん
08/12/06 01:41:19
let「文」はおかしいな
まあいいか
442:デフォルトの名無しさん
08/12/06 01:44:19
py3kについてkwskかかれた日本語まだー?w
viewってなんだよviewって・・・
443:デフォルトの名無しさん
08/12/06 01:54:06
>>440
ありがとうございます!
エラーもはいてくれるし、ローカル変数を使うつもりが初期化を忘れて
勝手にネームバインディングされるよりはわかりやすくていいのかな。
444:デフォルトの名無しさん
08/12/06 01:56:51
>>443
本当はletなどで明示したほうがいい、と俺は思うんだけどね
まあ、letの3文字をタイプする手間と、それを省くことによる仕様面での制限の
トレードオフを考えたときに、Pythonは手間を省く方を選んだということだ
445:デフォルトの名無しさん
08/12/06 02:33:08
>>433
def maker(a):
# return lambda(c): a + c
def f(c, a=a):
a = a + c
return a
return f
とすればいいと思うよ。
446:デフォルトの名無しさん
08/12/06 02:45:50
a += c でもだめなんかなぁ。。。
447:デフォルトの名無しさん
08/12/06 04:45:34
>>438
caseが全て定数なら、辞書を使うと高速。
パターンマッチが必要なら
URLリンク(code.activestate.com) みたいなのを拡張して使うといい。
制御構造の為に標準構文以外の独自拡張を取るのが、
可読性を損ねるという考えもあるので、無難なのは if/elif... かな
448:デフォルトの名無しさん
08/12/06 08:40:20
>>442
きっと一年後ぐらいに出ます。
449:デフォルトの名無しさん
08/12/06 10:07:05
>>431
キーワードのデフォルトはpassですねわかります
450:デフォルトの名無しさん
08/12/06 11:16:12
debug=sys.stderr.write
...
debug("ほげ〜")
451:デフォルトの名無しさん
08/12/06 11:38:27
>>449
そうそう。対象ファイル内ではpass/return/break/continueを強要するの。だめ?
452:デフォルトの名無しさん
08/12/06 14:37:18
@hoge
ってどういう意味なの
@の使い方がわからない
453:デフォルトの名無しさん
08/12/06 14:43:17
きっと"python デコレーター"とかで検索す
454:デフォルトの名無しさん
08/12/06 15:12:22
>>451
素直に、インデントによるブロックを折畳表示してくれるエディタの支援を使おう。
455:デフォルトの名無しさん
08/12/06 15:45:10
wwwww wwwww
wwwww wwwww
wwwww ww wwwww
wwwww www wwwww
wwwww wwwww wwwww
wwwww wwwwwww wwwww
wwwww wwwwwwww wwwww
wwwww wwww wwww wwwww
wwwww wwww wwww wwwww
wwwwwwww wwwwwwww
wwwwww wwwwww
wwww wwww
ww ww
456:デフォルトの名無しさん
08/12/06 18:07:31
a=[1,2,3,4,5]
b=[5,4,3,2,1]
for c,d in a,b:
print c,d
これできないのって仕様?
457:デフォルトの名無しさん
08/12/06 18:21:29
ZIPを要求する!
for c,d in zip(a,b):
print c,d
458:デフォルトの名無しさん
08/12/06 18:22:46
>>457
存在忘れてたw
ありがとう。
459:デフォルトの名無しさん
08/12/06 18:43:16
BeautifulSoup/2to3 挑戦してみた。
1. 2to3 BeautifulSoup.py | patch BeautifulSoup.py
2. 3k に sgmllib がない。2.6から持ってくる。
3. sgmllib内 warnings.warnpy3k 辺りはいらないので削除。
4. 2to3 sgmllib.py | patch sgmllib.py
5. 3.0 で import BeautifulSoup が通る。
6. re.match, re.search 等に bytes オブジェクトが渡っている所を str() で wrap
数箇所修正。(実行してエラーが出た箇所を潰していく)
7. BeautifulSoup(text).prettify() がエラーなしに動く。
8. 文字列が全て <b'font' b'size'="b'-1'"> の様になっているのに気付く。
str(b"foo") が "b'foo'" という文字列を返す為。.decode()で文字列に変換する必要がある。
9. PageElement.toEncoding, NavigableString.__str__ が bytes を返すのを .decode(encoding) で str に。
※ 他にも bytes を返すメソッドがあるかも知れない。
※ 2.x 互換の方法が解らなかった為、ここは 3.0 のコードを変更した。
10. ここまでで .prettify() 通った。diff取るの忘れたけど手作業で変更したのは5,6箇所程。
※ 2.x では decode/encode して端末へ表示してたのが、3.0では不要になった。
.prettify()の返す文字の文字コードが異なる?修正が影響したのかどうかは追ってない。
460:デフォルトの名無しさん
08/12/06 19:46:13
ぱいおつ
461:
08/12/07 12:23:34
>>439
あざす
462:デフォルトの名無しさん
08/12/07 14:27:35
バランスの取れた括弧にマッチさせるときに
以下の正規表現だとre.compile()時にnothing to repeat.と怒られてしまいます。
何が不味いのでしょうか。
'(?P<REP>'
'\('
'([^()]+|(?P=REP))*'
'\)'
')'
(?P<>)の入れ子自体は問題ないようなのですが・・・
463:デフォルトの名無しさん
08/12/07 14:39:22
ちなみにテストコードです。
import re
r = re.compile('(?P<REP>\(([^()]+|(?P=REP))*\))')
s = 'abc((de(f))gh((ijk)lmn))opq'
print r.search(s).group()
464:デフォルトの名無しさん
08/12/07 16:33:06
emacsのoutlineマイナーモードでpythonのコードも折りたたみたい
465:デフォルトの名無しさん
08/12/07 19:18:49
HTML/XMLの操作にはBeautifulSoupとlxmlのどちらが主流派なんですか?
BeautifulSoupはpure pythonという以外に何かメリットデメリットあったら教えて下さい。
HTML/XMLの操作ってあんまりやったことないので常道ってのも分からないので判断しかねて・・・
466:デフォルトの名無しさん
08/12/07 20:19:23
>>462
そういう「再帰的な定義」を許していないんじゃないか?
そういう記述ができるものがあるのは知っているけど、
エラーメッセージから想像力を働かせるとPythonでは許していないような気がする。
467:デフォルトの名無しさん
08/12/07 20:20:00
>>462 (?P<>)の入れ子自体は問題ないようなのですが・・・
問題あるだろう。こうだろう
r = re.compile('(?P<REP>(\([^()]+|(?P=REP))*\))')
468:デフォルトの名無しさん
08/12/07 21:04:33
>>466
やっぱりそうなんですかね。
(?P<>)の入れ子はcompileは通るのですがどうも効いていないっぽいです。
>>467
ありがとうございます。
でもバランスしません(>_<)
469:デフォルトの名無しさん
08/12/07 21:16:56
(?P=name)って要するに名前付きのバックリファレンスだろ?
入れ子の記述を仮に許しても、方針として全然ダメじゃねえの?
要は「マッチしたもの」にマッチするんだから
一般的な入れ子のカッコを処理できるわけないじゃん
470:デフォルトの名無しさん
08/12/07 22:02:13
pythonで 誌
という文字をunquoteっしたいんですけども
どうすればいいですか?
471:デフォルトの名無しさん
08/12/07 22:10:22
>>469
期待通りに動く処理系もあるんですよ・・・
472:デフォルトの名無しさん
08/12/07 22:33:20
なら具体的なバージョンとかの情報出すべきかと・・・
473:デフォルトの名無しさん
08/12/07 22:45:55
文字参照を元の文字に戻すにはどうすればいいでしょうか
474:デフォルトの名無しさん
08/12/07 22:48:25
ver.1.9のことです(>_<)
475:デフォルトの名無しさん
08/12/08 02:13:53
正規表現万能論者はお断りします
476:デフォルトの名無しさん
08/12/08 02:15:45
本来的な正規表現ではないよな
バックリファレンスですら
そういう意味ではPythonのは既に足は踏み外してるけど
再帰を許すほどではないな
477:デフォルトの名無しさん
08/12/08 08:46:23
俺の質問に答えろや
478:デフォルトの名無しさん
08/12/08 11:40:41
>>471
リファレンスみたいな豪快な拡張にポータビリティを期待するほうがダメかと。
Pythonの正規表現の仕様から、これが処理できないのはおかしいとはっきり
導出できるなら、そのようにバグとして報告すればいい話。
>>470 >>473
import urllib
urllib.unquote
479:デフォルトの名無しさん
08/12/08 12:52:22
質問
cgiをpythonで作っています。
#!/usr/local/bin/python
import cgitb,time
print "Content-Type: text/html\n\n";
t = time.strftime('%H:%M:%S')
print '<p>time is'+ t +'</p>'
この状態なら動くのですが、print関数の文字列に日本語が含まれているとcgiが動かなくなります。
これは何故でしょうか・・・?
ちなみに保存文字コードはshift-jisです。
480:デフォルトの名無しさん
08/12/08 13:05:16
>>479
文字コードをUTF-8(BOM無)で保存すればいい
481:デフォルトの名無しさん
08/12/08 13:26:31
>>479
URLリンク(www.python.jp)
482:479
08/12/08 13:29:38
UTF-8で保存すると今度は全くcgiが動作しなくなります・・・OTL
483:デフォルトの名無しさん
08/12/08 13:31:30
windowsXPでpython 3.0なんですが
>>>douon("変態")
["変態", "編隊", "変体", "へんたい", "ヘンタイ", "hentai"]
みたいな関数を標準モジュールだけで書いていただけませんでしょうか
484:デフォルトの名無しさん
08/12/08 13:32:58
>>482
ん?sjisでも「全く動作しない」はずだが……
CGIなんだから、直接pythonインタプリタで実行してみろよ
たとえコメントの中だろうが、エンコーディングを指定せずに
非ASCII文字が書かれている時点で
Pythonインタプリタにはねられるから
485:デフォルトの名無しさん
08/12/08 13:36:39
>>483 無理。ていうか辞書次第。
486:デフォルトの名無しさん
08/12/08 13:37:17
>>483
migemoあたりの辞書を使うといいんじゃねえか
migemoで普通やるのの逆変換になるが
487:479
08/12/08 13:39:18
>>481
参考URL有難うございます。
# -*- coding: utf-8 -*-
import time
print "Content-Type: text/html\n\n";
t = time.strftime('%H:%M:%S')
print u'<p>時間は'+ t +'</p>'
のようにエンコードを指定してもインタプリタでは動くのですが、cgiファイルとしてサーバーにアップ後は動かなくなります。
パーミッション等は合ってます。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5094日前に更新/206 KB
担当:undef