1 :
デフォルトの名無しさん :
2008/04/29(火) 23:47:08
>1 乙
_
-「 ̄ |
| | | なんかバギしたら
>>1 乙でた
|| +| ありえん(笑)
.L ‐--‐'ヽ
|l リV _` ≡乙
|cl | ´ヮ ノ/
.l レ l |
/ | +|
10 :
デフォルトの名無しさん :2008/04/30(水) 22:44:25
自分の環境で利用できるモジュールの一覧を取得する方法ってありますか?
pkgutil.iter_modules
20行程度のコードでクラス作るやつってなんなの?変態?
継承してるんだとすればそんなの当たり前だろ
>>13 なんともいえない。20行程度なら全ソースを貼ってみ。
ポカーン....
切り返しになって無さ過ぎて、煽りとしても成立してないぞ。
何を見て
>>13 を書いたのか、君の目撃例を出してみれって話だろう。
君が何を見て言っているのかの提示を、どうやって君の話し相手が「やる」んだ?
自己解決しました。
若い人はちょっとしたコメントにも全身全霊で反応してくれるので楽しいですの〜
オッサンは下水に流れてフナの餌にでもなれ。
20行程度貼るのを、そこまで拒否せんでもねえ。
1関数500行以上、 っていうヘンテコルールが弊社に存在します
自己解決禁止
他者解決しました。
イケメンハッカーが解決しました。
解決禁止
自決しました。
墓穴しました
アナルを開発しました。
ほんとにpythonの勉強をしている人達の掲示板とか、有りますか?
>>31 このスレの住人がPython勉強してないみたいなこと言うな自己解決しました。
ここは雑談スレ 本スレはあっち
hello = ["Hello", "こんにちわ", "Здравствуйте", "Buongiorno", "Bonjour"] みたいなデータを hello['e'], hello['j'], hello['r'], hello['i'], hello['f'] みたいにアクセスするにはどうしたら良いでショッカー
近所の本屋に jython 本が入荷してあった。 ちゃんと import になってたぞ。残念な気分になった。
>>35 >ちゃんと import になってたぞ
じゃあ買うのよすわ
工エエェェ(´д`)ェェエエ工
imprtの方は希少価値がついたな
>>35 イケメンハッカーは神になりそこねたと思うよ.
>>34 について、興味がわいたので、
class hoge(list):
def __getitem__(self,x):
if x == 'e':
return self[0]
としても、リストのインデクス0番目が帰ってこない。
print x及びprint type(x)とすると、
入力した値と<type 'str'>と帰ってくるんだが、どういう現象?
なんで突然レス途切れるんだよ orz
>>41 self[0]を使うとhoge.__getitem__がもう一度呼ばれるので
return list.__getitem__(self, 0)じゃないと駄目
>>34 は普通に辞書を作った方がいいと思うが
非結合メソッドの扱いかただね、 勉強不足すぎるわ俺
>>34 hello = {'e': 'Hello', 'j': 'こんにちわ', 'r': 'Здравствуйте', 'i': 'Buongiorno', 'f': 'Bonjour'}
>>34 def dictize(word):
for k,v in zip(idx,word):
temp[k] = v
return temp
idx = ['e', 'j', 'r', 'i', 'f']
hello = ["hello", "こん", "ズドラストヴィーチェ", "buongiorno", "bonjur"]
hello = dictize(hello) # 識別子hello を 辞書化
hello # 素のhelloリスト (データ)
こんなかんじやね。じこかいけつしました
>>47 dictizeを用意しなくてもdict(zip(idx,hello))で辞書化できるよ
辞書化いけつしました
>>13 部品ぽいクラスだったら10行以内とかでも普通。
その辺に転がってるモジュールの中にいくらでも例がある。
要はどういうデータの束に名前を付けるかって言うだけの話なので、
小さいところに名前付けたらクラスも小さくなる
クラス=なんか大物
と思ってる人は、勉強した本が悪い
perl の pmsetup みたいな egg プロジェクトの雛形を作成するスクリプトってありませんか?
イスパニア語でおk
?el pmsetup del perl Como el huevo no Est? all? cualquier escritura que crea el formulario de un proyecto?
It was possible to solve it for myself.
我其解決自己的
>>54 It impossible for native English speaker to understand such a terrible English.
>>> x = 'global' >>> def f(): ... print x ... >>> f() global >>> def f2(): ... print x ... x = 'local' ... >>> f2() Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 2, in f2 UnboundLocalError: local variable 'x' referenced before assignment ってなるのは何故?
そういうもん。f2()のxは代入があるからローカル変数だと判断したんだろ。
>>56 Why didn't you use a verb in your sentense?
>>57 f2()内でglobalとして扱うなら、print x の前にglobal x とか入れるんじゃないかな。
MLのStackless Pythonの内容は酷い
長文ヌルーしてた…
関数内のローカル変数が 同名のグローバル変数を隠蔽しちゃうってやつだね JavaScriptも似たような挙動だった気がする 初めてのPythonにはみっちり書いてあったはずから 参照できる人は見てみるのもいいかも
まともな入門書であればたいてい書いてある
書いてある本ものすごく少なそうなんですが
まともな入門書が少ないってことだね。 ちなみに「初めてのPython」はマルチバイト文字列の扱いについてまったく触れてないので、 「まともな入門書」に入りません。
そこでJython本ですよ
>>67 このスレ的にはどうなの?>Jython本
読んだ人感想プリーズ
ネットで読めるのは宗教っぽい妄信的な書評ばっかりで正直キモいと思っているんだが(www
民Pyにつづいてそれもか
やんわりと褒めるぐらいなら一般的な対応だけど これはないわwwww
アニキ? アッーー!
>stackless python でも「RuntimeError: maximum recursion depth exceeded」が発生します。 この人は何がしたいんだwwwwwwwwwwwwww
スタックがない=再帰やり放題じゃね?フィボナッチ数列が美しくかけるんじゃね?
予約した imprtに期待age
Py_DEFAULT_RECURSION_LIMITが1000だから当たり前 sys.setrecursionlimitで変更も可能
うへえ、そういう調査もせずに「あふれた」って書いちゃうのか
2 つのプログラムの同一仕様検査の難しさ
Python2.3.5(2005-02-08リリース)の頃は エラーメッセージが違うのかなと思って実行してみたけど、 RuntimeError: maximum recursion depth exceeded と表示された。
rubyistはエラーメッセージ読まないのん?
処理系を信頼してないんだろ
RuntimeError: maximum recursion depth exceeded これを見た上で「あふれた」と言ったのか?
>>87 もしかしたら1000に達する前にMemoryError: stack overflowが出たのかもしれない。
んな小さとこで出るわけない
数字が一致していることからしてもRuntimeErrorのほうだろうな
「スタックが溢れた」と言っても差し支えないんじゃね?
Ruby では同じ文脈で stack overflow エラーが出るわけだから記事の話の流れからいっても自然だし
Python の sys.setrecursionlimit() の説明でもスタックという表現が使われている。
> setrecursionlimit( limit)
> Set the maximum depth of the Python interpreter stack to limit. This limit prevents
> infinite recursion from causing an overflow of the C stack and crashing Python.
個人的には
>>80 に同意。
limitを超えたんだから あふれた でいいと思う
どれぐらい末尾再帰ができるかどうかを調べているんだから setrecursionlimitで値を変更するべきだと思うけど
あくまで limit を越えたのはスタック容量じゃなくて再帰回数だから 溢れたとは言わないだろうな。
お前ら、こういう話題が好きだったのか?
処理系での末尾再帰最適化って、そんなに難しいのかな... なんかちょっと頭のいい人ならすぐできそうな気もするんだが... (まぁ、俺には難しいんだが...)
まともな処理系なら JIT っぽいことしてると思ってるんだけど (中間言語へのコンパイルかもしれないが)、 末尾再帰最適化を採用する事で どれだけ JIT コンパイルのコストに影響が出るんだろうか。
「この回数再帰したら止めてね」という設定値を越えたから止めただけなんだから、 溢れたとは言わないな。「limitに達した」じゃないかな。
>>97 言語仕様と下位層による。
Rubyのブロック引数みたいなへんな言語仕様があると面倒だし、
末尾呼び出し最適化を考慮したスタックフレームを持つ機械の機械語や
そのような仮想機械へのコンパイルなら楽。
もはや言葉遊びですね^^
細川wwww
105 :
103 :2008/05/04(日) 16:55:34
dbm = SDBM.open('db/id',0644) dbm[hash] = id dbm.close このへん、わけわからん orz
107 :
103 :2008/05/04(日) 18:46:34
>>106 >>> db=shelve.open("db/id", "c")
>>> db["spam"]=1024
>>> db.close()
>>>
>>> db=shelve.open("db/id")
>>> db["spam"]
1024
こんなかんじですね。どもです。 ほかにdbmは
anydbm, pickle, shelve とか三種類くらいありました。
http://www.python.jp/doc/2.3.5/lib/httplib-examples.html >>> import httplib, urllib
>>> params=urllib.urlencode({'id':1, 'imagedata':"spam"})
>>> headers={"Content-type": "application/x-www-form-urlencoded",
... "Accept": "text/plain"}
>>> conn=httplib.HTTPConnection("localhost")
>>> conn.request("POST", "/cgi-bin/upload_py.cgi", params, headers)
>>> res=conn.getresponse()
>>> res.status
500
ここを見ながら、client側の部分を書いてみたのですが
うまく行きません…どう書いたら良いでしょうか?
>>108 その upload_py.cgi の方に問題があるんじゃないの?
参考にしてるところがPython2.3.5用だから古くない?
>>109 #File.open("data/#{hash}.png","w").print(imagedata)
fname = "%s.png" % hash
file(fname, 'w').write(imgdata)
ここの所が間違ってたみたいでした。w のとこが r になってました。
>>> res.status
302
と、変更したら返されるcodeが 500 から 302 になりました。
200 じゃない…ということは間違ってる…よくわからんです orz
113 :
103 :2008/05/04(日) 21:16:12
db = shelve.open("tmp/id", "c") db[hash] = id db.close() >>> import shelve >>> db=shelve.open('tmp/id') >>> db["e09f6a7593f8ae3994ea57e1117f67ec"] '1' 上手くいきますた!
114 :
103 :2008/05/04(日) 21:18:52
data = <<EOF --#{boundary}\r content-disposition: form-data; name="id"\r \r #{id}\r --#{boundary}\r content-disposition: form-data; name="imagedata"\r \r #{imagedata}\r \r --#{boundary}--\r EOF あと、もう一つだけ バイナリデータをPOSTする場合はこの書式に沿って 組み立てないと駄目なのですか?
スレ違いっつーか板違いだ
お前は黙ってろ
内容的にWebProg板だな
118 :
デフォルトの名無しさん :2008/05/05(月) 01:02:08
水曜日に最後のアルファ
chinpo
pythonをやろうと思ってるのだけど、入門には「みんなのpython」と「pythonプログラミング入門」どっちがいいかな? プログラム自体は初めてじゃないです。
プログラム経験あるならネットのドキュメントだけで十分 本買うのが好きなら自分で手にとって選ぶのも好きになれ!
python plograming language和訳まだー
>>122 THANK YOU!!
基礎は書籍でしっかりやりたいから、自分で見てかうことにするよ
基礎からやりたいのならみんPyじゃね? もう一つの方は流しすぎ まあ自分で中身見て選ぶのが一番だけどな。
基礎だけ学びたいなら最近でたJythonの本でいいと思うよ
それはないわ(w
neet山
プログラミング経験者があえて書籍で入門するなら 初めてのPythonくらいの内容がないと無駄遣いに終わると思う
選択肢なんでほとんどないんだから、 立ち読みして比べりゃいいじゃん。
Jython本を買えば間違いは無い。正しくも無い。
プログラムしたことがあるのであればWebのチュートリアル読めばすむ話のような気がする そんなに複雑じゃあない 本家のチュートリアルが読めるのであればなおよい
だから、本を買いたいんだろ。 だったらJython本しか無い。
俺も最初は本よりチュートリアルの方が良いと思う。 まず使えるようになることに焦点が合ってるし、内容に間違いが少ないから一番確実。
テストサーバ動かして python の cgi 動かしたいんだけど、Leopard の apache2 に mod_python 入れた人いる? それとも素直に CGIHTTPServer.CGIHTTPRequestHandler つかってテストに使った方がいいかね。
>>135 MacPortsつかえばすぐ入るんじゃね?
Jython本買ってきました。 クソでした。 理由は言うまでもない。
言わないと工作としか思えないわ。
ぶっちゃけ作りが雑な気がするんだが>Jython本 図とか表とかほとんどないし。 文章ばっかり。 内容もあまりぱっとしないよねぇ...。
今出ている本って内容が古すぎたり中途半端だったりであまりおすすめできるものってないような。 何か作りながらチュートリアルかリファレンスを参照するのが効率的かもね。
Jython本はコードが見難いね、説明してるのがどれだかわかりにくい 編集がちょっと丁寧な仕事すればだいぶ違ったと思う 内容的には初心者な俺には勉強になってる でも中途半端だな、対象読者一体どこだよ、とは思った Python全然知らないときつくないか?Javaも結構知ってないときつくないか?
Jython本の執筆者のtwitter読むと解るけど、かなりの突貫執筆だったようだ。 あの若さでこれだけの仕事したんだから、まあ認めてやってもいいんじゃないか?
イケメンハッカー信者はもういいよ
本買う人にとっては執筆に至る経緯なんて関係ないしなぁ
まあ信者も認めるほどの出来だってことだよ。
宗教論はもういいよ。イケメンハッカーの話はyosoでやれ。
粗悪本乱発しすぎ
Jython本ほど最高の本は無いよ。 書いてあることがスラスラと頭の中に入ってきて、 まるでコードが踊ってるみたい。 びっくりするようなイノベーションも体験できて、 いいと思うんだけどなあ。 最新の本だから最新のことが載っていて安心だし。
さっき読んでたらすぐ眠たくなって寝てしまったが
151 :
150 :2008/05/06(火) 06:48:52
でも、起きてからすらすらと本の内容が浮かんできたな
今知ったんだが、彼って自分のことイケメンなんぞと言ってるんだ!
IKEMEN
流れが意味不
stackless pythonとpsycoは共存できないんだな。 残念だ。
156 :
135 :2008/05/06(火) 12:19:12
とりあえず mod_python ダウンロードしてきて
./configure
vi src/Makefile
LDFLAGS= 行の "-arch i386 -arch ppc" を "-arch x86_64" で置換。
make
file src/.lib/mod_python.so してみると、
src/.libs/mod_python.so: Mach-O 64-bit bundle x86_64
と表示されるので 64ビット版にはなっているようだ。
と、ここまではいい.
sudo /etc/apache2/httpd.conf で
LoadModule python_module libexec/apache2/mod_python.so
って入れてから
httpd -t
やるとシンタックスエラーでるのよね。。。。
って、これ単なる設定の問題か。
>>137 なんて良いタイミング!参考にしてみるよ
Webのチュートリアルは日本語の品質がいまいちな部分がない? 結局は英語にあたらないと意味が取れない事がよくある。 書籍のチュートリアルの方が日本語がいいし、読みたいところに すぐ飛べるのでいいと思う。 他言語経験者なら、これ読めばある程度できるようになるんじゃ ない?
他言語経験者なら普通に公式チュートリアルでいいだろ ねえなんで本買わせようとすんの?
本のほうが読みやすいから
Webの方がコピペできていい
本が欲しいと言っているから。
検索できる分デジタル版の方がいいけどね でもチュートリアルの日本語書籍版はチュートリアルの読み方の部分が秀逸なので 立ち読みだけでもしておくといいよ
>>157 > Webのチュートリアルは日本語の品質がいまいちな部分がない?
>
> 結局は英語にあたらないと意味が取れない事がよくある。
ここなり翻訳者宛のメールなりで問題点を具体的に報告すれば改善されると思われ。
いま >163 がとてもいいことを言った。
本を買って欲しいから。
166 :
157 :2008/05/06(火) 19:48:43
>163がとてもいいこと言ったと思います。 翻訳者あてのメールは敷居が高くても、ここになら書けるなぁと思った。 (でも私は書籍版買っちゃったから今後はWeb版読みに行く事は中々 ないはず)
>>158 俺は他言語経験者で、公式チュートリアルで入門したけど本も買って勉強したよ。
Mark Lutz の Programming Python の第1版の原著を買った(確か当時は和書が1つもなかった)。
理由は「書籍から入手できる情報」≠「オンラインで入手できる情報」だから。
あと、1冊まるまる最初から最後まできちんと勉強することで「やり終えた!」という充実感があった。
これは結構重要なポイントのような気がする。
絶対本を買うべきだとは思わない。買いたい人は買えばいいと思われ。
ちなみに上記の本には誤植が多かったので読み進めるのと並行して全部メモしておいた。
読み終えたあとにまとめて Mark Lutz に報告したらオライリーの担当者からお礼のメールが来て
オライリーの本から好きなのを1冊プレゼントすると言われた。そんなの初めての経験だったから
意味が分からなくて「お金払わなくていいの?」とか聞いちゃったりして(無論無料で送ってくれた)。
これはいい話
threadって計算速度の向上に効果ある? a = b1 + b2の計算を(a,b1,b2はarray) b1とb2をthreadで計算して, それぞれ計算終了後に足すというプログラムを作ったんだけど, 普通にb1とb2をメインスレッドで順番に求めて足した方が早かった... ちなみにb1とb2の計算はダミーのforループ10000回です.
>>169 ダミーループのような、単純処理を連続的に行う場合は、threadのメリットは少ないと思われ。
有り難味があるケースは、
・入力待ちの間に、他の処理をさせておきたい
・ネットワークを表現する際に、各処理を独立のモジュールみたいに動かしたい
など。
>>167 第3版が手元にあるけど1552ページある。このサイズをまるまる勉強したとし
たら、尊敬します。すげー。
172 :
デフォルトの名無しさん :2008/05/06(火) 22:39:53
>>170 なる。やっぱりそんな気はしてた。。。
サンクス
>>171 そんなにあったっけと思って書誌情報を確認したら第1版は902ページだった。
>>169 マルチコアの場合は、計算スレッドを複数に分けてやると速くなったりする
あと計算規模が小さいとスレッドの生成・破棄のコストのせいで
高速化の効果が見えないよ
>>175 そんな、人類の足引っ張ることしかできない悲しい奴みたいな言い方しないで
前向きに行きましょうよ。
「きさま、マック信者だな?」
「きみはゆくえふめいになっていたマックじゃないか」
>>169 JythonやIronPythonだと速くなるかも知れない。
CPythonだと複数スレッドを同時に動かせないんで速くならない
Python絡みで信頼のおける日本人って 柴田さんしか居ない状況? 他の人ってあっちの人と話したことないよね
>>180 んなこたあない
もっと偉い人はいる
多くはないけど
>>180 あっちの人と話したことがある=Python絡みで信頼のおける日本人
と言う事ならmatz
多くの日本人Pythonistaは引きこもり
柴田さんは信頼できるの?
個人攻撃が始まった(www
自分以上の人間を言いがかりで叩くって 気持ちいいんだもん。
柴田淳はじまったな。
>>182 ブレース採用の話しかしてないじゃんかw
そういう意味じゃなくて、
開発者が誰で誰がどれを担当していて
今どのモジュールが開発中もしくは放棄中とか
そういった情報を知ってる日本人のことだよ。
186が184をカス認定している件。
>>188 ある程度ならsvnのコミットのログとか
ソースコードのコメント読めば分かるんじゃないか
pygame.orgの英文をなんとかしてほしいんだよね 英文を読んでまでのヤル気が必須になってるから 興味もった素人達にとっては敷居が高すぎる。 ただでさえわからないプログラム解説を、わからない英語で解説されるわけだから。 誰か、日本語翻訳サイトつくってよ 翻訳だけの協力でもいいよ、 俺がサーバー借りてサイト作ってもかまわない サイト作りは出来るから。 なんなら、このスレのみんなでpygame公式サイトの日本語解説版作っていかないかな?
まずはお前が率先して道を示せ。 話はそれからだ。
ほとんどSDLのラッパーなんだからSDLをさらっと習得しちゃえば なんとなくわかるっしょ。
>179 >CPythonだと複数スレッドを同時に動かせないんで速くならない そうなの?俺の持っている本では、 執筆時点(2006?)でフォークはWindowsのPythonでサポートされていない けど、スレッドはすべてのプラットフォームのPythonでサポートしている・・・ みたいな事かいてあるよ。なのでサポートしていると思うんだけど、違うの?
どこのクソ本だよそれ。
>>194 C記述の拡張コードがマルチスレッドを考慮していないので
Python上ではマルチスレッドでも実質グリーンスレッド状態になる。
ちゃんとしたマルチスレッドな動作を期待するならJythonやIronPythonになるかな。
文脈でわかるのかもしれないけど「スレッド」といってもいろいろ観点があるから。
>>195 まちがっちゃいないけど説明不足でミスリードしちゃいそうだね。
>>194 俺の理解では、Python のスレッドは交互に動いている。つまり、ある時点において1つのスレッドしか動かない。
だから、同時に(並列で)動くことを期待しているマルチスレッドプログラムは速くはならない。
>>170 さんの言うように、あるスレッドが入力待ちをしていて、別のスレッドがGUIを司る、というような
マルチスレッドプログラムならば期待通りに、一見並列に動く。
こういう実装になっているのは、種々のモジュールにスレッドセーフであることを要求するのが困難だから。
間違ってたらゴメス
194です。 なるほど。私が本のスレッドの説明の最初のとこだけしか読んで なかったので、勘違いしてました。 もうちょっと読むと>197がいうとおりのような事も書いてました。 「いつでも1つだけのスレッドしか動いていない」って感じで。 現状(2006年?)ではスレッドを複数のCPUに分配できない、み たいなことも書かれてた。 という事は計算が速くなるわけないですね。>170みたいな用途に 限る、ということか。
>>183 自分一人の例を全員の例のように敷衍するひとのひとりですね
>>191 > 英文を読んでまでのヤル気が必須になってるから
> 興味もった素人達にとっては敷居が高すぎる。
敷居が高過ぎると思ってしまうのは、その人自身の勝手な固定観念なんだけどな
あと敷居が高過ぎると思って、よりつかない人は、そこまでのモチベーションしかないんだと思うよ
人に聞いているようでは、マジで駄目なんだよ
> 俺がサーバー借りてサイト作ってもかまわない
> サイト作りは出来るから。
> なんなら、このスレのみんなでpygame公式サイトの日本語解説版作っていかないかな?
個人的、希望だが、英文のpygameを学習する際に頻出する英単語帳をつくったりとか、
英文を読み解くためのテクとかを、補助ツールを扱うwikiを作ってくれ
頻出する英単語を500語に厳選して、暗記すれば、かなり読み解けると思うよ
調べるためにググる際も英文の方のほうがひっかかるし、内容が高いことが多い
Wikipediaも英語版のほうが内容が豊富だし、すごくマイナー単語も載っているし
英文には、絶対慣れたほうがいいよ
あとわざわざ翻訳すると逆に読みづらくなるし、理解も難しくなる
これは、既出?
http://www.unixuser.org/~euske/doc/pygame/ あと下の本をどういう読み方でもいいから、読んで感想を聞かせてほしいところだね
Amazon.com: Beginning Game Development with Python and Pygame: From Novice to Professional (Beginning from Novice to Professional): Will McGugan: Books
ttp://www.amazon.com/Beginning-Game-Development-Python-Pygame/dp/1590598725/ とりあえず、wikiをつくって、2chに晒してみたら?
協力してくれる人もいるかもしれないよ
マルチcore対応のスレッドが使えるスクリプト言語を実装するのは難しいの? Rubyも結局1つでしか動かないらしいし。
pygame翻訳しろの話は、くだすれPythonスレとマルチになってたんだな。
pygameスレにも貼ってあった
pygameなんてなんか人前で言いづらいな。
こういうのって勝手に翻訳して公開していいんだっけ? まぁ事後承諾だろうと拒絶されるこたまずないだろうからどーでもいいんだろうけど ゲーム用にしか聞こえないよなw
>>202 言語自体は各スレッドにインタプリタを1つずつ用意することで簡単に並列化できると思われ。
問題は膨大な量のライブラリモジュール、特にC等で書かれたライブラリのバインディングだ。
スレッドセーフでないライブラリは統合不可ということになる。つまり言語として制約が大きい。
大域変数でメモリ管理ってのは割とありがちだけど、これはスレッドセーフではないのでNG。
こういうものを除外していくとどんどん言語としての有用性が下がっていく。
代替品の再実装なんてやってられん。PythonにしてもRubyにしてもそんなところだと思われ。
pygameがLGPLだからドキュメントも同じ扱いになるんじゃないか? ちゃんと調べてはいないけど
209 :
207 :2008/05/07(水) 20:41:33
あんま関係ないけど、OpenMPで並列化されたライブラリを拡張モジュールとしてPythonに組み込んだことがある。 これだと並列化がモジュール内で閉じてるから何も問題ない。 俺はOpenMPで並列化された線形解法ライブラリのラッパを書いてPythonに組み込んだ。フツーに使えた。 ただし、Intel C コンパイラの場合はPython一式を -openmp オプション付きでコンパイルする必要があった。 あと、PythonでMPIプログラムを書いてマルチコア環境で実行するというアプローチもあるね。 これだと真に並列に動作するはず(マルチスレッドプログラミングと同じ要領というわけにはいかないけど)。 Python用のMPI実装にはいくつかあった希ガス。
>>207 勉強になった。
スレッドセーフなモジュールを分類してかき集めるってプロジェクトがおこっても
良さそうとか思ったけど見つけられなかった。いろいろと難しいことがあるのかな。
>210 昔、自サイトでつかってたけど、まあ中の上ぐらいかしら。 設計はそれなりに綺麗で、たとえばpybloxsomとかから エンジンだけ利用してレンダリング、とか、pyblosxomの 間で相互リンク、とかできた気がする。 ただ、見た目のきれいさとかはないけどね(デフォルトの設定では)
先に言っておく。この話題で MoinMoinじゃなくてTracの方がいい なんて思ってる人は、何かがずれていると自覚したほうがいい。
MoinMoinで気に入ってるのは Pythonのソースを表示すると 色分けで表示するってやつかな。 あと微妙に軽い。 欠点として‥登録ユーザじゃないと ページ変更時刻がUTCで記録されてしまう。 これが地味に嫌だ
>215 今使ってないからなんとも言えないけど、 Config.tz_offset ってのを書換えれば良さそうですが... (デフォルトのタイムゾーン)
もいんもいん
>>212 調べたことないけど、スレッドセーフなモジュール(特にC等で書かれた拡張モジュール)は
ほとんど無いんじゃないかなあ。
例えばCでマルチスレッドのプログラム書いてみると分かるんだけど「このコードはスレッドセーフです」って
言い切るのって結構大変。呼び出しているライブラリ関数がスレッドセーフかどうか逐一確かめて回らないと
いけないから。逐次プログラムの一部分だけをマルチスレッド化できるOpenMPがいかに便利かを実感する。
その点、Java は最初からマルチスレッド対応だから楽チン。
マルチスレッドで真に並列動作するPythonを実現するための一番の近道はJythonだろうね。
そのレベルの話であれば、Javaがマルチスレッド対応だから楽ちんだなんてとてもいえないと思うけど。 同期とかの方法と、VMのメモリモデルが規定されているだけでしょ。 結局、使うAPIとかライブラリがMT-Safeかどうか調べなきゃいけない。標準のAPIについては大体書いてあるけど。
>>216 今すぐは無理だけど、暇があったら手伝いたい。
勝手に編集してもいいの?
>>216 >>221 おまいらがんがれ。
wikiで自分が翻訳したページを他人に修正されると、なんか一瞬犯されたような気分
になったりするけどそんなケツの穴の小さいことは気にしないでがんがん翻訳してくれ。
正規表現検索で "from A import B, C, ..." という文字列から A, B, C, ... の部分を抜き出したいんだけど、 正規表現のグループマッチングだけでは対処できない? re.findall("from\s+(識別子)\s+import\s+(, (識別子))*", source) # 識別子=[\w][\w\d]* ってやって出てきたマッチオブジェクトは "A" "B" ",C" "C" っていうふうに、カンマ込みででてきてしまう(当たり前だけど) "A" "B" "C" だけ抜き出したい場合はやっぱりその他の文字列処理しないとだめ?
非グループ化の(?:...)が使えないかな
re.findall('[\w*]+', src) して from と import を filter
>>255 おお、こんなべんりなものが!
import re
source = """
from A import BB
from A import CC,DD
"""
print re.findall("\s*from\s+([\w\d]+)\s+import\s+(?:,?\s*([\w\d]+))+", source)
とやってみた。これだと "from 3 import , 4, 5" にもマッチしちゃうけど、
そもそもソースのコンパイルが通る事が前提だから、この簡略化した
判別方法でもOKだという事に気づきました。
が、
上記コードを実行すると
[('A', 'DD')]
という結果になります。期待していたのは
A, BB, A, CC, DD
なんですがグループの繰り返しだけでは取得できないのでしょうか
正規表現である必要ってあるの? こういうなの↓の方が簡単でよくない? s = "from foo import a, b , c" f = s.split() assert f[0] == "from" and f[2] == "import" buf = [] for name in f[3:]: if name == ",": continue if name[-1] == ",": name = name[:-1].strip() buf.append(name) print buf
>>228 \w は数字ともマッチするわけだが。
一回、正規表現について勉強しなおしたほうがいいんじゃね?
urllib2
print re.findall('(w)+', 'ABCD') 結果: ['D'] グループの繰り返しだと、最後だけしか取り出さないみたいだね。
(\w)+は後続文字が\wじゃない時にマッチしているみたいだけど >>> re.findall(r'\w', 'ab^cd_ef.gh ij$hi') ['a', 'b', 'c', 'd', '_', 'e', 'f', 'g', 'h', 'i', 'j', 'h', 'i'] >>> re.findall(r'(\w)+', 'ab^cd_ef.gh ij$hi') ['b', 'f', 'h', 'j', 'i'] >>> re.findall(r'\w\b', 'ab^cd_ef.gh ij$hi') ['b', 'f', 'h', 'j', 'i']
【平均年収】岩手県の就職【365万円】 [就職] 【岩手県南】一関第一・水沢・花巻北・黒沢尻北高校 [お受験]
何の誤爆かと思ったらおすすめ2ちゃんねるか
同郷がいるな!? 岩手のコンビニのバイトは時給620円がデファクトスタンダードだぜ そして最低賃金が全国最低で自殺率全国2位という素晴らしい県 スレ汚しスマソ
>>236 いや、君ひとりかもよ?w
俺もここと恐らく俺の他には誰も見ていないであろうスレ(語学板の某マイナー言語のスレ)を
交互に訪れていたらそのスレがおすすめ2ちゃんねるに出たことあるし。
日本では岩手県が一人当たりのPython消費量が多いらしい
240 :
デフォルトの名無しさん :2008/05/09(金) 22:58:35
水虫が感染した
241 :
デフォルトの名無しさん :2008/05/09(金) 23:03:51
死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇 死ね糞天皇
242 :
デフォルトの名無しさん :2008/05/10(土) 02:37:18
インタプリタ中で定義した関数を、後から (バイトコードではなく)テキストで定義 を参照する簡単な方法ってある?それとも 難しい? >>> def f(x): return x >>> deffn(f) f(x): return x のような感じで
>>242 ファイルにあるやつなら insepct.getsource で取れる
>>169 Parallel Python というパッケージがあるのを知ったので参考までに紹介しとく。
http://www.parallelpython.com/ スレッドじゃなく複数プロセスで並列実行する仕組みらしい。
Python のみで実装されていて非常にシンプルなパッケージ構成になっている。
マルチコア環境の場合はスレッドモジュール風に使える。
クラスタ環境では各ノードで計算サーバ(ppserver.py)をしておく仕組みになっている。
応用プログラムはどちらの環境でも同じにできるっぽい。
手元の共有メモリマシンで付属サンプル(sum_primes.py)を実行したら下のようになった。
素数の和を計算するプログラムなのでプロセス間通信はほとんどないけど、
並列化のオーバヘッドはあるわけで、なかなか良好な結果だと思う。
並列度,実行時間(秒),速度向上率
1, 17.54, 1.000
2, 8.781, 1.998
4, 4.424, 3.965
8, 2.261, 7.759
245 :
169 :2008/05/10(土) 13:53:14
>>244 おおお,サンクス!
早速いじってみまふ。
どうでもいいから ちゃっちゃとpygameの資料和訳 作業に入れよ。 非国民か?
真の国際人は地域文化を尊重するものだ と混ぜっかえしてみる
地域文化を尊重するから 現地の言葉を尊重するのだよと
250 :
247 :2008/05/10(土) 14:48:29
早く日本語化プロジェクトに参加しろよ。 お前らにpygameの未来がかかっている。
ユーザからの入力を正規表現で処理したいと思ってます。 入力された文字列に正規表現が含まれてる場合にそれをエスケープしたいんだけど、どうやったらいいのかわかりません。 誰か助けてプリーズ・・・
英語も読めないようなやつがpygameを使えるようになるとは考えにくい。
たぶんリファレンスの和訳よりも、各オブジェクトを絡ませた逆引きサンプルコードみたいのが需要あると思うよ。 扱い方が理解できりゃオブジェクト名で大体想像できるし
リファレンスぐらいなら簡単に訳せそうに見えるね 試しにpygame.cdromモジュール使ってみたけど対話型シェルから 簡単にトレイの開閉とか再生できておもすれー かなりよく抽象化されてて使いやすそう
> リファレンスぐらいなら簡単に訳せそうに見えるね 簡単に訳せる文章、英文でも理解できる文章は、労力をかけて訳してもしょうがないっしょ 邦訳することが目的になっている感じだし、目的が変化している 核となるもの、肝となるもの、大事な概念だけど理解しにくいものを中心に Pygameに興味のある者が理解しやすい仕組み・しかけをつくるほうが大事 とりあえず、目的・問題の明確化をさせたほうがいいんじゃないの?
258 :
252 :2008/05/10(土) 16:46:20
>>256 できましたありがとー!
(_アンダースコアもエスケープされちゃうのがナゾですが・・・)
このスレッドの目的は pygame文書の和訳という使命を帯びた事が証明されたわけだ
よし、wxpythonの和訳が終わったらpygameも和訳するぜ まだ、何もやってないけど
Pygameのドキュメントだけ見てもよくわからないけど SDLの方のドキュメントを読むと理解できる事も多いよね
お前らは早くpygameの和訳作業にとりかかれ
英語も読めない低脳は黙ってろ
ここの基準はPythonが書けるかどうかで決まるんだぜ(藁)
Pyhton
pyてょn
oh tyPo
○〜〜 ○〜〜 ○〜〜 ○〜〜 ○〜〜 ○〜〜 ○〜〜 ○〜〜 ○〜〜
sperm, sperm, sperm and sperm.
まず pygame を何と訳したらいいのかわかりません
pygame でいいじゃん
pychinko
pygameの和訳を済ませろボケナスども
乳遊
自己解決の次は翻訳か
事故解決しました
つまんね
280 :
244 :2008/05/10(土) 23:51:28
引続き Parallel Python をいじってみたんだけども、このシステムはマスタワーカモデルを前提にしているみたいだ。 つまり、マスタが仕事の集合を持っていて、有限個のワーカに1つずつ仕事を割り当てる。仕事を終えたワーカは マスタから新しい仕事をもらって処理する。これを仕事の集合が空になるまで続ける。 ワーカ間で通信をする機能は提供されていないし、特定のワーカ(たとえば特定のリモートホスト上のppserver.py)に 特定の仕事を割り当てることもできないっぽい。Parallel Python が有効かどうかは実現したい並列アルゴリズムが マスタワーカモデルに適合するかどうかに依る希ガス。
おっpydev
pygameの和訳が進んでいるか、 確認のために毎日一回以上は pygame関連の話題を出すようにしようぜ 反論がある奴は似非python使いとして認定してやろうぜ
>>280 具体的には、どういう用途に使えそうなんですか?
284 :
244 :2008/05/11(日) 00:59:44
>>283 最も適しているのは並列処理の分野で embarrassingly parallel と呼ばれるカテゴリに属する種々の計算、
すなわち入力データを複数の独立した部分に分割できて、各部分について他から独立して計算が行なえる
タイプの用途に適している。
http://en.wikipedia.org/wiki/Embarrassingly_parallel Wikipediaに例があがっている。フラクタル計算とか3DCGのレンダリング(例:レイトレーシング)とか力任せの
暗号解読とか色々ある。
並列処理って概して複雑で長時間計算し続ける必要のある応用が多い。そういう応用には C とか Fortran を
使うことがほとんどなんだけど、きちんと動くようになるまでの開発時間が長くてデバッグがたいへんだったりする。
そういう並列プログラムの試作(プロトタイピング)に Python が使えたらいいなーと個人的には思っている。
>>274 おまえにいいこと教えてあげよう。
市場の中の肉屋さんいって、
「ホースください」頼んでみ。
解体処理した豚の膣の部分がもらえる。
ほんとは金かけて廃棄しないといけない部分だから無料でもらえる。
食い物にはならないから。
この豚の膣が極上。
まあ考えたら膣だからな。
人間のじゃないだけで本物の膣だから、気持ちよくて当たり前。
287 :
252 :2008/05/11(日) 09:30:17
re.escapeってなんでもかんでもエスケープしちゃうのか・・・ \山\田\太\郎て
288 :
デフォルトの名無しさん :2008/05/11(日) 09:43:58
>>285 PythonでCPU8個使って並列計算するよりCで書いたプログラムの方が速そうだったり。。。
>>286 ついでに言うと豚の内臓と人間の内臓はかなり近いらしいね
豚の心臓を人間に移植した話もあるからな
>>292 羊の膣も極上という話だけどどうなのだろうね?
膣なんてどうでもいいから チャッチャとpygame資料の和訳作業に務めろ糞野郎共
>>285 自分も並列化するときのプロトタイプとしてPythonの並列環境を使ってみたいと
考えているんだけれど、今のところプロトタイプとしての感触はどう?
データ分割の楽な問題ってCとかFORTRANでもOpenMPを注意深く使うだけでも早くなる事が
多いし、MPIでも慣れれば苦労せずに書けるけれど、そうでない、スレーブ間での通信が必要
とかうまく分割できないとかそういう問題はMPIでやろうとするとデバッグが(;゚д゚)
なことになりがちで、そういう用途にPythonのプロトタイプが役に立つなら素晴らしいと思う
実はC並列版とそれほど速度とメモリ使用量が変わらないとかなら最高
C並列版より速ければ神
Parallel Python だけど pp.Server.__scheduler() を適当に書き直せばワーカと仕事の対応(割り当て)を
ユーザ側で決められそうな希ガス。問題はワーカ間のプロセス間通信。これが一番面倒なところなんで
自前で実装となると Parallel Python を使ううまみがほとんどない・・・。
やっぱ MPI の Python バインディングあたりが一番現実的な解かなー。でもなんか気が重いんだなー。
もっと Python らしく lightweight なソリューションがないかなー。
>>288 Python の並列プログラムより C の逐次プログラムの方が速そうってことだよね。
そういうことは十分(多分頻繁に)あると思われ。
>>295 残念ながらまだ並列プログラムのプロトタイプ用途には使えてなくて感触を得るところまでいってない。
理由は単純で、Python で手軽に並列プログラミングを実現できる道具を見つけられていないから。
>>209 に書いたようにいろいろ試してるんだけどなかなか・・・。
ただ、個人的には Python を並列化のプロトタイピングに使うのは大いに有望だと思っている。
プロトタイピングの場合、欲しいのは並列度やデータ量を上げたときの実行時間の変化であって、
実行速度が多少遅くて実験に時間がかかるとしても知りたいことは分かるはずだから。
プロセス間通信にソケットを使うとすると、データ量が大きくなれば Python でも C 等と同じぐらいの
速度が出る(ハズ)。演算量が多い部分に numpy 等の C/Fortran で書かれた数値カーネルを使うことに
すれば、プロトタイピング用途には十分な速度とメモリ使用量が得られるのではと思う。
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」で検索したら英語で色々皆同じ問題にあってるみたいだけど、解決方法を探せなくて(読めなくて)困ってます・・・教えて!エロイ人!
config.py(setup.py?)のBUILD_GLCANVASを0にしてみたら?
>>297 どのディストリ使ってるのか不明なんだけど、
バイナリパッケージでは存在してないの?
単なる興味なのですが、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')がほぼ等価ですが、これはあくまでエンコーディングなので、 直接バイト列を得てるわけじゃないのかな、と思った次第です。
内部表現はUCS2かUCS4だったと思うのだが 中身に触る方法はないほうがいいんじゃないかな
ord 関数じゃダメなんすか
>>300 文字列はエンコーディングを決めなければバイト列では表現できないよ。
> 'hello'と等価なバイト列は'\x68\x65\x6c\x6c\x6f'です。
ここで実は300さんはエンコーディングとして ASCII を仮定している(ASCII をサブセットとして含む
別のエンコーディングかも知れない)。例えば、もし EBCDIC を仮定していたら別のバイト列になる。
> pythonで両者の直接変換はできるのでしょうか?
エンコーディングが分かっていればご存知の通り unicode() と .encode() で可能。
print repr([u'hello'])
305 :
297 :2008/05/13(火) 01:30:38
>>297 です。
>>298-299 大変申し訳ない。
上記URLの、下記の文をすっとばしてました・・・。
cd $WXDIR (ソースツリーに移動する)
mkdir bld (ビルドディレクトリ bld を作成)
cd bld (ビルドディレクトリに移動)
../configure (configure を実行)
一番最初からやり直したらエラーを吐かなくなったよ。
でも、色々可能性を考えて下さってありがとうございました。
お騒がせしてしまい申し訳ございませんでした。
>301 ないほうがいいってことはないでしょ 初心者が文字列操作で使うべき方法として 提示されるかどうかはともかく
>>> 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 :2008/05/13(火) 12:46:51
>>301-304 >>307-308 皆様ご助言どうもありがとうございました。
>>302 >>308 さんご提示の、コードポイント取得方法が私の期待に非常に近いものでした。
ですがそもそも、
>>303 さんご指摘の通り、私には「バイト列はエンコーディングによって
はじめて定義されるもの」という認識が甘かったように思います。
私が例示したu'hello'のバイト列は、既に何かのエンコーディングが施されたもののはずだから、
そのバイト列と.encode(...)は全く等価ですね。
御蔭様で理解が深まりました。ご教示どうもありがとうございました。
最近の初心者は文体が丁寧だな
いいことじゃないか。
ipython1.0 は並列に対応しているみたいだね 使ってみたいがインストールできないorz
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() みたいな。
無理。 他のOSネイティブなスレッドでも、そういう手段は用意されていないか 用意されていても推奨されていない。
基本的にスレッドはスレッド自身で終了させた方がいいよ
316 :
デフォルトの名無しさん :2008/05/14(水) 00:04:03
とりあえず clss GetBBC はよしたほうがいいな
318 :
デフォルトの名無しさん :2008/05/14(水) 17:22:08
日本語でおk
ウェブアプリを作りたいなと思い、教育用らしいPythonを始めようと思うのですが XAMPPみたいにアーカイブを展開するだけで ApacheとPythonのApacheモジュールが使えるようになるWindows向けソフトとかありますか? お手軽な感じで始めたいです
cd htdocs C:\Python25\python.exe -m CGIHTTPServer Pythonだけでできるよ。apacheなんてイラネー
320です どうもありがとうございます ブラウザで表示確認できるんでしょうか よくわからないので調べてきます ほんと無知ですみません
CGIHTTPServer にあったディレクトリのバグは直ったんだろうか?
Python の C コード書くときのコーディング規約って、みんなちゃんと守ってる? どこまで守ってる? static PyObject * Hoge(........) { •関数の戻り値型の直後に改行を入れる •関数ブロックの始まりの括弧の直前で改行する if (a + b + c) { } •関数以外のブロックは、始まりの括弧を行末に置く •括弧の中に余分な空白を入れない •二項演算子の両側には空白を置く X return ( expr ); O return expr; •冗長な括弧は使わない
どう見てもPEPだろ
WindowsならCtrl+ZのあとにEnter でも最初の表示どおりhelp→help()→quit→quit()と入力していってほしいかも。
>>321 >>327 >>331 ありがとうございます
Windows で python -m CGIHTTPServer を実行しています
Ctrl + C
Ctrl + D
Ctrl + Z
どれもダメだったのでタスクマネージャーから殺したら終了出来ました
あとでわかったのですが、
Ctrl + C
を押したあとにブラウザの更新ボタンで再度リクエスト投げると
Keyboard Interrupt
が出て終了するようです
Windows だから select で監視出来ていないということでしょうか?
単純にaccept()がブロックしてるだけでしょ try節で囲むかtelnet localhost 80とかやってから落とせばいい
>>333 普通のCGIがやりたいの?
ApacheでCGIがやりたいの?
320を読む限りではGoogle App Engineとかそういうのが近いのかな?
GAEはお勧めしないけど。
>>335 320ですが320は322しか書き込みしていません・・・
私とはしたいことが異なるのではないかと思います
あと、質問してもよろしいでしょうか
じつはまだサーバ上でファイルを実行できていないんですが、そのことについて・・・
CGIHTTPServer.pyを起動させて
htdocsフォルダを作って
まだpythonのスクリプトが書けないので既存のスクリプトファイル
(
http://python.rdy.jp/wiki.cgi?page=PythonAvailableServersのcheck.cgiとexplore.cgi )を
http://localhost:8000/htdocs/ に入れて表示させてみたのですが
ieだとそのまま中身のテキストが表示され
firefoxだとcgiファイルのダウンロードが始まってしまいます
拡張子をpyに変えてみたらie、firefoxともそのまま中身のテキストが表示されます
cgi-binフォルダを作って
同様に既存のスクリプトファイルを
http://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ともに真っ白な画面が表示されます
うまく実行させるにはどうすればいいのでしょうか・・・
それsh辺りのスクリプトだからwinじゃ動かないよ .pyに変えたらコマンドプロンプトにエラーメッセージが表示されてるからよく嫁 とにかくエラーメッセージはきちんと嫁
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は必要かも
ああほんとだ。見てなかった >sh辺りのスクリプト explore.cgiはPythonで書かれてるから動くんじゃないかな
>>336 htdocs フォルダが My Documents みたいにスペースの入ったフォルダの配下にない?
>>337-340 336です
親切にどうもありがとうございますm(_ _)m
ただ話の内容が難しくて理解が追いついていません・・・
windows上で使っています
いつかはレンタルサーバを借りて動かしたいと思っているのですが
windowsとlinuxでスクリプトの書き方(?)が異なるのでしょうか・・・
コマンドプロンプトにメッセージが表示されるんですね
読んでみます
テスト用に選んだスクリプトも選択ミスだったんですね
パスにスペースは入っていません
ピリオドと数字は入っています
エラーメッセージをよく読みます
実際に試してきた
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 が指摘してくれている通り
>>342 336です
env.pyはうまく動きました!と思います
45行ほどの文字列が表示されました
explore.pyもうまく表示されました
表データが表示されました
cgi-binに拡張子をpyにして入れるんですね
初歩的なことに付き合っていただき
みなさん
ありがとうございますm(_ _)m
めずらしくpythonのお勉強なんかやってるやつがいるな
まだpythonにたどり着いてない気が…
c:\ に置かせようとするセンスが理解出来ん
センスっつーより悪意を感じる
拡張子がcgiでも関連付けでpythonを起動してやるようにすれば動くかもしれない。 実行可能ならbatなんかでもCGIとして動作するみたいだから。
こんにちは。いつも参考にさせていただいております。 さて、早速なのですがPythonでテキストファイルへの書き込みは出来るのですが追加の書き込みの方法がわかりません。 一度内容を読み込んで結合してから書き込んでもよいのですがあまりスマートとは思えませんでしたのでここに投稿した次第です。 方法をご教授いただければ幸いです。
open(path, 'a')
レスありがとうございます。解決いたしました。
下記を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" 解決策など示していただければ幸いです。
returnが関数外じゃない?
return→sys.exit()に
いや、だから
>>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()
apacheならerror_log(error.log)に出なかったっけ
pychecker, pylintあたりで文法チェックしといた方がいいかもね
http://codepad.org/AkQK38ei 関数の引数って参照渡しなの?
Traclight/plugins/themaengine/api.py
あとTracってAPacheがないと動かせないですか?
PythonをUSBメモリに入れて持ち運びたい(できればtracも持ち運びたひ…)
>>360 >関数の引数って参照渡しなの?
そうだよ。入門書嫁。
どんな入門書だよ
>>360 いっちゃうと代入も何もかもぜんぶ参照渡しです。
だから逆に参照渡しという概念がでてこない。
TracはFastCGIやWSGIでも動作するからApacheじゃなくてもいい。
lightyなんかいいとおもう。
あとWindows版Pythonならパスが変わっても動作するはず。
>>362 まともな入門書にはたいてい書いてあるよ
Pythonって参照渡しって言うのかな >>> def foo(x): x = 2 ... >>> a = 1 >>> foo(a) >>> a 1 いわゆる参照渡しだと、aの値が書き換えられるんじゃないの
>>365 def foo(&x): x = 2
これでOK
まともな入門書にはかいてあるよ
>>366 つまり、「何もかもぜんぶ参照渡し」というわけでなく、
特に指定しなければ値渡し、ということじゃない?
参照をリファレンスという意味で使ったなら ある意味正しいと思う
>>> def foo(&x): x = 2 SyntaxError: invalid syntax ついに嘘書く奴が出てきたよ
>>365 def foo(x):
↑ここのxには確かにa = 1と同一の1が渡る。
x = 2
↑でもこれはその1を2に置き換えるのではなく
xの参照先を2に変更することになるのでaは1のまま。
>>365 Pythonで数字はイデア界にあるから
書き換え不能なんですよ。
つまり = は代入ではなく束縛ってことか ところで >>> lst = [0] >>> lst[0] = lst >>> lst [[..]] >>> def p(x): print x >>> [p(x) for x in lst] [[..]] [None] なんぞこれ
循環参照は[...]になるのか。賢いな。
>>370-371 えーと、本当に参照渡しの意味わかってんの?
fooの仮引数がxと宣言されているが、aを渡したときにそのxがaのエイリアスとして
機能する(つまりxがaと同等である)ようなものが参照渡しなんだが。
FORTRANはデフォで参照渡しだし、C++やC#は参照渡しもサポートする。
Pythonの場合、a, xは同一のオブジェクトを指している*別変数*だから、
xへの代入はaに影響を与えない。
そういうのは参照渡しとはいえないでしょ。
>>365 引数そのものはimmutable(不変)なので、関数内で書き換え不可。
この場合の引数とは、変数のアドレスのこと。
変数が指しているデータを書き換えたい場合は、例えば以下のように出来る。
def bar(x):x[0] = 2
a = [1,2,3]
bar(a)
print a # --> [2, 2, 3]
ミュータブルorイミュータブルというのはオブジェクトの特性であって 変数の特性ではない
そもそもPythonのオブジェクトには代入演算子ないし
Mr.NishioのJython本を読むと、変数はオブジェクトへのリファレンス貼る ってことが書いてある。 買って読んでみなよ。
> 変数はオブジェクトへのリファレンス貼る 俺の頭が弱いのか? 何が言いたいのかわからん
C風に言えば、Pythonの変数はオブジェクトへのポインタ 代入はポインタのコピー 関数呼び出しは全部値渡し Javaも値型(基本データ型)以外は一緒
渡す物がlistになると挙動が変わるはず
>>383 リストだろうが何だろうが、何も変わらない。
>>> def f(x): x = [1,2,3]
...
>>> a = []
>>> f(a)
>>> a
[]
>>>
>>> m = [] >>> def a(x): x.append(3) >>> a(m) >>> a(m) >>> m [3, 3] これは何が起きているんだ? 俺の頭が弱いのか? 何が言いたいのかわからん
>>385 リストだろうが何だろうが、何も変わらない。
>>> def f(&x): x = [1,2,3]
...
>>> a = []
>>> f(a)
>>> a
[1,2,3]
>>>
他言語経験は?
>>385 頭が弱いんじゃなくて、基本が理解できてない。
一体どんな教材でPython覚えたんだよ?
>>385 >>384 の例は、代入によって「変数自体」を変更している
変数の変更とは、変数が持っていたオブジェクトへの参照を破棄し、
別のオブジェクトを指すようにする、ということだ
>>385 の例は、破壊的メソッドによって、変数によって指されている
「オブジェクトの中身」を変更している。変数自体は何も書き換わっていない
>>388 初めてのC#を読みました。
作ったソフトウェアは2つほどでオブジェクト指向はある程度理解しているつもりです。
ほんとだ噴いた
x = 23 はxのポインタの値が書き換わる。 x.append(3) はポインタの先の値が書き換わる。
>>399 >>376 もポインタが指しているオブジェクトの中身を書き換えているだけだ
xとaは別の変数だが同じオブジェクト(リスト)を指しているから、
x経由で変更したオブジェクトをaから参照しても
同じように見えるのは当たり前だ
>>400 >>384 の場合はx=[1,2,3]で新たにリストのオブジェクトを生成して、
変数xはそれを指すから、結果的に変数aの指すオブジェクトの中身は
書き換えられなかったってことでいいのかな?
なるほど、スッとした。さんくす。
やっぱりスッとしない。
>>392 Amazonって、ランキングが出るじゃん。見たんだけどさ。
この時期でこのランキングはないわ。
名著なのに売れないなんておかしいな。
芸術作品ですか。
>>70 のリンクの人のせいで売れないんじゃね?
まるで逆宣伝だし。
そもそも対象となる層が少なすぎる感じがする
日本人限定だしね
そのうえ変な人に気に入られてるようじゃ相当マイナスだね。
Jython使うとPOIも使えると思うのですが CPythonからPOIを使えるようにはできませんか?
Java使え
替わりにwin32comかpyExceleratorを使うとか
win32comもpyExceleratorは使ったことがあるのですが どっちもいまいちなのでPOIを使いたいんですけど Javaは使いたくないんです
GroovyとJRubyやるからどっかいけ
>414 ならばCPythonでJava classファイルを使えるようにする仕掛けをこさえるしかなかろ それって結局JavaVMの特殊な独自実装になるような気もするが。 となると「Javaを使わない」という目的からは厳密には外れるな。 あるいはPure PythonでPOIを書き直すとか
そうですね そうします
死ねばいいよ
死ねって・・・ Pythonの信者の人が反社会的っていうのはほんとなんですね
Jython本を読むと心が洗われます
>>406 これはむしろ愛と呼べる代物だ。
温泉ではアッー!な光景が繰り広げられるに違いない。
>>421 結論から言うと、今回のRuby Kaigiのテーマは"愛"。
:
Ruby愛以外に何か付け加えるものがあるとするならば、あとは、覚悟。
イケメンハッカーはJRubyの本を出せばよかったんじゃね?
Pythonソースコード完全解説とかなら普通に読みたいな
自分でコードも読めない奴は、技術者としては失格だと思うがな。
neet山
RubyConsortium Rubycon 不良品乱発
会社で作るソフトに組み込むスクリプトとしてぜひ Python を押したいんだけど、 「(スクリプトの)逆アセンブルがすげー簡単ぽいけど、どうなのよ」みたいなこと言われたんだ。 そういうわけで、会社を納得させるべく、「思いつきでちょっと解析したぐらいでは分からない程度」 に Python スクリプトの難読化について考えてみたい。
(自分がパッと思いつく程度の)スクリプトの解析方法に付いて考えてみる。 A. python スクリプトファイルが丸見えの場合 .py ソースは問題外。 .pyc は dis モジュールに食わせてダンプして終了。しかもドキュメンテーション文字列付き。 .pyo も dis モジュールに食わせて終了。 B. スクリプトファイルが見えない場合 Python##.dll を改造してアプリケーション付属のDLLと差し替えて、 インポートしたモジュールのコードオブジェクトをダンプするなり別ファイルに書き出すなりする C.コンパイル済みモジュールファイルが丸見えだが、dis に食わせても解析失敗する場合 カスタム Python を使用している事を疑う. アプリケーション付属の Python##.dll を参照するようにして python.exe を実行し、 自作のスクリプトを pyc に変換させ、純正の pyc と比べてみる。
そう考えると、 •独自のインポータを sys.path_hooks に組み込んで自作アーカイブからスクリプトファイルを読み出すようにする •独自アーカイブに含まれているスクリプトは、カスタム Python を使って読み書きするための特殊 pyc •カスタムといっても、ようは pyc の読み書き部分だけつじつまを合わせれば良い •従って、改造するのは marshal.c あたり?
>>428 「解析されて何か問題でも?」と答えておけ。
本当に解析されて困るプログラムなんて、この世にそれほど存在しないだろ。
GPL
JavaだってC#(IL)だって逆コンパイラは存在してるし
難読化とかもあるけど、最終的には
>>431 のような気がする
事情をよく知らない割には権限だけ持っていて、 変化を嫌いたがるダメ官吏みたいな上司を説得するのが一番大変なんだよね〜。
pyc や pyo はバイナリエディタで開いただけでも識別子名と関数名がまるわかりだからねえ 簡単な難読化ぐらいならやる価値あると思う
難読化とかwww馬鹿だろwww 死ねばいいのに
簡単な難読化をしてみせるだけで>428の仕事が楽になるならいいじゃないか。 それ自体に意味があるかどうかはどうでもいいのだ。
マってたまに、子供騙しで騙してしまえばいい相手の要求に対して、 妙に本気になって対処してしまうことがあるよね。自戒も含めてw
全て eval を使って文として 他のプログラムに仕込むとか
子供騙しで手を抜く奴はプログラマだ! バレないように手を抜く奴は訓練されたプログラマだ! こうですか? わかりません (>_<)
>>434 そういうときはその上司の上司を説得するべき
適当にxorして「暗号化しました!」 とか言っとけば大丈夫
ソースコード自身とxorしたから大丈夫です!
ネタならネタで良いんですが もう少し楽しめるのをおながいします
pygameで英語分からなくて暴れてる厨房だろ 放っとけよ
pygameの和訳さっさと進めろよハゲども
自己解決しました。
やめてください
イケメンハッカーが自決しました。
やめてください。
自己解決禁止
>>441 お花畑にお住まいの妖精さんですか?
現実は厳しいですよ。
neet山が自己休刊やめてください。
455 :
360 :2008/05/23(金) 10:59:40
>>360 >>> def call(): info=[]; f(info); return info
...
>>> def f(x): x=[1,2,3] # list渡したい時は.append使え矢
...
>>> call()
[]
>>>
>>> def call(): info={}; f(info); return info
...
>>> def f(x): x[0]=1; x[1]=2; x[2]=3
...
>>> call()
{0: 1, 1: 2, 2: 3}
渡すものが、辞書かリストか、で字面的に違うということですね
事故解決しました。(&なんて使わねー)(*はリスト**は辞書ですが無くても動くのです無害です)
>455 ぜんぜん解決してない ... >>> def f(x): x=[1,2,3] に文法的に対応する辞書の記述は >>> def f(x): x = {0:1, 1:2, 2:3} だよ(これだと結果は callで代入された info → {} のまま)。 リストのappendが字面的に気に喰わないのなら、 x+=[1];x+=[2];x+=[3]; と書いてもいいかもね(ちょっとoverheadありそうな気もするけど)
457 :
360 :2008/05/23(金) 11:30:33
>>456 d
1. def call(*各種設定リスト): info={}; f(info); return
2. 初期化関数もどき(空リスト、空辞書を破壊的操作で初期化)
def f(x): x[0]=1; x[1]=1; x[2]=2 #辞書
def f(x): x+=[1]; x+=[2]; x+=[3] #リスト
設定ファイルちっくに扱うなら、辞書使うし余り気にならないのかも > リストの破壊的操作
JSonとか、いい感じなものだと最近わかり始めてきますた
自己解決禁止しちゃいかんだろww
D:\TracLight\python>python Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> fn = os.path.join('./', 'test-file.txt') >>> open(fn).read() Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: './test-file.txt' 同じディレクトリ下にあるファイルを読むにはどう書けば良いですか?
>>> fn = os.path.join(os.getcwd(), 'test-file.txt') >>> fn = os.path.join('./', 'test-file.txt') >>> open(fn).read() .txt 拡張子が余計に付いてだけでした orz 事故レスすまそ
>>459 なんでバグだらけの旧バージョン使ってるんだ?
うるさいだまれ
自己憤慨しました。
自己発電しました。
助けて java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkExit(Unknown Source) at javax.swing.JFrame.setDefaultCloseOperation(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.python.core.PyReflectedFunction.__call__(Unknown Source) at org.python.core.PyMethod.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.core.PyInstance.invoke(Unknown Source) at applet$_PyInner.init$1(applet.java:61) at applet$_PyInner.call_function(applet.java:47) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyFunction.__call__(Unknown Source) at org.python.core.PyMethod.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.core.PyObject._jcallexc(Unknown Source) at org.python.core.PyObject._jcall(Unknown Source) at applet$MyApplet.init(applet.java:139) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
マルチしちゃったか 死ね
ちょっと教えて欲しいんだけど、pythonの正規表現で先読みって使えないの? 下みたいに書いても全然文字列を分割してくれないんだけど line = '123,456,79' regexp = re.compile('(?=5)') print regexp.split(line)
>>468 http://www.python.jp/doc/nightly/lib/re-syntax.html > (?=...)
> もし ...が次に続くものとマッチすればマッチしますが、文字列をまったく消費しません。
> これは先読みアサーション(lookahead assertion)と呼ばれます。
> 例えば、Isaac (?=Asimov) は、'Isaac 'に 'Asimov'が続く場合だけ、'Isaac 'とマッチします。
'(?=5)' だと空文字列に 5 が続くなら空文字列にマッチ(ただし 5 は消費しない)という意味になるのかな?
空文字列にマッチしたら分割の目的には使えないような・・・。
>>> a = re.compile(",(?=4)")
>>> a.split("123,456,789")
['123', '456,789']
>>468 先読みが使えないっていうより
re.split() に長さ 0 のパターンを渡しても何もしてくれないとかじゃない?
他の言語とかは挙動が違った気がする
>>468 ライブラリリファレンスを見れば分かるけど、先読みは使えるよ。
よくわからんが、split()がzero-width assertionでは機能しないのかもな。
split()に与えた正規表現にマッチした文字列をデリミタとみなして分割するから、
「位置」じゃなくて「文字(列)」にマッチする正規表現じゃないとダメ、とかさ。
ただの想像だけど。
472 :
471 :2008/05/23(金) 23:58:39
ぐは。レスかぶりまくりじゃん。
先読みの使い方を間違えてる
お前は次に「自己解決しました」と言う。
自己解決しました
476 :
468 :2008/05/24(土) 01:09:50
レスサンクス やっぱり場所指定の正規表現じゃ分割しないみたいだね perlとrubyでもsplit関数を動かしてみたんだけど、 perlはpythonと同様で場所指定の正規表現じゃ分割してくれなかったよ 一方rubyは意図したとおりに場所指定で分割できた 言語毎に結構挙動が違うもんなんだね
ruby最強!
regexp = re.compile('.(?=5)')
>479 それだと一文字消えちゃうだろう常識で考えて
>>468 Perlのバージョンは?
試したらできたよ。
my @f = split /(?=5)/, $str;
print join(':', @f), "\n";
>>> import re >>> line = '123,456,79' >>> regexp = re.compile('') >>> regexp.split(line) ['123,456,79'] そもそもこうなるんだもんなぁ
>>477 ぐはははははははははははhahahahahahahahaha!!!!!
ぐは。自己解決しました。
486 :
デフォルトの名無しさん :2008/05/24(土) 12:39:52
>482 perlでもsplitできるね pythonで位置指定の分割ってどうやんだろ
こんな感じの関数を自分で作って使えばいいんじゃね def split(pattern, string): result = [] start = 0 for m in re.finditer(pattern, string): result.append(string[start:m.start()]) start = m.span()[1] result.append(string[start:]) return result
リスト返すようにしちゃったけど、ジェネレータにすべきだったか ま、その辺は好きに汁
>487 re.findall()
re.findall()がどうしたの?
Perl で split('', $str); に相当するのは Python ではどう書けばよいですか?
オブジェクトのメソッドを一覧で取得するにはどうすればええの?
filter(callable, dir(hoge))
[x for x in dir(obj) if callable(getattr(obj, x))]
自己完結しました
>>494 オッサン臭いコードだな。その上動かないってどんだけ(www
itertools は使えそうで使えない
>>498 まさに労害(WWW
おれさまがなおしてやった filter(lambda x : callable(getattr(obj, x)), dir(obj))
ここまで来ると、わざわざfilterを使う意味なくね?
pythonのlambdaって読みづらいだけじゃね? pythonの基本的な文法と比べると汚い
Guidoもlambdaは嫌いだったと思う。 lambdaを使うのは変態か、自称イケメンハッカーのワンライナー芸人だけだろ。
どうせ残すなら いろいろできるようにすればいいのに
cshといっしょでコード互換のために残してるだけなんだから もう新規につかうようなもんじゃないだろ。
Pythonプログラミング入門はクソだとよ。
自分の言葉で語りなさい
ということにしたいのですね
懐かしいフレーズだ
皆さん lambda と聞くと昔の傷がうずくのですね
Twisted本、クソ本フラグがたった感が。
うはは、わかりません。
関数をファーストオブジェクトとして扱えないのはしょうがないが だからってpython の lambda はちょっと無しだろ C++みたいに演算子()をオーバーロードできればいいのに
>>514 関数内で関数が定義できるんだから、lambdaはあれで良い。
演算子オーバーロードも、__call__でできるじゃないか。
うはは、わかりません。
>>514 Pythonの関数はファーストクラスオブジェクトだが
ファーストオブジェクトってどういう意味?
>>519 ありがとう。ファーストクラスオブジェクトでググればよかったのか。
俺もPythonのlambdaは気持ち悪いと思う。
あと、exceptで例外が複数のときだけ括弧つけるのも気持ち悪い。
(UNIX環境の)Pythonってソースプログラム実行中にソースの書き換えってできるの? インタプリタだから、できそうなイメージなんだけど
pythonって関数内で関数作って関数を返す関数作れたっけ?
tupleが (a,) ってなるのがきもい
524 :
デフォルトの名無しさん :2008/05/25(日) 14:50:03
python の快活環境どれがおすすめですか?
>>522 いろんなデコレータのソース読んでみたら?そういうのばっかりだから。
Pythonのデコレータは、関数を引数にして関数を返す関数。
@foo(a,b)
def bar():
の場合、fooは、"関数を引数にして関数を返す関数"を作成して返す関数になる。
間違えた 快活環境じゃなくて開発環境
>>522 名前なしでそれができない、ってだけ。
あと定義された時の環境に対して書き換えが効かない。
528 :
デフォルトの名無しさん :2008/05/25(日) 17:03:38
385 名前:デフォルトの名無しさん[] 投稿日:2008/05/23(金) 22:18:26 助けて java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkExit(Unknown Source) at javax.swing.JFrame.setDefaultCloseOperation(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.python.core.PyReflectedFunction.__call__(Unknown Source) at org.python.core.PyMethod.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.core.PyInstance.invoke(Unknown Source) at applet$_PyInner.init$1(applet.java:61) at applet$_PyInner.call_function(applet.java:47) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyFunction.__call__(Unknown Source) at org.python.core.PyMethod.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.core.PyObject._jcallexc(Unknown Source) at org.python.core.PyObject._jcall(Unknown Source) at applet$MyApplet.init(applet.java:139) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
御臨終です
org が orz の相似に見えた
そういやIronPythonのスレはあるのにJPythonのスレはないんですね
Jythonのスレならあるでしょ。 専用じゃないけど
>>523 これならきもくない?
tup = (
a,
)
>>525 ,527
ありがとう
やってみたら出来たよ
これで使いやすいschemeの代わりが出来た
そんな見た目だけの問題じゃないよ! >533 誰かが「カンマがtupleを作るんだ、カッコじゃない」と言ってたが、 >>> x=() >>> type(x) <type 'tuple'> キモイヨー
>>535 男なら、空のタプルを作りたいときがあるってもんだ。
python for S60のスレはないよなぁ
パックリ(i) キモイヨー
RDBで言うテーブルに対するビュー Cで言う配列に対するポインタ みたいなノリで使える、オリジナルデータを更新可能なスライスみたいなの無いかな スライスみたいにコピーするんじゃなくて参照を握っていて、 更新も出来るやつ 自分で作るしかない?
うはは、キモイヨー。
>539 10行ぐらいで書けそうだから、必要な人は手元で書いちゃうんでは。
544 :
デフォルトの名無しさん :2008/05/27(火) 09:57:14
ちょちょっっと書いてみていただけませんか?
さては11行になったな?
548 :
539 :2008/05/27(火) 18:28:38
レスくれた人どうもです
>>542 モジュール名を教えていただけませんか
>>543 書いてみましたが、自分は10行では無理でした
__getitem()__に負のインデクスやsliceオブジェクトが渡された時の
処理とかをいちいち書くのがウザいです
>>547 arrayは全く用途が違うのではないでしょうか
シークエンスの部分列を「参照」するだけならただのスライスで良いし
itertools.islice()ならコピーを避けられますが、
元のシークエンスを「更新」もしたいわけです
pygameの和訳完成してもいいころなんじゃねーの
547は配列を作りたいのかと勘違いした。 ようするに、ポインタに相当するものを作りたいのか。
うはは、すみません
>>548 要するにスライスをスライスして新しいスライスを作れればいい(そこを自前で実装するのは面倒)ということだな。
スライスをスライスしてスライスを作るというのはありがちな気がするので既にありそうだが。俺は残念ながら知らん。
自前で実装するのは確かに面倒そうだ。
>>539 http://www.rh.to/python/WDB.html こんなのとか? リンク先のViewの説明がそれっぽいとかおもた。
というか牛刀をもって鶏を割くみたいになってる気もする…
>>457 def call(inil=[1,2,3,4,5]): srcl=inil; m(srcl,1,3); return srcl
def m(x,i,j): _m(x[i:j])
def _m(x): x[0]=1; x[1]=1; x[2]=1 とか思いついて、書いてみる
>>> def call(ini): src=ini; dst=m(src,1,4); dst.insert(0,src[0]); dst.append(src[4]); return dst
>>> def m(x,i,j): print x[i:j]; return _m(x[i:j])
>>> def _m(x): x[0]=1; x[1]=1; x[2]=1; return x
>>> call([1,2,3,4,5])
[2, 3, 4]
[1, 1, 1, 1, 5]
むぅ。糞コード。可読性悪すぐる…orz
call()でintかlistで場合分け必要だし
numarray
556 :
539 :2008/05/27(火) 22:52:01
ありがとうございます NumPyですか 数値計算が目的という訳ではなかったので完全に盲点でしたが、使えそうですね ちょっと試してみます
これからはRuby一色の時代。 PerlもPythonも廃れ、Rubyだけが生き残る新時代
その「新時代」になってから勉強しても全然遅くない。
for e in dir(): print e とかで出力されるデータをA-Z, a-z, __??__で 頭文字ごとに改行して出力するにはどうしたら良いですか?
560 :
559 :2008/05/28(水) 14:23:42
>>> def print_elem_n(elem): ... print '\n', elem, ... >>> def print_elem(elem): ... print elem, ... >>> q='' >>> >>> a2z="abcdefghijklmnopqrstuvwxyz" >>> for e in dir(cssutils): ... if q == '' and q in set(a2z): q = e[0] ... if e[0] in set(a2z): ... if q != e[0]: ... print_elem_n(e) ... q=e[0] ... else: ... print_elem(e) 書けた…添削きぼん print文の、改行の取り扱いに嵌る orz
>>> a2z="abcdefghijklmnopqrstuvwxyz" >>> a2z=range(ord('a'), ord('z')+1)
groupby使ってみるといいんじゃない? from itertools import groupby from operator import itemgetter for k, g in groupby(sorted(dir(str)), itemgetter(0)): print ", ".join(g)
>>560 printだけ書けば改行できるのに。
lastchar = dir()[0][0]
for e in dir():
if e[0] != lastchar:
print
lastchar = e[0]
print e,
これじゃダメ?
インデント消えちゃったけど、まぁ分かるよね?w
>>562 便利なもんがあるんだなー
こんな普通な奴しか思いつかなかった
def f(seq):
d = {}
for s in seq:
d.setdefault(s[0], []).append(s)
for k in sorted(d.iterkeys()):
print ','.join(d[k])
566 :
563 :2008/05/28(水) 15:07:07
Python始めて1週間の俺には", ".join(g) の部分がよく分からなかったが、 gのシーケンスを", "で区切った文字列が得られるのか。
むしろ g は glue の g かもしれないぜ
>>563 for e in dir():
1. if 違う要素かどうか判定: 改行\n + フラグを更新する
2. 要素を出力する
d。ノートにでもまとめて整理しとく乙
>>566 個人的には
リスト.join(区切り文字)
の方がわかりやすいと思ってる。
1. FAQ嫁 2. Ruby使え 3. 俺もそう思う
引数にジェネレータを与えられるのはstr.joinの一つの利点だと思う
572 :
563 :2008/05/28(水) 17:51:18
>>569 俺も文脈的に直感的でないと思うけど、文字列クラスにjoinメソッドがあるという
形だからしょうがないね。
静的関数として提供した方がいい気がするが、元々静的関数だったのが廃止されて
メソッドになったのね。
573 :
デフォルトの名無しさん :2008/05/28(水) 19:13:53
djangoを使ってみようと思っています。 それでまずはmodelを定義してデータを入れるところまではできま した(sqlite3とかで直接DBの中身見て入ったのを確認した)。 だけど、manage.py shellでデータを確認しようとしても見れません。 具体的にはhoge.objects.all()とかってやっても[]が表示されるだ けです。 これはなぜなんでしょうか? あと、adminのhogeの画面でも 5 hoges のように表示されるだけで、DBに格納したデータをいじれたり、見 る事ができない状態です。 何かアドバイスがいただければ助かります。よろしくお願いします。
うちではみれてる
575 :
デフォルトの名無しさん :2008/05/28(水) 23:51:30
ディショナリをそのキー名の変数にするってどうすればいいんですか? つまり a{hoge:1,foo:2,bar:3} を↓のようにしたいです。 hoge = 1 foo = 2 bar = 3
>576 みんpyには載ってませんでしたけど、ググッたら解決しました。 exec使えばいいんですね!
D = dict(hoge=1, foo=2, bar=3) locals().update(D) あまり行儀良くないとは思うが一応
D = {'foo': 1, 'bar': 2, 'baz': 3} for k in D: exec "%s = %s" % (k, D[k]) ついでに漏れも生まれて初めて exec 使ったので記念に
>>575 ローカル変数にする意図が全くわからない。
そんなことして何か嬉しいか?
クラスの属性の初期化時とか
>>575 >a{hoge:1,foo:2,bar:3}
このコードはどんな入門書にも載ってないよ(www
cur.execute("insert name (age,job,height) values (?,?,?)", people['age'],people['job'],people['height']) ↑みたいなのを cur.execute("insert name (age,job,height) values ?,?,?)", age,job,height) みたいにすっきりさせたいんです。カラムが多いので。
>>577 ,579
execなんて危ないもの、初心者が使っちゃいけません!!
>>584 %のフォーマットには辞書を渡す方法もある
"insert name (age,job,height) values %(age)s,%(job)s,%(height)s)" % people
587 :
586 :2008/05/29(木) 00:29:34
すまん、やりたいことと違うみたい
588 :
575 :2008/05/29(木) 00:33:18
>>586 へー。そういうのもあるんですね。勉強になります。今回は
>>579 の
方のやつを使わせていただこうと思います。ありがとうございます!
>>585 eval 使ったらこけて何これって思ったさ
>>584 これでもいけたような気がする。間違ってたらごめんね
cur.execute("insert name (age,job,height) values (:age, :job, :height)", people)
>>582 目的によっては、
for k in dic:
setattr(obj, k, dic[k])
で充分だったりする。
>>590 せっかくだからiteritems()使おうよ。
for k, v in dic.iteritems():
setattr(obj, k, v)
djangoのチュートリアルに全部書いてあることばかりですねわかります
iteritems なんてのがあったのか。。。 いままで items しか使ってなかったよ。 。。。。でもどうせ 2.6 あたりで統合されるんでしょ?
djangoってなんで日本ではやらないんですか?
お前が使ってなんかすごいの作ってくれよ
なるほど、595さんみたいなダメな人しか使ってないからなんですね。 はやらない理由が分かりました。
>>593 2.Xでは互換性維持、3.0以降からitemsがiteritems相当になる、だったと思う
(日本では)、やらないか
アッー、、、
for k in (ここに使用): としたときdictオブジェクトとかその.keys()いれたときのkに出てくる順番はどう決まるのですか?
シェフの気まぐれ順。
多分内部ハッシュ 気にしちゃダメ 順序に依存しない方法を考える>ordereddict自作
了解しました どうもありがとうございました
webアプリケーションフレームワークを使わないpython製のCMS(WIKI、BLOG含む)って MoinMoinとPyblosxomくらいですか?
温泉はいつも行ってる
>>594 一時期マイブームだったけど
完成が速すぎて今はメンテナンスだけ
また何か作るときにお世話になると思う
以下djangoに限らずweb開発環境全般に言えるんだが
それなりの努力でそこそこのものが出来るのは利点だけど
プログラミングの面白さはあんまりないかも知れない
djangoだけで出来ない部分を自分でプログラムする訳だけど
そこは最初からdjango使わなくても出来ると言えば出来る訳で
あえてdjango使うのは手間を減らすためだから
djangoで出来る範囲のことをdjangoに精いっぱいやらせるのが良い
「知ってれば簡単」という状態を期待してdjangoを使っている
だけどそのためにはdjangoでどうするのかを知ってないといけない
すごいジレンマが起きる
一通り覚えるまで苦労する
turbogearsってなんで日本
そういやZopeとかもあったなぁ。くだらないアプリだったけど。 あってもなくてもどうでもよかった。
python2 と3の違いが列挙されているサイトはありませんか?
>>611 ありがとうございます
どのように変わるのか知りたかったのでこれから見てみようと思います
楽しようとして倍苦労する そして二度と使わない
3つのなかではdjangoが一番おすすめなの?
>>615 お手軽・・・ならDjangoかもな。
まじめにやるなら、Paste/Pylonsで、wsgiをベースにしたデザインのフレームワークを使った方が良いかも知れない。
日本のコミュニティのgdgdぶりならdjango,pylonsもかわりないよ!
import するとそれのpycが作られてしますんですがこれを抑制できませんか? 変数がつまったちょくちょく変更される.pyのファイルがあり、 それを実際動かすほうで取り込んで変数を使っているのですが pycがあるといちいち消さなくてはいけなくて不便です
>>618 pycを消す必要はないと思うが。
タイムスタンプが古ければ無視されるから害はないかと。
そうだったんですか、pyc優先だと思い込んでました どうもすいません ありがとうございました
621 :
575 :2008/05/30(金) 16:42:02
>>589 そのやり方でできました!
↓に落ち着こうと思っていたんですが、気持ち悪いなーと思っていました。
for k,v in item.iteritems(): exec '%s = u"%s"' % (k,v)
そちのやり方の方が分かりやすく安全ですね。使わせていただきます。すば
らしいです。ありがとうございます。
pysqliteのマニュアルはtutorial部分ちゃんと読んだつもりなんですが、
そのやり方は知らなかったです。
あれ?チュートリアルに書いてなかったか? いや、2.5のドキュメントの方か。
サンプルソース
code/execute_2.py code/execute_3.py
コミュニティコミュニティうさんくさい。
627 :
デフォルトの名無しさん :2008/05/31(土) 01:10:01
日本のPythonユーザー激増ですね。わかります
>>621 ちなみに、そのやり方が無くても、工夫次第で何とかなる。execは危険すぎる。
>>> d = { 'age': 23, 'job': 'neet', 'height': '164' }
>>> d.items()
[('age', 23), ('job', 'neet'), ('height', '164')]
>>> i = zip(*d.items())
>>> cur.execute("insert name (%s,%s,%s) values (?,?,?)" % i[0], *i[1])
zipとか*の使い方は覚えておくと応用が利く
そして%sにとんでもない内容のSQLをぶち込まれて涙するわけですね
そして高木先生に怒られるわけですね
>>627 >おはようって言ったらおはようって返してくれるよ!
sugeee---!!!
>>629 %s と ? の数も zip(*d.items()) の個数で自動にできませんか?
d = { 'age': 23, 'job': 'neet', 'height': '164' } locals().update(d) じゃだめなの?
オタはRubyでもやってろ。 それか死ね。
>>627 >おはようって言ったらおはようって返してくれるよ!
kimeeeeeeeeeeee------------------------(wwwwwwwwwwww
>>630 辞書のキー側にunsafeな文字列入れるわけ無いじゃん。
638 :
575 :2008/05/31(土) 09:27:52
>>629 なるほど。面白いやり方ですね。勉強になります。
早速zipについてライブラリリファレンスを見てるんですが、
zip(*d.items())についている*の意味が分かりません。
検索にも引っかからないんで、もしよかったら教えていただ
けませんか?
よろしくお願いします。
>>634 locals()で取れる辞書を変更してもローカル変数には関係ないよ。
書き込む前に自分で試せ、人の手を煩わせるな。
In [1]: def baz(d):
...: locals().update(d)
...: print foo
...:
In [2]: d = {'foo': 'bar'}
In [3]: baz(d)
---------------------------------------------------------------------------
NameError: global name 'foo' is not defined
>>633 もっとうまいやり方があるかもしれんが、、、
In [4]: t = "insert name (%s) values (%s)"
In [5]: d = {'age': 12, 'height': 34, 'weight': 56}
In [6]: ks, vs = zip(*d.items())
In [7]: ks
Out[7]: ('age', 'weight', 'height')
In [8]: vs
Out[8]: (12, 56, 34)
In [9]: k = ','.join(ks)
In [10]: k
Out[10]: 'age,weight,height'
In [13]: q = ','.join(['?']*len(ks))
In [14]: q
Out[14]: '?,?,?'
In [15]: t % (k,q)
Out[15]: 'insert name (age,weight,height) values (?,?,?)'
あとは、cur.execute(t % (k,q), *vs) で行けると思う。
>>632 リアルで女と話したこと無いだろ(wwwww
あ、かあちゃんは女じゃないからな(wwww
>>> d={1:'a',2:'b',3:'c'}
>>> d2l=zip(*d.items())
>>> d2l
[(1, 2, 3), ('a', 'b', 'c')]
やり取りしたいデータが『一対一の対応』なら,
cur.execute("insert name Ns values Vs" % i[0], *i[1])
というか
>>589 みたいに書くのが見やすそう
>>> d={1:('a','い'),2:('b','ろ'),3:('c','は')}
>>> d2l=zip(*d.items())
>>> d2l
[(1, 2, 3), (('a', '\x82\xa2'), ('b', '\x82\xeb'), ('c', '\x82\xcd'))]
そうでないなら、link, select_multipleなどhtmlタグ要素, 『一対多の対応』。
cur.execute("insert name Ns values Vs" % i[0], *i[1][0])
『多』側の切り替えはindexで切り替えるのがベスト?(素人考えなので動くかどうか不明↓)
cur.execute("insert name (name,age,job,height) values (:name[0], :age, :job, :height)", people)
644 :
641 :2008/05/31(土) 09:44:13
うぁぁ、辞書の .keys() と .values() って同じ順番だって保証されてた。 In [18]: k = d.keys() In [19]: ','.join(k) Out[19]: 'age,weight,height' In [20]: ','.join('?'*len(k)) Out[20]: '?,?,?' zip()とか*d.items()とかイラネェ
>644 d={u'長門':(u'おはよう', u'おはよう')} これでおk。 つーかきめぇ(www
646 :
643 :2008/05/31(土) 10:11:02
>>647 >長門は俺のIDLE
だれが上手いこと
ツッコミ入ってるのに延々やってる奴いい加減自重しる
ttp://docs.python.org/lib/module-sqlite3.html > You shouldn't assemble your query using Python's string operations because
> doing so is insecure; it makes your program vulnerable to an SQL injection attack.
> ...
> # Never do this -- insecure!
> symbol = 'IBM'
> c.execute("... where symbol = '%s'" % symbol)
650 :
643 :2008/05/31(土) 15:06:45
http://codepad.org/ShbrDxt1 1. stat の使い方がよくわからなかた
2. print が親切すぎる ex: print str, int, str[,] # 型変換と改行処理
3. sorted ではまる # os.listdir('./').sort() では駄目ぽ
* size と date でも sort できるようにする
* テンプレートと処理を分離する
時間で sort するのってどうすればいいんだろう…
652 :
643 :2008/05/31(土) 16:32:34
だから651は馬鹿
Perlでいう @salt = ['a'..'z', 'A'..'Z', '0'..'9', '.', '/'] これをPythonで書きたいんだけど、スッキリ書く方法ないですか? シーケンス型なら何でもいいです。
題意に沿ってるかは怪しいけど salt = list("azAZ09./")
657 :
656 :2008/05/31(土) 17:54:04
うん、範囲演算子っぽいものが見えなかったんだ 吊ってくる
標準ではないから、すっきり書きたいなら関数を一つ書く必要があるね salt = 'abcdefghi...' とベタに書くのが一番簡単かもしれない。
>>655 import string
string.letters + string.digits + './'
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./'
import re def extract_char_range(s): def f(m): beg = ord(m.group(1)[0]) end = ord(m.group(1)[2]) if end < beg: return m.group(1) return ''.join(chr(x) for x in xrange(beg, end + 1)) return re.sub('([^-]-[^-])', f, s) こんな関数でも作っておいて l = list(extract_char_range('a-zA-Z0-9./')) とでもするとかな
import re re.findall(r"[a-zA-Z\./]", "".join(map(chr, range(256)))
PerlはTMTOWTDI Pythonは誰が書いても同じようなコード そう信じていたころが僕にもありました
mがNoneで脂肪
664 :
655 :2008/05/31(土) 18:42:39
やっぱり、標準的な構文で簡単に書く方法はないですか。
今は
>>659 の書き方をしてますが、もっと汎用的な方法があればと
思ったのですが。
>>661 まいりました _no
import re re.findall(r"[a-zA-Z0-9\./]", "".join(map(chr, range(256)))
>>664 a-zとかいう書き方は、aからzまでの文字コードが連続している環境に依存した書き方。
「汎用的な書き方」ではないので注意。
でも、Unicode文字列なら環境依存とか気にしないでいいから、こういった範囲指定構文もほしいね。
c-f なんて何に使うのか知らないけど。
0-255の文字列はstring.maketrans('','')でもいいな
670 :
デフォルトの名無しさん :2008/05/31(土) 23:36:46
>>669 どのへんが嘘?
>a-zとかいう書き方は、aからzまでの文字コードが連続している環境に依存した書き方。
これ?
ぶっちゃけEBCDIC環境とか気にしたこと一度もないな ましてPythonではな
突然だけどVPython面白いね。 betaで半透明も使えるようになってるし。 簡単な3Dオブジェクト動かしてデモさせるのにええよ。
673 :
デフォルトの名無しさん :2008/06/01(日) 00:58:50
import re re.findall(r"[a-zA-Z0-9\./]", "".join(map(chr, range(256))))
>>672 出来あがった画をmpgやgifに出来ますか?
わたしもみてみたいなあ
そっから離れようぜ
>>655 A-Za-z0-9./ で作ったシーケンスは何に利用するの?
場合によっては、(Pythonでは)そもそもシーケンスを作るという必要がない可能性が。
saltって書いてあるがな
じゃあハルヒは作れるの?
こらこら嘘を言うな
昨日から考えてたが
>>652 が何を言いたいかわからん
>>678 crypt.cryptに与える第二引数
687 :
デフォルトの名無しさん :2008/06/01(日) 21:09:21
pyhtonで2chに書き込むスクリプトを書こうとしているのですが、
# coding: shift_jis
import urllib
import urllib2
subjects = urllib.urlopen("
http://money6.2ch.net/recruit/subject.txt ").read().split("\n")
key = '1207051330'
query = { 'bbs': 'recruit', 'key': key, 'time': '1', 'submit': '書き込む', 'FROM': '', 'mail': 'sage', 'MESSAGE': 'test' }
query = urllib.urlencode(query)
data = urllib2.urlopen("
http://money6.2ch.net/test/bbs.cgi ", query)
print data
としたところ、subjectsには正しく入っているので接続はうまくできているみたいなのですが、書き込みの方が
<addinfourl at 142709612 whose fp = <socket._fileobject object at 0x880adbc>>
とエラーが出て、どうやらうまく接続すらできていないようです。
urllibあたりの使い方が適切でないのかなと思っているのですが、心当たりのある方はいらっしゃらないでしょうか。
>>687 > pyhtonで2chに書き込むスクリプトを書こうとしているのですが、
なるほど、スクリプト荒らしか
>>688 そうそうその通り、ってちげーよw
cuiな2chブラウザが作りたいだけぽ
urllib2.urlopen()の後でread()抜けてる
>>690 あ、ほんどだ・・・
すみません、また分からなかったら聞きにきます><
やれば出来る子なんですよ。 やる気になったことがないだけで。
693 :
687 :2008/06/01(日) 22:21:18
やった、書き込めた わっしょい、わっしょい、わっしょい!
FileCookieJarとかでキチンとスクリプト内でクッキーのやり取り行える様にしたほうがよくねえか?
スクリプトのテストとかは厨房板じゃなかったけかな 普通の板でオイタするとアク禁されちゃうぞ
書き込みテストとスクリプトのテストは違うけどな・・・
まあ古きよき MH みたいにコマンドラインで扱える 2ch ってのが あってもいいとは思うけど悪用されやすそうだな…
読み込みは比較的簡単にできるのだが 書き込みが面倒くさいんだよなぁ。
doreamhost申し込むとgoogle app eng が使えるんだな 知らなかったぜ
知らない間にJinjaが準公式ライブラリになってたんだな。
WindowsXPでPython2.5を使っていて 標準入出力を行うプログラムを作ったのですが 例: import sys print ''.join(sys.stdin.readlines()) これをコマンドラインから単独で実行すると期待した動作をするのですが、 > hoge.py aaa(^Z) aaa リダイレクト付きで実行するとファイルを読み込んでくれません。 > hoge.py < fuga.txt > type fuga.txt | hoge.py ただし、 > python hoge.py < fuga.txt > type fuga.txt | python hoge.py という形で実行するとうまく動くみたいです。 .pyの関連付けは出来ていると思うのですが、なにが足りないのでしょうか?
704 :
デフォルトの名無しさん :2008/06/02(月) 23:31:57
level
>>703 ありがとうございます!!
これで解決できそうです!!
>>700 意外と使うやつ増えるかと思って
doreamhostの割引コード生成してきた
PRLIQUID
Python では組み込みの辞書クラスやリストクラスを継承して 何か新しいメソッドを追加するなどということができるのでしょうか? C++ でコンテナクラスライブラリを継承して用途に特化した メソッドを追加するということを時々するのですが, 同様のことが Python でもできれば便利だなと思っています.
基本的型 である int, float, str, list, tuple, dict と file は、 2.2 以降、 基底クラスオブジェクトを継承したクラスとして動作する。 その継承もできる。 ーーーーーーーーー ということらしい.
712 :
デフォルトの名無しさん :2008/06/03(火) 12:44:54
Python であるオブジェクトの方を表示するにはどうすればいいのでしょうか? 単にある文字列がバイト列の文字列(というのか?)なのか Unicode 文字列 かというのを判定したいのですが、できればより一般的に任意のオブジェクトの 型情報をデバッグ時に表示させたいことがあります。 C++ における typeof のようなものをイメージしています。
713 :
712 :2008/06/03(火) 12:46:44
すんません、勘で type(object) のようにしてみたら なんか取得で北っぽい。
typeofに相当するものなら、組み込み関数にtype()があるけど
旧スタイルクラスは型ではないので typeは全部classobj / instanceになるんで注意汁
716 :
712 :2008/06/03(火) 13:44:11
>>715 たしかに、codec.open で返ってくるファイルオブジェクトを
type でみたら instance になっちゃうね・・・
最近 boost.python に触発されて使い始めたばっかりだから
「旧スタイル」ってのがわからないが。
boost.python のおかげで C++ ともうまくやっていけそう。
>>> class OldStyle: pass >>> class NewStyle(object): pass objectを継承するかどうかで決まる
>>716 組み込みのobjectから直接ないし間接に継承してるクラスは
new style classになり、そうでないものが旧スタイル、のはず
とりあえずclassobjの場合はcls.__name__
instanceの場合はobj.__class__.__name__
とかやればクラス名は取れる
単にxはAのインスタンスかを知りたい場合は
isinstance(x, A)を使うといいよ
これは旧スタイルクラスに対しても意図した通りに働く
719 :
712 :2008/06/03(火) 14:57:27
よくわかりました、ありがとう。 ところで print ステートメントで簡単にデバッグ用表示が できるようい __str__ メソッドを用意してみたんだけど、 Unicode 文字列を返しちゃだめなんだね・・・
__unicode__ もあるよ
デバッグなら__repr__
722 :
712 :2008/06/03(火) 16:15:32
おお、いろいろあって面白いな。 今ディープコピーしようとして import copy して y = copy.copy(x) とかするって知ったんだけど、 結局ダックタイピングだから __deepcopy__() が定義されていればいいということ? じゃ、__deepcopy__() を直接呼び出せばいいんじゃね?
723 :
712 :2008/06/03(火) 16:16:35
ディープコピーは copy.deepcopy(x) だった
アッー
>>727 >出会い目的としての懇親会
こういう感覚って逆に新鮮(wwww
>>724 ていうか申し込みできないくさいんだが。
>729 すぐに満員になったから締め切ったんだよ. なんとか温泉とは大違いだね.
>>728 もちろん、異性出会いという意味じゃないよ
勉強会とか、学校っていわゆる人脈づくりが目的でしょ?
人脈というとなんかあれだけど
>>731 >異性出会いという意味じゃないよ
誰もそんなこと言ってないけど(wwww
733 :
デフォルトの名無しさん :2008/06/04(水) 00:18:33
pythonってなんかいい本ある?
LLやるとモテますか?
>>732 誰かが言ってたら「そういう意味じゃないよ」みたいな書き方になるだろう。
まだ言っていないことを先に言うから「異性出会いという意味じゃないよ」と、説明的になる。
誰も言ってないから書かれたものに「誰もそんなこと言ってない」と返しても、あんまり意味が無い。
見えないレスと戦っている人がいるんだな。
同性出会いってこと?
勉強会初心者ですが質問させてください。 女性の参加者は全体の何%くらい居ますか?
copy読んでも面白くなさそうだけどなぁ。 IronPythonのソース読むなら参加したいかもw
741 :
デフォルトの名無しさん :2008/06/04(水) 08:09:17
ログインシェルをPythonにして生活出来ないものかと試してみたがにっちもさっちも行かなくなった そういう使い方は無しなのか。
>>741 IPythonならもう少し何とかなると思うよ。
でも、最近のbashとかまでは補完機能強くないなぁ。
>740 こういう奴に限って基本が抜けている。 たいてい仕事に使えないので注意。
>>734 非モテはLLやっても非モテだろJK(wwwwwwwwwwwwwwwwwwwww
746 :
デフォルトの名無しさん :2008/06/04(水) 11:22:46
シーケンスの中から特定の要素を全部削除したいのだけど, 効率のいいやり方ってありますか? 自分は以下のおそらく非効率的なやり方をしています. a = ["", "a", "b", "", "c"] print a while True: try: a.remove("") except ValueError: break print a
747 :
デフォルトの名無しさん :2008/06/04(水) 11:24:23
a = [i for i in a if a != ""]
749 :
デフォルトの名無しさん :2008/06/04(水) 11:29:42
while '' in a: a.remove('') これでも同じか… in を処理するときにいちいちサーチしているんだよねぇ
>>748 そこでiをチョイスするのはなんだかなぁとおもった。
a = filter(lambda x:x!="", a)
filterおじさんキターーー!!!
753 :
デフォルトの名無しさん :2008/06/04(水) 11:39:47
>>748 ふむ,そういう書き方をするのか.
リストの内包表現というのだな・・・
他の言語から来た人間には目新しい。
たぶん Python にはたくさんそういう技があるんだろう。
C/C++/Java しか触ったことないから違いだけに着目して勉強したい。
a = list(itertools.ifilterfalse(None, a)) > ifilterfalse( predicate, iterable) > predicateがFalseとなる要素だけを返すイテレータを作成します。 > predicateがNoneの場合、値が偽であるアイテムだけを返します
755 :
748 :2008/06/04(水) 11:44:12
>>750 そんなくだらないところを指摘する暇があったら、間違いを指摘してくれよ(嘲笑
a = [i for i in a if a != ""]
↓
a = [i for i in a if i != ""]
756 :
デフォルトの名無しさん :2008/06/04(水) 11:46:21
いっぱいやり方があるもんだね。 いずれにせよ一時的な作業用に元のリスト a と 最大で同じだけの大きさのリストができてしまうのは仕方ないのか。
といってもリストに入ってるのは参照だけだから問題な鹿。
a[:] = itertools.ifilterfalse(None, a)) ならワークの配列なしのinplaceな変換になるんじゃないかな
ごめん 余分な ) がついてた
>>756 del という手もある。
a = ["", "a", "b", "", "c"]
i = 0
while i < len(a):
if a[i] == "":
del a[i]
else:
i += 1
print a
>>760 最初はそれでやろうと思ったんですが、
del すると要素数が変わっちゃうなぁと思いまして。
でも毎回 len(a) でチェックしてるからいいのか。
>>758 先頭の a[:] の効果って何なんでしょうか?
スライス・・・・・・とりあえず全部の要素をさしている?
a = [x for x in itertools.ifilter(lambda x: x!="", a)] ってやっちゃったら、当然中間生成物(?)ができますよね。
763 :
748 :2008/06/04(水) 12:14:26
>>761 代入文の左辺がsliceの場合は、その範囲がクリップされて、
そこに右辺のシークエンスを突っ込むんだよ
ぶっちゃけ書いてはみたけど、俺ならこんな書き方はしない
>>763 だって120秒前まではスライス代入なんて構文知らなかったから(笑
ラムダ式が使えるってさっき知った。
>>764 in-place にこだわらなければ内包表記ですか?
>>766 うん
というか、一見ワークを使ってないように見えて、こんなのが動くってことは
多分使ってるんじゃないかな
結局、わかりにくい上に遅くなるだけだと思う
文字列しか入っていないならfilter(len,a)でもいいな
あんまりワーク使うとかこだわらないな。 そもそも、そういうことにこだわるレベルのコード書くのににPython使わない。
>>769 確かにメモリが不足するほどの作業をPython使ってやるものじゃ
ないのかもしれませんね。ただ、自分はいままで C++ と Java
でやってた結構メモリを食う操作(大規模なグラフ構造の処理とか)
をやってみようと思ってたんで、逆にヒープ(ってPythonでも言う?)
が不足してOSからメモリを取得しようとしてページングもガリガリ
おき始める手前くらいまではメモリを使い切りたいって思ってます。
いましがたでっかい辞書とかリストを作りまくってみたら1.7GBくらい
メモリを消費したところでやばい気がしたのでpython.exeをきりました。
逆に「ここまでならメモリ使っていいよ」って上限をpython処理系に
最初から教えてあげるとかプログラム内から指定するってことは
できるんですかね。それは言語の仕様の外?あくまで言語としては
例外が投げられるよってところまで?
Windows Server系だと、リソースマネージャでその辺のリソース割り当てを 設定できるみたいだな
タブ区切りのレコードをパース仕様としていてはまった "".split("\t") って [""] なんだな。 "".split("\t") を [] と比較していたよ。 Python という言語とはあんまり関係ないかも試練が。
>>770 以下の不等式が成り立つならメモリをガッツリ爪
メモリの値段 < お前が考えている間の人件費
>>772 自然にsplit()を実装すれば当然そうなるし、自然な仕様だと思うよ
"a".split("\t") -> ["a"]
なんだから
"".split("\t") -> [""]
でしょう
>>772 >>> a=["","a|","","b|","c"]
>>> "".join(a).split() # 結合した文字列を list に変換する
['a|b|c']
>>> "".join(a).split('|')
['a', 'b', 'c']
>>> 'a'.split('\t') # tab separator
['a']
>>> 'a'.split() # listに変換する
['a']
>>> 'a'.split('')
ValueError: empty separator
空だとリスト変換と同値 list(S) == S.split() <= 何か便法っぽいかんじ
sepが渡されたら、区切ってリスト化する…
>>> 'a'.split('\t') # tab separator ['a'] >>> 'a'.split('b') ['a'] ただ単に、セパレートに失敗してるだけだ >>> 'a'.split('a') ['', ''] 正しいセパレート >>> 'aaa'.split('a') 分割 ['', '', '', ''] >>> 'katana'.split('a') 分割 ['k', 't', 'n', ''] >>> 'akasatana'.split('a') 分割 ['', 'k', 's', 't', 'n', '']
>>> "".split("\t") 分割失敗。塊は一つ [""] >>> 'a'.split('a') 分割成功。塊二つ ['', ''] 分割したら、その結果、いくつに分かれるかか… なんかよく考えてみるややこしいな
778 :
772 :2008/06/04(水) 16:28:03
ううむ、こんなにレスが付いてるとは。 まぁ当たり前の仕様といえばそうだけど。 split したものを join したら必ず元に戻るという保証はあるわけか。 ところで、UTF-8で円コーディングされてるJSON形式のデータって、 Pythonでもそのままパースできるよね?タブ区切りのデータ処理 できるようにしたら、JSON形式でも突っ込む予定ありだからよろしく って言われた。
ここまでならメモリ使っていいよって上限をpython処理系に 最初から教えてあげるとかプログラム内から指定するってことはできるんです
780 :
デフォルトの名無しさん :2008/06/04(水) 17:02:38
Pythonって{}な括弧はどんなところで使うの?
dictのリテラル(3.0ではsetも)
782 :
デフォルトの名無しさん :2008/06/04(水) 17:25:43
>>781 それだけっすか?
Pythonって記号が少ないですね。
>779 なにがしたいの? (それはOSの仕事だと思うヨ)
> なにがしたいの? (それはOSの仕事だと思うヨ) 779じゃないけど、ヒープが実メモリに収まっているうちにガベコレを走らせたい とかそういう需要はあるかと。ってもpythonだとリファレンスカウントか。
for i in xrange(1e100): hoge['hoge%d' % i] = 'fuga%d'
hoge = {} for j in xrange(10): for i in xrange(10**j): hoge['hoge%d' % i] = 'fuga%d' print j, len(hoge)
>>782 はおれがPythonを気に入った理由…
Rubyのbeginendも邪魔だけど Cの{}さえも邪魔とか
括弧が少ないのは慣れると思った以上に快適
明示的なlisp叩きですね、わかります
Lisp の括弧の色を薄くする設定のエディタもあったらしいが… 括弧なんて飾りです!
括弧が多いとほんと見辛い。 使ってると見慣れてくるもんなんだろうか。エディタで色分けしてるのかな。
793 :
デフォルトの名無しさん :2008/06/05(木) 16:37:02
Pythonのインデントってタブなの?スペースなの?
スペース4個
スペースだとインデント戻すのにBS4回押すのが面倒なのでタブ派
>>795 IDLE とか Emacs の Python モードならスペース4個のインデントを一括で入力したり削除したりできるよ。
タブ幅を4にする派
pythonの開発者は、google用コードがスペース2個、 オープンソース用コードがスペース4個、 タブを使ったコードは俺のコードじゃない、とか言ってたな。
799 :
デフォルトの名無しさん :2008/06/05(木) 20:22:19
boostのコーディング規約でも タブがスペース何個に相当するかまちまちだから いっそのことタブは使わないようにしたって書いていた
おっと3タプ同盟はスレ違いだ
世界中のプログラマがスペース2でコーディングしてくれたらいいのにな。
エンコードの指定つけたんだから、タブ幅の指定もつければいいのに。
802は自分でクソ言語つくればいいとおもうよ。
単なる色分け表示だけじゃなくて、入力補完もできるので 軽いエディタないかな?
>>802 Emacs の Python モードなら
# -*- coding: sjis; py-indent-offset: 2 -*-
とかすればオケ。IDLE では効かなかった。
まじ?ちょっとコンビニでEmacs買ってくる
python-mode使うならpymacsとpy-completeも入れるのオヌヌメ
xyzzyのpythonモード用lisp使ったら、 途中にコメント行があるとインデント うまく認識してくれんかったんだよな…
xyzzy の py-mode はエディタが固まるバグがあるから嫌い
試しにMeadowで開いてみたけど、"""の中で"を使っていると 色分けがおかしくなるなぁ。
>>813 「Plone又はZope環境で稼働するプログラム。」
↑が原因じゃない?
海外だとplone人気らしいけど、日本だとほとんど聞かないし。
>812 面倒だから " は偶数回使うことにしている
>>801 自分はそうしてる
千里の道も一歩から
千個のレスも一個から
自分で出来ることから始めるしかないと思う
俺はスペース四つだなn
emacsの時はスペース4つだが、 たまにviで小物をかき捨てるときはスペース1つ。
vimではexpandtabs指定、インデントはスペース4つ分だな まあ、vi系だとindent/dedentって^D,^Tや<<,>>でやるから あまり意識することは無いが vimじゃないviは最近使ったことが無いが、expand通しとかないと怪しいかな
スペース4つだと def や for が美しくなるんだぜ。
def hogehoge: for fugafuga in sinesine: hagehage def hogehoge: for fugafuga in sinesine: hagehage
def hogehoge: for fugafuga in sinesine: hagehage
なんで同じメソッドを何度も def するんだ www
単にスペースの比較だろ
おまえらプロポーショナルフォントでソース書いてる?
ソースはフォントまで気にする時代なのかw
826は時代を超越したバカ
そういえば「プログラミング言語C++」ではコードの部分が プロポーショナルフォントで書かれてたな
832 :
デフォルトの名無しさん :2008/06/07(土) 01:19:26
hoge = {'hage':5, 'fuga':3, 'shine':1} これを 5, 3, 1 の部分で sort して fuga = ['shine', 'fuga', 'hage'] みたいな出力を欲しいのですが sorted(hoge) で合ってるのでしょうか?
>>825 英文にContras、日本語はメイリオを同幅にしてるのを使っている。
×Contras ○Consolas
sorted(hoge, lambda x,y: x>y)
sorted(hoge)はsorted(hoge.keys())と同じになるんじゃない? >>> from operator import itemgetter >>> hoge = {'hage':5, 'fuga':3, 'shine':1} >>> map(itemgetter(0), sorted(hoge.iteritems(), key=itemgetter(1))) ['shine', 'fuga', 'hage']
>>> hoge = {'hage':5, 'fuga':3, 'shine':1} >>> sorted([(x,y) for x,y in hoge.iteritems()], lambda x,y: x[1]-y[1]) [('shine', 1), ('fuga', 3), ('hage', 5)] >>> hoge = {'hage':5, 'fuga':3, 'shine':4} >>> sorted([(x,y) for x,y in hoge.iteritems()], lambda x,y: x[1]-y[1]) [('fuga', 3), ('shine', 4), ('hage', 5)]
>>835 x>yでもx<yでも結果変わらないですorz
>>836 >>838 ありがとうございます
あとで値も使う予定だったので
これでよさそうです
>>> hoge = {'hage':5, 'fuga':3, 'shine':1}
>>> sorted(hoge.iteritems(), lambda x,y: x[1]-y[1])
[('shine', 1), ('fuga', 3), ('hage', 5)]
>>> hoge = {'hage':5, 'fuga':3, 'shine':4}
>>> sorted(hoge.iteritems(), lambda x,y: x[1]-y[1])
[('fuga', 3), ('shine', 4), ('hage', 5)]
>>839 それならこれでいいんじゃないの?
>>> hoge = {'hage':5, 'fuga':3, 'shine':1}
>>> sorted(hoge.iteritems(), key=itemgetter(1))
[('shine', 1), ('fuga', 3), ('hage', 5)]
>>> hoge = {'hage':5, 'fuga':3, 'shine':4}
>>> sorted(hoge.iteritems(), key=itemgetter(1))
[('fuga', 3), ('shine', 4), ('hage', 5)]
>>840 ありがとうございます
lambda の方が import 書かなくて良いのと他にも融通利きそうなので・・・
842 :
838 :2008/06/07(土) 02:24:37
>>> hoge = {'hage':5, 'fuga':3, 'shine':1}
>>> [x[0] for x in sorted(hoge.iteritems(), lambda x,y: x[1]-y[1])]
['shine', 'fuga', 'hage']
>>> hoge = {'hage':5, 'fuga':3, 'shine':4}
>>> [x[0] for x in sorted(hoge.iteritems(), lambda x,y: x[1]-y[1])]
['fuga', 'shine', 'hage']
のつもりで変なの上げてたw
なにやってんだ俺
>>839 lambdaより
>>836 >>840 の方が良いような気がする
理由はうまく説明出来ないけどw
>826やるなー。 馬鹿と賢い人が共存していて面白い。
self は全部 $ で書くと面白い
あのですねpytyonでcookielibつかってなんかクッキー処理してもらってるんだけど、 このクッキーってどっかに保存されてるの?
台所の棚の上
>>846 どのクラス使ってるのか知らんが、
saveメソッドを呼ばなきゃ保存されないと思う。
特に保存するような操作してなきゃ保存はされてないってことでいいのかな?
保存はされてる 不揮発デバイスへの
最近 graphviz (ネット構造etcを可視化して画像を生成するソフト)で 遊んでるんですが、書式を覚えるのが面倒で、やっぱPythonから 使えんかのう?と思ったわけです。graphvizをインストールした フォルダに"gv_test.py"があって、 import gv g = gv.digraph("G") n = gv.node(g,"hello") m = gv.node(g,"world") e = gv.edge(n,m) gv.layout(g, "dot") gv.render(g, "png", "gv_test.png") gv.rm(g) などと書いてあるんですが、gvというモジュールがあるんですかね? webで探してもさっぱり見つからんのですが、誰か知ってる人 いませんか?
find /usr/lib -name 'gv.py'
graphviz-python を入れるとか
libgv-pythonとかいう奴じゃないのかな
おぉありがとう でもwindows用のバイナリは無さそうな感じだ…
graphviz-2.18.tar.gz graphviz-working.tar.gz なんの問題もないと思うけど
857 :
デフォルトの名無しさん :2008/06/08(日) 09:37:24
俺も同じようなことしようとしてた。 Linuxでだけど。 Windows用のバイナリは無いのか
うちのPCの中にはある
include/graphviz/gv.cpp
tclpkg/gv
862 :
デフォルトの名無しさん :2008/06/08(日) 11:02:27
おまえら日曜の朝から元気だな
ビンビンです
868 :
デフォルトの名無しさん :2008/06/08(日) 11:33:40
gdgd
>>863 を取ってきて setup しろってことだろ
コンパイラ・・・
>> 812 最近の (22以降?) emacs に標準でついてくる python.el なら triple quoted string の色づけをきちんとしてくれるみたいだね. 個人的には python-mode.el の方がpdb の対応とかで便利だから 色づけ設定の部分だけ python.el からマージしたものを使ってる
>>863 VC Express か Windows SDK でコンパイルできるかなっ♪
>870 それぞれ全然別に作られてるってこと?
VC Express 2005 入ってるんだけど running install running build running build_py creating build creating build\lib.win32-2.5 creating build\lib.win32-2.5\pygraphviz copying pygraphviz\agraph.py -> build\lib.win32-2.5\pygraphviz copying pygraphviz\graphviz.py -> build\lib.win32-2.5\pygraphviz copying pygraphviz\release.py -> build\lib.win32-2.5\pygraphviz copying pygraphviz\__init__.py -> build\lib.win32-2.5\pygraphviz creating build\lib.win32-2.5\pygraphviz\tests copying pygraphviz\tests\test.py -> build\lib.win32-2.5\pygraphviz\tests copying pygraphviz\tests\__init__.py -> build\lib.win32-2.5\pygraphviz\tests copying pygraphviz\tests\attributes.txt -> build\lib.win32-2.5\pygraphviz\tests copying pygraphviz\tests\graph.txt -> build\lib.win32-2.5\pygraphviz\tests copying pygraphviz\tests\layout_draw.txt -> build\lib.win32-2.5\pygraphviz\tests running build_ext error: Python was built with Visual Studio 2003; extensions must be built with a compiler than can generate compatible binaries. Visual Studio 2003 was not found on this system. If you have Cygwin installed, you can try compiling with MingW32, by passing "-c mingw32" to setup.py.
>>871 だめだわ 後はまかせた orz
python setup.py build -c mingw32
library_path=C:/Program Files/Graphviz/lib
include_path=C:/Program Files/Graphviz/include/graphviz
running build
running build_py
running build_ext
building 'pygraphviz._graphviz' extension
C:\Program Files\CodeBlocks\bin\gcc.exe -mno-cygwin -mdll -O -Wall "-IC:/Program Files/Graphviz/include/graphviz" -IC:\Python25\include -IC:\Python25\PC -c pygraphviz/graphviz_wrap.c -o build\temp.win32-2.5\Release\pygraphviz\graphviz_wrap.o
writing build\temp.win32-2.5\Release\pygraphviz\_graphviz.def
Traceback (most recent call last): File "setup.py", line 171, in <module> package_data = package_data, File "C:\Python25\lib\distutils\core.py", line 151, in setup dist.run_commands() File "C:\Python25\lib\distutils\dist.py", line 974, in run_commands self.run_command(cmd) File "C:\Python25\lib\distutils\dist.py", line 994, in run_command cmd_obj.run() File "C:\Python25\lib\distutils\command\build.py", line 112, in run self.run_command(cmd_name) File "C:\Python25\lib\distutils\cmd.py", line 333, in run_command self.distribution.run_command(command) File "C:\Python25\lib\distutils\dist.py", line 994, in run_command cmd_obj.run() File "C:\Python25\lib\distutils\command\build_ext.py", line 290, in run self.build_extensions() File "C:\Python25\lib\distutils\command\build_ext.py", line 416, in build_extensions self.build_extension(ext) File "C:\Python25\lib\distutils\command\build_ext.py", line 513, in build_extension target_lang=language)
877 :
デフォルトの名無しさん :2008/06/08(日) 12:22:12
File "C:\Python25\lib\distutils\ccompiler.py", line 845, in link_shared_object extra_preargs, extra_postargs, build_temp, target_lang) File "C:\Python25\lib\distutils\cygwinccompiler.py", line 246, in link target_lang) File "C:\Python25\lib\distutils\unixccompiler.py", line 214, in link libraries) File "C:\Python25\lib\distutils\ccompiler.py", line 1242, in gen_lib_options opt = compiler.runtime_library_dir_option (dir) File "C:\Python25\lib\distutils\unixccompiler.py", line 278, in runtime_library_dir_option compiler = os.path.basename(sysconfig.get_config_var("CC")) File "C:\Python25\lib\ntpath.py", line 200, in basename return split(p)[1] File "C:\Python25\lib\ntpath.py", line 164, in split d, p = splitdrive(p) File "C:\Python25\lib\ntpath.py", line 119, in splitdrive if p[1:2] == ':': TypeError: 'NoneType' object is unsubscriptable
lxmlの最新版の2.0.6を入れてみて遊んでるんだが、 HTMLParserでtarget parserて使えないのかな class SimpleParserTarget(object): def __init__(self, element_factory=None, parser=None): pass def close(self): pass def comment(self, comment): pass def data(self, data): pass def start(self, tag, attrs, nsmap=None): pass def end(self, tag): pass こんなふうにビルダを作って(実際にはtreeをビルドせずに中身をdebug print するだけの奴を作ったのだけれど) mytarget = SimpleParserTarget() parser = lxml.etree.HTMLParser(target = mytarget) result = lxml.etree.parse(input, parser) とかやっても、パースの途中に途中でlxml.etree.XMLSyntaxErrorがraiseされてしまう target parserを指定しないで同じことをやるとうまくいくんだけど
879 :
878 :2008/06/08(日) 12:39:29
補足。 超短い入力だとtarget parser版も機能するみたいだったんだけど まともな文書を食わせたときに target parserを使わないケース(通常のTreeBuilderが使われてるケース)では 上手くいっても、カスタムtarget parser版だとエラーになったりするんだわ
880 :
878 :2008/06/08(日) 14:24:17
少しおっかけてみたけど、target parserを指定すると 内部でSaxParserContextを継承したTargetParserContextがParserContextとして 使われるのが原因くさい (多分)XMLとしてwell-formedでないと判定されるようなドキュメントだと TargetParserContext#handleParseResult()で落ちる Python側から弄れない部分だし、これはどうしようもないかなー
881 :
デフォルトの名無しさん :2008/06/08(日) 23:27:07
Python のマルチスレッド機能 (import threading) を使うと マルチスレッドなコードが Windows と Linux のどちらでも 動くようにポータブルに書けるのでしょうか?
>>881 まーそう。VMで動いてるのもあるし。
でもあくまでマルチスレッドなプログラミングモデルがつかえるだけで
アルチコアをフルに活用とかは期待しない方がいいよ。
883 :
デフォルトの名無しさん :2008/06/09(月) 03:11:19
タスクーに常駐するプログラムって、作れるんでしょうか?(スケジューラーなど) windowsやlinuxのAPIを直接たたかないとだめですかね? もしGUIライブラリの範囲で可能でしたら、どのライブラリならできるのかも教えていただきたいです。
タスクバーでした、すいません。
wxPythonならwx.TaskBarIconでできる
>>885 ほんとですか!?ありがとうございます!。ちょっと今日からやってみたいと思います。
python a5のソースの中に.bzrignoreがあったんだけどBazaarに移行する予定でもあるの?
,r‐ 、 z'Zr─〜''''彡 ̄ ̄⌒ミーv─ -tf'.z  ̄`'''''─ム/'⌒' ⌒ヽ_>'''  ̄ ̄ / 彡、 ノノ::: / _,;彡'´⌒(´ ミ}::: _/ フ:::: Y ヽ::: (⌒こ))≧::: jfう》:::  ̄:::::::::: (_ノ:::::: ::::::
WindowsのGUIのPython shellみたいに色が出たり、 このタイプ中にこのライブラリは、こういったものが扱えますと教えてくたれりするUNIX系のソフトって ありませんか? できれば、Xterm上でできるとうれしいんだけどなあ
xtermじゃ動かないけどKomodo IDEとかEric4とか。
pycomplete入れたけどM-tab押しても Symbol's function definition is void: py-symbol-near-point って言われてしまうんですがなぜですか?
>>894 vimを使っているんですが、vimでできますか?
>>894 891はエディタを聞いてるんじゃなくて、IDLEのことを言ってるんじゃないの?
っていうか、いま知ったけど、IDLEでソースの編集もできるんだな。
しばらくこれ使ってみるか。
アイドルって何?
IDLE M@STER
>>891 IDLE (Python GUI) は Linux 等でも動くよ。
901 :
デフォルトの名無しさん :2008/06/11(水) 08:01:40
IDLE ってエディタとして使いやすい? 自分は PyDev を使ってる. でも PyDev の補完がいまいちうまく働いてくれない. これって,import したモジュールを全部パースしまくって メンバとか推測しているの? でもメンバって動的に付け加えられるよね? 動かしてみなけりゃわからないよな.
IDLEは終了時のウィンドウ位置・サイズを記憶してくれないから使ってない。
>>896 python有効になってるvim7だとオムニ補完が使えるはず
pythonのファイルを開いてみて
s = "foo"
s.
まで打ってからC-X C-Oしてみ
正直もっさりしてて動作が軽快とは言いがたいから、あまり俺はつかわんけど
勿論C-Nによる前方参照補完とかはいつでも使える
>>> MULTI=''' ... 999. %(name)s %(year)d/%(month)d/%(day)d ... %(__name__)s ... ''' >>> for key in re.findall('%\((.*?)\)d', MULTI): ... print vars()[key] ... Traceback (most recent call last): File "<stdin>", line 2, in <module> KeyError: 'name)s %(year' どう書けば良いですか?否定の文字列クラスみたいなのが 書きたいです…
re.findall(r'%\(([^\(\)]*?)\)d', MULTI)
906 :
905 :2008/06/11(水) 17:31:55
r'%\((\w+)\)d'の方がいいかも
>>906 d
>>> MULTI='''
... %(no)d. %(name)s %(year)d/%(month)d/%(day)d
... %(__name__)s
... '''
>>>
>>> for key in re.findall('(?!.*s)%\((.*?)\)d', MULTI):
... print key
...
year
month
day
>>> for key in re.findall('%\((.*?)\)d', MULTI):
... print key
...
no
name)s %(year
month
day
KeyError: 'name)s %(year' だから
[^\(\)]*?でparenを弾くか、(\w+)で空白を弾くか
いう風に考えればいいと。thxっす
失礼します。 コマンドラインで動かしたときに、引数が入力されているか確認する方法について 聞きたいです。 下のソースは、コマンドラインで引数が入力されていれば判定時に"o"と入力され、 何も入力されていない場合は、初期値である0を入れ、判定時に"x"を 入力します。 # coding: utf-8 import getopt, sys def test(a=0): if a == 0: print "o" else: print "x" test(sys.argv[1]) 引数を入れないで実行して出たエラーは「list index out of range」 この条件で、引数に初期値を設定する方法はないでしょうか。 お願いします。
len(sys.argv)
>>908 入力? 文字のprintは普通、出力って言うだろ
>>908 sys.argv[1] を実行しても「list index out of range」とならないための条件は
len(sys.argv) が 2 以上のときだから
if len(sys.argv) == 2:
test(sys.argv[1])
else:
test()
のようにすればいいよ。
プログラムを書いていてエラーが起こったら、そのエラーが起こる理由を考えて
エラーを回避するための条件文を入れていくんだよ。
while True: (stdout, stdin, stderr) = popen2.popen3(cmd) lines = [re.sub('\r|\n', '', line) for line in stdout] line = '%s %s %s\n' % (lines[2], lines[0], lines[1]) print line, outf = open(log, 'ab+') outf.write(line) outf.close() time.sleep(300) あるコマンドを実行してその標準出力の内容の一部を 画面とログファイルに出力し続けるプログラムなのですが、 3〜4日目くらいに止まってしまいます。 Tracebackは line = '%s %s %s\n' % (lines[2], lines[0], lines[1]) IndexError: list index out of range です。 ガベコレを勝手に期待していたのですが、 whileの中だとだめとか、 何かcloseしないといけないものを忘れてるとか、 良く分からないのでご存知の方いらっしゃったら 止まらないようにする方法を教えてください。
>>913 stdout の内容が3行未満(lines の要素数が3未満)だから
> IndexError: list index out of range
となるのだと思われ。つまり cmd が想定外の出力を返している。
コマンドの出力の行数が足りなくなることはありえないの?
あー、言われてみればそうですね。 造って満足して実行させてたら 止まってたので原因を錯覚してました。 ありがとうございます。
Rubyと比較してPythonが優れているのはどんなところでしょうか?
ネイティブスレッド
ドキュメント
異教徒にも優しい
「恥ぱい」だけに、恥の上塗り。
923 :
デフォルトの名無しさん :2008/06/12(木) 11:13:24
Pythonの方がOSのネイティブの機能を使いやすいって思うんだけど それは単に俺がルビーでの扱い方に慣れて無いから?
ライブラリが揃っていること scipy,numpy等の数値計算周りが便利
>>917 PC初心者(英語圏の人)からプロまで扱えるように設計されている
だまされたと思って、「初めてのPython」を買って、勉強するよろし
>>917 Rubyと違って、プログラミング言語だ。
(Rubyはプログラミング言語っぽいオモチャ)
>>928 苦笑しながらGuidoはこう言った。
Ruby is just a toy, indeed.
糊言語として優秀
931 :
デフォルトの名無しさん :2008/06/12(木) 15:00:16
そのうちインデントじゃなくて括弧つかいますモードとか出ないかな
from __future__ import braces
やっぱり作者が痛くないという所が最大の違いだろうな
Rubyの作者がイタいみたいなこと言うなよ。Matzに失礼だぞ。
NetworkのライブラリまわりでPythonとRubyの比較情報とかどこかにない? Rubyで通信内容のdebuglevel設定とかできるようになったんかな?
ググるか、力技でやればいいんじゃないの?
とりあえず、プログラミングに不慣れなら、総当たりでいいんじゃないの?
>>946 さんの質問に答える事からはじまる
938 :
デフォルトの名無しさん :2008/06/12(木) 18:22:22
>>938 誤爆ついで、Pythonでこの問題を解いてみてください
環境は、問いません
※5分以内に組める人は、空気読んでください
941 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/12(木) 18:04:58
今日の課題がうまくいかなかったので、教えてほしいです。
課題は1から100までの素数をすべて求めるプログラムの作成です。
for文を使うのですが、よくわかりませんでした。ご返答よろしくお願いします。ちなみにLinuxで作成しなければいけません。
C言語なら俺に聞け(入門篇) Part 29
http://pc11.2ch.net/test/read.cgi/tech/1212329099/
っエラトステネスの篩
>>940 一般人がプログラムソースを読んだり、そのソースに手を加えたりしないでしょ
その必要性に迫れたときにいじるわけで、このくらいの敷居は、低いと思うよ
あとその敷居の高さはプログラミングの敷居の高さだと思うなあ
944 :
デフォルトの名無しさん :2008/06/12(木) 18:33:58
>>941 a = [2]
for i in xrange(3,100):
x = 0
f = False
while a[x]*a[x] < i:
if i%a[x]==0:
f = True
x += 1
if not f:
a.append(i)
print a
改行コードの問題忘れてた、無駄な改行スマソ
for i in xrange(3,101): じゃないの?
そうだね
>940 C++Primerのごつさには及ばん
>>942 そんなのあるんだね
初めて知った
手順は、なんとなくわかったけど、アルゴリズムで書ける自信がない
というか、944の方法か
義務教育受けてないのか?
ひょっとしたら、ゆとり教育で削られちゃったんじゃないの?
今すぐ行って借りてこい。
義務教育で習うっけ?
義務教育までなら受けた
PythonでWindowsでクライアント領域のハンドルを取得して そこに直接描画したり逆にそこの色の情報調べたり出来ますか?
959 :
デフォルトの名無しさん :2008/06/13(金) 08:22:26
素数の話ってゆとりでは出てこないのか・・・
一部のゆとりを叩いて精神安寧している方がよっぽどみじめだと思いますよ どうせ大して賢くないんでしょう
ゆとりをたたく奴をたたいて精神安寧している奴が居るわけだが。 2chに精神安定を求めるほど腐ってないよ。賢いし偉いし年収も高いから。
素数は習うがエラトステネスの篩は習わんだろ。
そういえば、エラトステネスの篩を実装するときに使うような
フラグの配列の初期化ってPythonだとどう実装するのが一般的?
俺が思いついたのは、こんな感じ。
a = map(lambda x: x == '0', '0'*100)
a = [True for x in range(0, 100)]
a = []; a[:] = itertools.repeat(True, 100)
>>944 while a[x]*a[x] <= i: にしないと素数の2乗の値も入ってしまう。
ところで、このwhileの部分をifilter使ってforで書き直すと、えらい遅くなるね。
100000まで計算させてwhileだと0.18秒、ifilterだと13秒かかる。
ifilter使った方がPythonらしいコードだけど、この速度差は厳しいな。
C-API で PyObject_Type テーブルをガリガリ書いてクラスAを宣言したとして、 同じく C-API 上でこのクラスA を継承したクラスBを定義する方法が解説しているページありませんか? 単にクラスを定義するだけなら標準ドキュメントを見ればすぐわかるけど、 別のクラスを継承するやりかたがよくわかりません。 速度が必要な部分なのでなるべくスクリプト側ではなくCで実装したいのです。。。
まちがえた PyObject_Type -> PyTypeObject
>>963 一般的かは知らんが、a=[True]*100 で済ます。
>>966 リストに対して乗算って使えたのか。知らなかった。
リストを同じ値で初期化するなら、これが一番綺麗か。
あと、963のa[:]のとこは、a=list(itertools.repeat(True, 100))の方がスッキリするね。
同じノリで [[True] * 100] * 100 とかするとハマるので注意。 あと963は range(0, 100) より range(100) が普通かと。
>>958 GUIライブラリは?
WindowsのAPIを直接使うなら「Win32API質問箱」で聞いて
win32api,ctypesで書いた方がいい
>>969 なるほど。同じ1次元のリストに対する参照が作られるだけなのか。
a=[[1]*5]*5
a[0][0]=0
ってやってみて理解した。
ググってみたけど、多次元のリストを簡単に初期化する方法はないみたいね。
素直にnumpyつかっとけばいいんじゃね import numpy a = numpy.ones((5,5),int) 0と1での初期化は専用の関数が用意されているが、それ以外の 値で初期化したいのなら、単に a = numpy.zeros((5,5),int) + 100 とかすればいい
>>970 なんとかなりそうです
ありがとうございました!
>>973 2次元以上の場合は * とリスト内包の組み合わせが一番簡単だと思う。
a = [[1] * 5 for i in range(5)]
リスト内包に表記をつけて「リスト内包表記」と書いてある例が 目につくけど、なんでわざわざ「表記」をつけるんだろうと思う。 書籍とかでも結構ある。訳語としておかしいと思うんだけど。 何でこんな変な訳が流行ったのか理由ご存知のかたいます? ちなみに英語ではList Comprehension。
構文糖なんて表記の上での違いしかないから
あ
失礼、ミスった ネット上には用例が少ないけど、set comprehensionの定訳が、集合の内包表記だったから。
そういうterminologyにいい訳を求めても仕方がない むしろ重要なのはその言葉が何を意味しているかはっきりと区別できるという言葉本来の役割である 従って、論文なり技術誌なりで最初に使われたそれらしい言葉がそのまま使われるというのはよくある話 理由は皆がいろいろな訳語を使うと紛らわしいから 技術的な側面を持っている以上、必要なのは言葉の綺麗さなどではなくuniqueである事
用語は日本語に訳せず英語のまま使いましょうって?
うん
一番いいと俺が思うのは専門用語は 日本語(英語) で書いてある奴かな
>>981 なるほど。ありがとう。
>>982 それはそうではあるけど、リスト内包"表記"が気持ち悪いんですよ
ね。まぁリスト内包でも普通に通じるから、自分でそういう表現使
うときにはちゃんと表記を削って書いて、周りにも強制するように
します。
そこまで気持ち悪いと思うんだったら英語で書けばいいと思うけどなぁ リスト内包という日本語自体も大概変な日本語だし
確かにList comprehensionがリスト内包になるのならわかるが、 リスト内包表記はないよな。どっから沸いてきたんだって感じ。 >表記
リスト内包を文字で表記するための構文なんだから全然問題ないと思うが
はやくpygameの和訳作業やれ屑ども
う
め
て
英語と日本語が1対1で対応するわけじゃないんだから、原語に無い言葉を 足してはいかんとは思わないな。「リスト内包」では日本語としておかしいし。 「内包表記」が良い訳だとは思わないけどね。 リスト内包構文くらいの方がいいかね。 そもそも、俺の辞書だと内包の意味だとuncountableとなっているが、 原文はList Comprehensionsと複数形だし、内包という訳も怪しい。
お
き
ま
リスト閉包式が正しい役だろJK
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。