全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50
Pythonのお勉強 Part 26

1デフォルトの名無しさん2008/04/29(火) 23:47:08
Python オフィシャルサイト
ttp://www.python.org/
ttp://www.python.org/doc/
日本Pythonユーザ会
ttp://www.python.jp/Zope/
ttp://www.python.jp/doc/
FrontPage - Pythonのお勉強
ttp://python.rdy.jp/
前スレ
http://pc11.2ch.net/test/read.cgi/tech//
◆関連スレッド
Microsoft IronPython 1.0
http://pc11.2ch.net/test/read.cgi/tech//
Python の宿題ここで答えます Part 1
http://pc11.2ch.net/test/read.cgi/tech//
Python Challengeをやろう!
http://pc11.2ch.net/test/read.cgi/tech//
Pythonについて(アンチ専用)
http://pc11.2ch.net/test/read.cgi/tech//
Pythonに見られるインデントによる制御構造の是非
http://pc11.2ch.net/test/read.cgi/tech//
pythonがこの先生きのこるには
http://pc11.2ch.net/test/read.cgi/tech//
Eclipse統合M24【Java/C/PHP/Ruby/Python/Perl】(PyDev)
http://pc11.2ch.net/test/read.cgi/tech//
【Perl,PHP】LLバトルロワイヤル2【Ruby,Python】
http://pc11.2ch.net/test/read.cgi/tech//
デザパタ + Python/Ruby/Smalltalk part2
http://pc11.2ch.net/test/read.cgi/tech//
2ch検索: [python]
http://find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python
2デフォルトの名無しさんsage2008/04/29(火) 23:47:59
>1
3デフォルトの名無しさんsage2008/04/29(火) 23:50:23
初めてのPython 第2版
4デフォルトの名無しさんsage2008/04/29(火) 23:53:00
     _
  -「 ̄  |
  | |   |    なんかバギしたら>>1乙でた
 || +|              ありえん(笑)
  .L ‐--‐'ヽ
 |l リV _`   ≡乙
  |cl | ´ヮ ノ/
  .l レ l |
  / | +|
5デフォルトの名無しさんsage2008/04/29(火) 23:53:45
関連書籍
ttp://python.rdy.jp/wiki.cgi?page=%B4%D8%CF%A2%BF%DE%BD%F1
6デフォルトの名無しさんsage2008/04/30(水) 02:49:36
日本語対応における注意点のようなもの
ttp://python.rdy.jp/wiki.cgi?page=%C6%FC%CB%DC%B8%EC
7デフォルトの名無しさんsage2008/04/30(水) 18:39:57
前スレ>>998
2.5ならカリー化できるみたいよ、
http://d.hatena.ne.jp/kei10in/20080408/
8デフォルトの名無しさんsage2008/04/30(水) 20:29:06
くだすれPython(超初心者用)
http://pc11.2ch.net/test/read.cgi/tech//
9デフォルトの名無しさんsage2008/04/30(水) 21:52:34
【pygame】pythonでゲーム製作【ぱいがめ】
http://pc11.2ch.net/test/read.cgi/gamedev//
10デフォルトの名無しさん2008/04/30(水) 22:44:25
自分の環境で利用できるモジュールの一覧を取得する方法ってありますか?
11デフォルトの名無しさんsage2008/04/30(水) 23:15:16
pkgutil.iter_modules
12デフォルトの名無しさんsage2008/05/01(木) 02:27:16
>>11
ありがと、ちょう便利。
13デフォルトの名無しさんsage2008/05/01(木) 11:14:25
20行程度のコードでクラス作るやつってなんなの?変態?
14デフォルトの名無しさんsage2008/05/01(木) 12:08:38
継承してるんだとすればそんなの当たり前だろ
15デフォルトの名無しさんsage2008/05/01(木) 12:47:35
>>13
なんともいえない。20行程度なら全ソースを貼ってみ。
16デフォルトの名無しさんsage2008/05/01(木) 13:02:04
>>15
お前がやってみろゴミクズが
17デフォルトの名無しさんsage2008/05/01(木) 13:13:06
ポカーン....
18デフォルトの名無しさんsage2008/05/01(木) 13:14:23
切り返しになって無さ過ぎて、煽りとしても成立してないぞ。
何を見て>>13を書いたのか、君の目撃例を出してみれって話だろう。
君が何を見て言っているのかの提示を、どうやって君の話し相手が「やる」んだ?
19デフォルトの名無しさんsage2008/05/01(木) 13:48:09
自己解決しました。
20デフォルトの名無しさんsage2008/05/01(木) 14:11:15
若い人はちょっとしたコメントにも全身全霊で反応してくれるので楽しいですの〜
21デフォルトの名無しさんsage2008/05/01(木) 14:15:19
オッサンは下水に流れてフナの餌にでもなれ。
22デフォルトの名無しさんsage2008/05/01(木) 14:49:37
20行程度貼るのを、そこまで拒否せんでもねえ。
23デフォルトの名無しさんsage2008/05/01(木) 15:20:35
1関数500行以上、

っていうヘンテコルールが弊社に存在します
24デフォルトの名無しさんsage2008/05/01(木) 15:28:51
自己解決禁止
25デフォルトの名無しさんsage2008/05/01(木) 15:31:13
他者解決しました。
26デフォルトの名無しさんsage2008/05/01(木) 16:24:42
イケメンハッカーが解決しました。
27デフォルトの名無しさんsage2008/05/01(木) 16:35:38
解決禁止
28デフォルトの名無しさんsage2008/05/01(木) 16:42:50
自決しました。
29デフォルトの名無しさんsage2008/05/01(木) 17:23:20
墓穴しました
30デフォルトの名無しさんsage2008/05/01(木) 17:43:53
アナルを開発しました。
31デフォルトの名無しさんsage2008/05/01(木) 18:07:12
ほんとにpythonの勉強をしている人達の掲示板とか、有りますか?
32デフォルトの名無しさんsage2008/05/01(木) 18:40:07
>>31
このスレの住人がPython勉強してないみたいなこと言うな自己解決しました。
33デフォルトの名無しさんsage2008/05/01(木) 19:01:45
ここは雑談スレ
本スレはあっち
34デフォルトの名無しさんsage2008/05/01(木) 19:35:12
hello = ["Hello", "こんにちわ", "Здравствуйте", "Buongiorno", "Bonjour"]

みたいなデータを
hello['e'], hello['j'], hello['r'], hello['i'], hello['f']

みたいにアクセスするにはどうしたら良いでショッカー
35デフォルトの名無しさんsage2008/05/01(木) 19:53:37
近所の本屋に jython 本が入荷してあった。
ちゃんと import になってたぞ。残念な気分になった。
36デフォルトの名無しさんsage2008/05/01(木) 19:55:51
>>35
>ちゃんと import になってたぞ

じゃあ買うのよすわ
37デフォルトの名無しさんsage2008/05/01(木) 19:56:19
工エエェェ(´д`)ェェエエ工
38デフォルトの名無しさんsage2008/05/01(木) 20:02:33
imprtの方は希少価値がついたな
39デフォルトの名無しさんsage2008/05/01(木) 20:03:56
>>35
イケメンハッカーは神になりそこねたと思うよ.
40デフォルトの名無しさんsage2008/05/01(木) 20:13:52
>>35
自己解決したんですね。
41デフォルトの名無しさんsage2008/05/01(木) 20:19:27
>>34について、興味がわいたので、
class hoge(list):
  def __getitem__(self,x):
    if x == 'e':
      return self[0]

としても、リストのインデクス0番目が帰ってこない。
print x及びprint type(x)とすると、
入力した値とと帰ってくるんだが、どういう現象?
42デフォルトの名無しさんsage2008/05/01(木) 20:27:16
なんで突然レス途切れるんだよ orz
43デフォルトの名無しさんsage2008/05/01(木) 20:29:00
>>41
self[0]を使うとhoge.__getitem__がもう一度呼ばれるので
return list.__getitem__(self, 0)じゃないと駄目

>>34は普通に辞書を作った方がいいと思うが
44デフォルトの名無しさんsage2008/05/01(木) 20:29:49
>>43
馬鹿な俺に答えだしてくれてありがとう
45デフォルトの名無しさんsage2008/05/01(木) 20:32:10
非結合メソッドの扱いかただね、
勉強不足すぎるわ俺
46デフォルトの名無しさんsage2008/05/01(木) 20:45:08
>>34
hello = {'e': 'Hello', 'j': 'こんにちわ', 'r': 'Здравствуйте', 'i': 'Buongiorno', 'f': 'Bonjour'}
47デフォルトの名無しさんsage2008/05/01(木) 20:53:06
>>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リスト (データ)

こんなかんじやね。じこかいけつしました
48デフォルトの名無しさんsage2008/05/01(木) 20:56:05
>>47
dictizeを用意しなくてもdict(zip(idx,hello))で辞書化できるよ
49デフォルトの名無しさんsage2008/05/01(木) 21:00:22
辞書化いけつしました
50デフォルトの名無しさんsage2008/05/01(木) 21:01:31
>>13
部品ぽいクラスだったら10行以内とかでも普通。
その辺に転がってるモジュールの中にいくらでも例がある。
要はどういうデータの束に名前を付けるかって言うだけの話なので、
小さいところに名前付けたらクラスも小さくなる
クラス=なんか大物
と思ってる人は、勉強した本が悪い
51デフォルトの名無しさんsage2008/05/01(木) 23:30:23
perl の pmsetup みたいな egg プロジェクトの雛形を作成するスクリプトってありませんか?
52デフォルトの名無しさんsage2008/05/01(木) 23:39:00
イスパニア語でおk
53デフォルトの名無しさんsage2008/05/01(木) 23:40:25
?el pmsetup del perl Como el huevo no Est? all? cualquier escritura que crea el formulario de un proyecto?
54デフォルトの名無しさんsage2008/05/01(木) 23:45:23
It was possible to solve it for myself.
55デフォルトの名無しさんsage2008/05/01(木) 23:50:41
我其解決自己的
56デフォルトの名無しさんsage2008/05/01(木) 23:53:21
>>54
It impossible for native English speaker to understand such a terrible English.
57デフォルトの名無しさんsage2008/05/02(金) 00:02:26
>>> x = 'global'
>>> def f():
...   print x
...
>>> f()
global
>>> def f2():
...   print x
...   x = 'local'
...
>>> f2()
Traceback (most recent call last):
  File "", line 1, in ?
  File "", line 2, in f2
UnboundLocalError: local variable 'x' referenced before assignment

ってなるのは何故?
58デフォルトの名無しさんsage2008/05/02(金) 00:06:13
そういうもん。f2()のxは代入があるからローカル変数だと判断したんだろ。
59デフォルトの名無しさんsage2008/05/02(金) 00:46:28
>>56
Why didn't you use a verb in your sentense?
60デフォルトの名無しさんsage2008/05/02(金) 02:27:16
>>57
f2()内でglobalとして扱うなら、print x の前にglobal x とか入れるんじゃないかな。
61デフォルトの名無しさんsage2008/05/02(金) 03:34:58
MLのStackless Pythonの内容は酷い
62デフォルトの名無しさんsage2008/05/02(金) 04:28:51
長文ヌルーしてた…
63デフォルトの名無しさんsage2008/05/02(金) 06:37:46
関数内のローカル変数が
同名のグローバル変数を隠蔽しちゃうってやつだね
JavaScriptも似たような挙動だった気がする

初めてのPythonにはみっちり書いてあったはずから
参照できる人は見てみるのもいいかも
64デフォルトの名無しさんsage2008/05/02(金) 08:21:24
まともな入門書であればたいてい書いてある
65デフォルトの名無しさんsage2008/05/02(金) 08:43:42
書いてある本ものすごく少なそうなんですが
66デフォルトの名無しさんsage2008/05/02(金) 08:55:35
まともな入門書が少ないってことだね。
ちなみに「初めてのPython」はマルチバイト文字列の扱いについてまったく触れてないので、
「まともな入門書」に入りません。
67デフォルトの名無しさんsage2008/05/02(金) 09:15:07
そこでJython本ですよ
68デフォルトの名無しさんsage2008/05/02(金) 09:29:03
>>67
このスレ的にはどうなの?>Jython本
読んだ人感想プリーズ
ネットで読めるのは宗教っぽい妄信的な書評ばっかりで正直キモいと思っているんだが(www
69デフォルトの名無しさんsage2008/05/02(金) 10:20:29
民Pyにつづいてそれもか
70デフォルトの名無しさんsage2008/05/02(金) 10:28:51
宗教っぽいってこれ?
ttp://yoshiori.org/blog/2008/04/jython.php

確かにキモい(www
ていうかこのスレでnishioさんを「天才」とか「イケメン」とか言ってるやつってこいつじゃね?(wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
71デフォルトの名無しさんsage2008/05/02(金) 10:30:20
やんわりと褒めるぐらいなら一般的な対応だけど
これはないわwwww
72デフォルトの名無しさんsage2008/05/02(金) 10:33:43
>>70
無色のネラーだからしょうがないよ(W
73デフォルトの名無しさんsage2008/05/02(金) 11:19:55
アニキ?

アッーー!
74デフォルトの名無しさんsage2008/05/02(金) 12:06:04
>stackless python でも「RuntimeError: maximum recursion depth exceeded」が発生します。
この人は何がしたいんだwwwwwwwwwwwwww
75デフォルトの名無しさんsage2008/05/02(金) 12:33:42
スタックがない=再帰やり放題じゃね?フィボナッチ数列が美しくかけるんじゃね?
76デフォルトの名無しさんsage2008/05/02(金) 20:05:06
予約した
imprtに期待age
77デフォルトの名無しさんsage2008/05/03(土) 17:52:49
http://jp.rubyist.net/magazine/?0003-uva
>ちなみに python 2.3 で末尾再帰版 fact を計算したところ、
>n = 900 までは計算でき、 n = 1000 でスタックが溢れた。

これって本当?
1000でスタックが溢れたら大問題だと思うけど
78デフォルトの名無しさんsage2008/05/03(土) 18:07:35
Py_DEFAULT_RECURSION_LIMITが1000だから当たり前
sys.setrecursionlimitで変更も可能
79デフォルトの名無しさんsage2008/05/03(土) 18:10:05
>>78
それはスタック溢れとは言わないだろ。
80デフォルトの名無しさんsage2008/05/03(土) 18:39:44
>>79
>>77の記事を書いた人に言ってあげなよ
81デフォルトの名無しさんsage2008/05/03(土) 18:46:51
うへえ、そういう調査もせずに「あふれた」って書いちゃうのか
82デフォルトの名無しさんsage2008/05/03(土) 18:53:05
2 つのプログラムの同一仕様検査の難しさ
83デフォルトの名無しさんsage2008/05/03(土) 19:31:58
Python2.3.5(2005-02-08リリース)の頃は
エラーメッセージが違うのかなと思って実行してみたけど、

 RuntimeError: maximum recursion depth exceeded

と表示された。
84デフォルトの名無しさんsage2008/05/03(土) 19:32:08
rubyistはエラーメッセージ読まないのん?
85デフォルトの名無しさんsage2008/05/03(土) 19:43:21
処理系を信頼してないんだろ
86デフォルトの名無しさんsage2008/05/03(土) 19:57:34
>>84
奴らは英語ができない情報ニート
87デフォルトの名無しさんsage2008/05/03(土) 20:13:31
RuntimeError: maximum recursion depth exceeded

これを見た上で「あふれた」と言ったのか?
88デフォルトの名無しさんsage2008/05/03(土) 20:50:26
>>87
もしかしたら1000に達する前にMemoryError: stack overflowが出たのかもしれない。
89デフォルトの名無しさんsage2008/05/03(土) 22:37:54
んな小さとこで出るわけない
90デフォルトの名無しさんsage2008/05/03(土) 22:52:31
数字が一致していることからしてもRuntimeErrorのほうだろうな
91デフォルトの名無しさんsage2008/05/03(土) 23:17:05
モジュール名大改造PEPが更新
http://www.python.org/dev/peps/pep-3108
92デフォルトの名無しさんsage2008/05/03(土) 23:17:44
「スタックが溢れた」と言っても差し支えないんじゃね?
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に同意。
93デフォルトの名無しさんsage2008/05/04(日) 06:52:48
limitを超えたんだから
あふれた
でいいと思う
94デフォルトの名無しさんsage2008/05/04(日) 13:46:59
どれぐらい末尾再帰ができるかどうかを調べているんだから
setrecursionlimitで値を変更するべきだと思うけど
95デフォルトの名無しさんsage2008/05/04(日) 13:49:57
あくまで limit を越えたのはスタック容量じゃなくて再帰回数だから
溢れたとは言わないだろうな。
96デフォルトの名無しさんsage2008/05/04(日) 14:13:36
お前ら、こういう話題が好きだったのか?
97デフォルトの名無しさんsage2008/05/04(日) 14:24:47
処理系での末尾再帰最適化って、そんなに難しいのかな...
なんかちょっと頭のいい人ならすぐできそうな気もするんだが...
(まぁ、俺には難しいんだが...)
98デフォルトの名無しさんsage2008/05/04(日) 14:28:38
まともな処理系なら JIT っぽいことしてると思ってるんだけど
(中間言語へのコンパイルかもしれないが)、
末尾再帰最適化を採用する事で
どれだけ JIT コンパイルのコストに影響が出るんだろうか。
99デフォルトの名無しさんsage2008/05/04(日) 14:47:23
「この回数再帰したら止めてね」という設定値を越えたから止めただけなんだから、
溢れたとは言わないな。「limitに達した」じゃないかな。
100デフォルトの名無しさんsage2008/05/04(日) 14:50:16
>>97
こんなの見つけた
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/474088
101デフォルトの名無しさんsage2008/05/04(日) 15:04:56
>>97
言語仕様と下位層による。
Rubyのブロック引数みたいなへんな言語仕様があると面倒だし、
末尾呼び出し最適化を考慮したスタックフレームを持つ機械の機械語や
そのような仮想機械へのコンパイルなら楽。
102デフォルトの名無しさんsage2008/05/04(日) 15:29:59
もはや言葉遊びですね^^
103デフォルトの名無しさんsage2008/05/04(日) 16:19:33


面白いのを見つけました。でもPythonで書き直すには
どうしたら良いかわかりません…orz

upload.cgi を python で書き直すとしたら
どう書いたら良いでしょうか?どうぞよろしくお願いします.
104デフォルトの名無しさんsage2008/05/04(日) 16:54:21
細川wwww
105103sage2008/05/04(日) 16:55:34
dbm = SDBM.open('db/id',0644)
dbm[hash] = id
dbm.close

このへん、わけわからん orz
106デフォルトの名無しさんsage2008/05/04(日) 17:03:55
>>105
107103sage2008/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 とか三種類くらいありました。
108デフォルトの名無しさんsage2008/05/04(日) 20:13:52
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側の部分を書いてみたのですが
うまく行きません…どう書いたら良いでしょうか?
109デフォルトの名無しさんsage2008/05/04(日) 20:17:01
>>108
その upload_py.cgi の方に問題があるんじゃないの?
110デフォルトの名無しさんsage2008/05/04(日) 20:17:46
参考にしてるところがPython2.3.5用だから古くない?
111デフォルトの名無しさんsage2008/05/04(日) 20:30:41
>>110
それはないと思われ。
112デフォルトの名無しさんsage2008/05/04(日) 20:58:44
>>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
113103sage2008/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'

上手くいきますた!
114103sage2008/05/04(日) 21:18:52
data = < --#{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する場合はこの書式に沿って
組み立てないと駄目なのですか?
115デフォルトの名無しさんsage2008/05/04(日) 22:49:23
スレ違いっつーか板違いだ
116デフォルトの名無しさんsage2008/05/04(日) 23:22:17
お前は黙ってろ
117デフォルトの名無しさんsage2008/05/04(日) 23:27:57
内容的にWebProg板だな
118デフォルトの名無しさん2008/05/05(月) 01:02:08
103を見て絵に描いたような教えて君かと思ったが意外にガッツあるな。期待age。

>>112
302はリダイレクトだよ。レスポンスのLocation:ヘッダに次に読むべきURLが示されている。
詳しくはHTTPの仕様書を読むべし。

>>114
そんな希ガス。ググったら同じ質問をしている使徒を見つけた。一番下にコード例あり。
http://www.velocityreviews.com/forums/t335298-multipartformdata-in-an-http-client.html
emailモジュールにもマルチパートのメッセージを作る機能があった希ガス。
http://docs.python.org/lib/module-email.mime.text.html
この辺を参照のこと。
119デフォルトの名無しさんsage2008/05/05(月) 13:01:33
水曜日に最後のアルファ
120デフォルトの名無しさんsage2008/05/05(月) 13:23:29
chinpo
121デフォルトの名無しさんsage2008/05/05(月) 14:02:41
pythonをやろうと思ってるのだけど、入門には「みんなのpython」と「pythonプログラミング入門」どっちがいいかな?
プログラム自体は初めてじゃないです。
122デフォルトの名無しさんsage2008/05/05(月) 14:08:07
プログラム経験あるならネットのドキュメントだけで十分
本買うのが好きなら自分で手にとって選ぶのも好きになれ!
123デフォルトの名無しさんsage2008/05/05(月) 14:42:19
python plograming language和訳まだー
124デフォルトの名無しさんsage2008/05/05(月) 14:53:30
>>122
THANK YOU!!
基礎は書籍でしっかりやりたいから、自分で見てかうことにするよ
125デフォルトの名無しさんsage2008/05/05(月) 15:13:32
基礎からやりたいのならみんPyじゃね?
もう一つの方は流しすぎ

まあ自分で中身見て選ぶのが一番だけどな。
126デフォルトの名無しさんsage2008/05/05(月) 15:56:10
基礎だけ学びたいなら最近でたJythonの本でいいと思うよ
127デフォルトの名無しさんsage2008/05/05(月) 15:57:58
それはないわ(w
128デフォルトの名無しさんsage2008/05/05(月) 16:51:36
neet山
129デフォルトの名無しさんsage2008/05/05(月) 17:59:55
プログラミング経験者があえて書籍で入門するなら
初めてのPythonくらいの内容がないと無駄遣いに終わると思う
130デフォルトの名無しさんsage2008/05/05(月) 18:08:03
選択肢なんでほとんどないんだから、
立ち読みして比べりゃいいじゃん。
131デフォルトの名無しさんsage2008/05/05(月) 18:18:37
Jython本を買えば間違いは無い。正しくも無い。
132デフォルトの名無しさんsage2008/05/05(月) 18:39:50
プログラムしたことがあるのであればWebのチュートリアル読めばすむ話のような気がする
そんなに複雑じゃあない
本家のチュートリアルが読めるのであればなおよい
133デフォルトの名無しさんsage2008/05/05(月) 19:25:00
だから、本を買いたいんだろ。
だったらJython本しか無い。
134デフォルトの名無しさんsage2008/05/05(月) 20:24:53
俺も最初は本よりチュートリアルの方が良いと思う。
まず使えるようになることに焦点が合ってるし、内容に間違いが少ないから一番確実。
135デフォルトの名無しさんsage2008/05/05(月) 20:38:55
テストサーバ動かして python の cgi 動かしたいんだけど、Leopard の apache2 に mod_python 入れた人いる?
それとも素直に CGIHTTPServer.CGIHTTPRequestHandler つかってテストに使った方がいいかね。
136デフォルトの名無しさんsage2008/05/05(月) 21:12:20
>>135
MacPortsつかえばすぐ入るんじゃね?
137デフォルトの名無しさんsage2008/05/05(月) 21:19:44
>>135
Leopard の Apache2 でハマったばかりなんで、晒しとく。
http://pc11.2ch.net/test/read.cgi/mac//683-693
洩れは結局 i386 な Apache2 を入れ直した。
138デフォルトの名無しさんsage2008/05/05(月) 21:40:17
Jython本買ってきました。
クソでした。
理由は言うまでもない。
139デフォルトの名無しさんsage2008/05/05(月) 21:42:25
言わないと工作としか思えないわ。
140デフォルトの名無しさんsage2008/05/05(月) 21:44:12
ぶっちゃけ作りが雑な気がするんだが>Jython本
図とか表とかほとんどないし。
文章ばっかり。
内容もあまりぱっとしないよねぇ...。
141デフォルトの名無しさんsage2008/05/05(月) 22:00:55
今出ている本って内容が古すぎたり中途半端だったりであまりおすすめできるものってないような。
何か作りながらチュートリアルかリファレンスを参照するのが効率的かもね。
142デフォルトの名無しさんsage2008/05/05(月) 22:58:22
Jython本はコードが見難いね、説明してるのがどれだかわかりにくい
編集がちょっと丁寧な仕事すればだいぶ違ったと思う
内容的には初心者な俺には勉強になってる
でも中途半端だな、対象読者一体どこだよ、とは思った
Python全然知らないときつくないか?Javaも結構知ってないときつくないか?
143デフォルトの名無しさんsage2008/05/05(月) 23:13:50
Jython本の執筆者のtwitter読むと解るけど、かなりの突貫執筆だったようだ。
あの若さでこれだけの仕事したんだから、まあ認めてやってもいいんじゃないか?
144デフォルトの名無しさんsage2008/05/05(月) 23:20:51
イケメンハッカー信者はもういいよ
145デフォルトの名無しさんsage2008/05/05(月) 23:22:23
本買う人にとっては執筆に至る経緯なんて関係ないしなぁ
146デフォルトの名無しさんsage2008/05/05(月) 23:24:27
まあ信者も認めるほどの出来だってことだよ。
147デフォルトの名無しさんsage2008/05/06(火) 00:09:57
宗教論はもういいよ。イケメンハッカーの話はyosoでやれ。
148デフォルトの名無しさんsage2008/05/06(火) 06:21:33
粗悪本乱発しすぎ
149デフォルトの名無しさんsage2008/05/06(火) 06:40:46
Jython本ほど最高の本は無いよ。
書いてあることがスラスラと頭の中に入ってきて、
まるでコードが踊ってるみたい。
びっくりするようなイノベーションも体験できて、
いいと思うんだけどなあ。

最新の本だから最新のことが載っていて安心だし。
150デフォルトの名無しさんsage2008/05/06(火) 06:42:36
さっき読んでたらすぐ眠たくなって寝てしまったが
151150sage2008/05/06(火) 06:48:52
でも、起きてからすらすらと本の内容が浮かんできたな
152デフォルトの名無しさんsage2008/05/06(火) 07:50:20
今知ったんだが、彼って自分のことイケメンなんぞと言ってるんだ!
153デフォルトの名無しさんsage2008/05/06(火) 07:56:24
IKEMEN
154デフォルトの名無しさんsage2008/05/06(火) 08:36:13
流れが意味不
155デフォルトの名無しさんsage2008/05/06(火) 09:37:43
stackless pythonとpsycoは共存できないんだな。
残念だ。
156135sage2008/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
なんて良いタイミング!参考にしてみるよ
157デフォルトの名無しさんsage2008/05/06(火) 17:26:02
Webのチュートリアルは日本語の品質がいまいちな部分がない?

結局は英語にあたらないと意味が取れない事がよくある。

書籍のチュートリアルの方が日本語がいいし、読みたいところに
すぐ飛べるのでいいと思う。

他言語経験者なら、これ読めばある程度できるようになるんじゃ
ない?
158デフォルトの名無しさんsage2008/05/06(火) 17:32:25
他言語経験者なら普通に公式チュートリアルでいいだろ
ねえなんで本買わせようとすんの?
159デフォルトの名無しさんsage2008/05/06(火) 18:02:06
本のほうが読みやすいから
160デフォルトの名無しさんsage2008/05/06(火) 18:34:16
Webの方がコピペできていい
161デフォルトの名無しさんsage2008/05/06(火) 19:06:39
本が欲しいと言っているから。
162デフォルトの名無しさんsage2008/05/06(火) 19:25:07
検索できる分デジタル版の方がいいけどね

でもチュートリアルの日本語書籍版はチュートリアルの読み方の部分が秀逸なので
立ち読みだけでもしておくといいよ
163デフォルトの名無しさんsage2008/05/06(火) 19:31:36
>>157
> Webのチュートリアルは日本語の品質がいまいちな部分がない?
>
> 結局は英語にあたらないと意味が取れない事がよくある。

ここなり翻訳者宛のメールなりで問題点を具体的に報告すれば改善されると思われ。
164デフォルトの名無しさんsage2008/05/06(火) 19:33:08
いま >163 がとてもいいことを言った。
165デフォルトの名無しさんsage2008/05/06(火) 19:41:13
本を買って欲しいから。
166157sage2008/05/06(火) 19:48:43
>163がとてもいいこと言ったと思います。

翻訳者あてのメールは敷居が高くても、ここになら書けるなぁと思った。
(でも私は書籍版買っちゃったから今後はWeb版読みに行く事は中々
ないはず)

167デフォルトの名無しさんsage2008/05/06(火) 20:08:55
>>158
俺は他言語経験者で、公式チュートリアルで入門したけど本も買って勉強したよ。
Mark Lutz の Programming Python の第1版の原著を買った(確か当時は和書が1つもなかった)。
理由は「書籍から入手できる情報」≠「オンラインで入手できる情報」だから。
あと、1冊まるまる最初から最後まできちんと勉強することで「やり終えた!」という充実感があった。
これは結構重要なポイントのような気がする。
絶対本を買うべきだとは思わない。買いたい人は買えばいいと思われ。

ちなみに上記の本には誤植が多かったので読み進めるのと並行して全部メモしておいた。
読み終えたあとにまとめて Mark Lutz に報告したらオライリーの担当者からお礼のメールが来て
オライリーの本から好きなのを1冊プレゼントすると言われた。そんなの初めての経験だったから
意味が分からなくて「お金払わなくていいの?」とか聞いちゃったりして(無論無料で送ってくれた)。
168デフォルトの名無しさんsage2008/05/06(火) 21:29:18
これはいい話
169デフォルトの名無しさんsage2008/05/06(火) 21:31:30
threadって計算速度の向上に効果ある?
a = b1 + b2の計算を(a,b1,b2はarray)
b1とb2をthreadで計算して,
それぞれ計算終了後に足すというプログラムを作ったんだけど,
普通にb1とb2をメインスレッドで順番に求めて足した方が早かった...

ちなみにb1とb2の計算はダミーのforループ10000回です.
170デフォルトの名無しさんsage2008/05/06(火) 21:43:49
>>169
ダミーループのような、単純処理を連続的に行う場合は、threadのメリットは少ないと思われ。
有り難味があるケースは、
・入力待ちの間に、他の処理をさせておきたい
・ネットワークを表現する際に、各処理を独立のモジュールみたいに動かしたい
など。
171デフォルトの名無しさんsage2008/05/06(火) 21:45:50
>>167

第3版が手元にあるけど1552ページある。このサイズをまるまる勉強したとし
たら、尊敬します。すげー。

172デフォルトの名無しさん2008/05/06(火) 22:39:53
>>170
なる。やっぱりそんな気はしてた。。。
サンクス
173デフォルトの名無しさんsage2008/05/06(火) 22:49:58
>>171
そんなにあったっけと思って書誌情報を確認したら第1版は902ページだった。
174デフォルトの名無しさんsage2008/05/06(火) 23:13:06
>>169
マルチコアの場合は、計算スレッドを複数に分けてやると速くなったりする

あと計算規模が小さいとスレッドの生成・破棄のコストのせいで
高速化の効果が見えないよ
175Free Tibetsage2008/05/06(火) 23:57:15
>>167
オライリー信者乙
176デフォルトの名無しさんsage2008/05/07(水) 00:20:38
>>175
そんな、人類の足引っ張ることしかできない悲しい奴みたいな言い方しないで
前向きに行きましょうよ。
177デフォルトの名無しさんsage2008/05/07(水) 00:24:08
「きさま、マック信者だな?」
178デフォルトの名無しさんsage2008/05/07(水) 00:25:34
「きみはゆくえふめいになっていたマックじゃないか」
179デフォルトの名無しさんsage2008/05/07(水) 08:13:21
>>169
JythonやIronPythonだと速くなるかも知れない。
CPythonだと複数スレッドを同時に動かせないんで速くならない
180デフォルトの名無しさんsage2008/05/07(水) 11:57:52
Python絡みで信頼のおける日本人って
柴田さんしか居ない状況?
他の人ってあっちの人と話したことないよね
181デフォルトの名無しさんsage2008/05/07(水) 12:01:59
>>180
んなこたあない
もっと偉い人はいる
多くはないけど
182デフォルトの名無しさんsage2008/05/07(水) 12:02:11
>>180
あっちの人と話したことがある=Python絡みで信頼のおける日本人
と言う事ならmatz
183デフォルトの名無しさんsage2008/05/07(水) 12:04:01
多くの日本人Pythonistaは引きこもり
184デフォルトの名無しさんsage2008/05/07(水) 12:04:28
柴田さんは信頼できるの?
185デフォルトの名無しさんsage2008/05/07(水) 12:04:50
個人攻撃が始まった(www
186デフォルトの名無しさんsage2008/05/07(水) 13:18:23
自分以上の人間を言いがかりで叩くって
気持ちいいんだもん。
187デフォルトの名無しさんsage2008/05/07(水) 13:57:56
柴田淳はじまったな。
188デフォルトの名無しさんsage2008/05/07(水) 14:09:25
>>182
ブレース採用の話しかしてないじゃんかw

そういう意味じゃなくて、
開発者が誰で誰がどれを担当していて
今どのモジュールが開発中もしくは放棄中とか
そういった情報を知ってる日本人のことだよ。
189デフォルトの名無しさんsage2008/05/07(水) 14:15:11
186が184をカス認定している件。
190デフォルトの名無しさんsage2008/05/07(水) 14:29:11
>>188
ある程度ならsvnのコミットのログとか
ソースコードのコメント読めば分かるんじゃないか
191デフォルトの名無しさんsage2008/05/07(水) 16:00:25
pygame.orgの英文をなんとかしてほしいんだよね
英文を読んでまでのヤル気が必須になってるから
興味もった素人達にとっては敷居が高すぎる。
ただでさえわからないプログラム解説を、わからない英語で解説されるわけだから。
誰か、日本語翻訳サイトつくってよ
翻訳だけの協力でもいいよ、
俺がサーバー借りてサイト作ってもかまわない
サイト作りは出来るから。
なんなら、このスレのみんなでpygame公式サイトの日本語解説版作っていかないかな?
192デフォルトの名無しさんsage2008/05/07(水) 16:03:18
まずはお前が率先して道を示せ。
話はそれからだ。
193デフォルトの名無しさんsage2008/05/07(水) 16:53:27
ほとんどSDLのラッパーなんだからSDLをさらっと習得しちゃえば
なんとなくわかるっしょ。
194デフォルトの名無しさんsage2008/05/07(水) 17:47:19
>179

>CPythonだと複数スレッドを同時に動かせないんで速くならない

そうなの?俺の持っている本では、

執筆時点(2006?)でフォークはWindowsのPythonでサポートされていない
けど、スレッドはすべてのプラットフォームのPythonでサポートしている・・・

みたいな事かいてあるよ。なのでサポートしていると思うんだけど、違うの?
195デフォルトの名無しさんsage2008/05/07(水) 17:54:04
どこのクソ本だよそれ。
196デフォルトの名無しさんsage2008/05/07(水) 18:06:26
>>194
C記述の拡張コードがマルチスレッドを考慮していないので
Python上ではマルチスレッドでも実質グリーンスレッド状態になる。
ちゃんとしたマルチスレッドな動作を期待するならJythonやIronPythonになるかな。
文脈でわかるのかもしれないけど「スレッド」といってもいろいろ観点があるから。

>>195
まちがっちゃいないけど説明不足でミスリードしちゃいそうだね。
197デフォルトの名無しさんsage2008/05/07(水) 18:13:21
>>194
俺の理解では、Python のスレッドは交互に動いている。つまり、ある時点において1つのスレッドしか動かない。
だから、同時に(並列で)動くことを期待しているマルチスレッドプログラムは速くはならない。
>>170さんの言うように、あるスレッドが入力待ちをしていて、別のスレッドがGUIを司る、というような
マルチスレッドプログラムならば期待通りに、一見並列に動く。
こういう実装になっているのは、種々のモジュールにスレッドセーフであることを要求するのが困難だから。
間違ってたらゴメス
198デフォルトの名無しさんsage2008/05/07(水) 19:08:58
194です。

なるほど。私が本のスレッドの説明の最初のとこだけしか読んで
なかったので、勘違いしてました。

もうちょっと読むと>197がいうとおりのような事も書いてました。
「いつでも1つだけのスレッドしか動いていない」って感じで。

現状(2006年?)ではスレッドを複数のCPUに分配できない、み
たいなことも書かれてた。

という事は計算が速くなるわけないですね。>170みたいな用途に
限る、ということか。
199デフォルトの名無しさんsage2008/05/07(水) 19:09:16
>>183
自分一人の例を全員の例のように敷衍するひとのひとりですね
200デフォルトの名無しさんsage2008/05/07(水) 19:12:07
>>191
ttp://www.halb-katze.jp/pygt/
201デフォルトの名無しさんsage2008/05/07(水) 19:49:30
>>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


とりあえず、wikiをつくって、2chに晒してみたら?
協力してくれる人もいるかもしれないよ
202デフォルトの名無しさんsage2008/05/07(水) 19:54:46
マルチcore対応のスレッドが使えるスクリプト言語を実装するのは難しいの?
Rubyも結局1つでしか動かないらしいし。
203デフォルトの名無しさんsage2008/05/07(水) 20:08:34
pygame翻訳しろの話は、くだすれPythonスレとマルチになってたんだな。
204デフォルトの名無しさんsage2008/05/07(水) 20:11:45
pygameスレにも貼ってあった
205デフォルトの名無しさんsage2008/05/07(水) 20:17:16
pygameなんてなんか人前で言いづらいな。
206デフォルトの名無しさんsage2008/05/07(水) 20:18:59
こういうのって勝手に翻訳して公開していいんだっけ?
まぁ事後承諾だろうと拒絶されるこたまずないだろうからどーでもいいんだろうけど

ゲーム用にしか聞こえないよなw
207デフォルトの名無しさんsage2008/05/07(水) 20:22:24
>>202
言語自体は各スレッドにインタプリタを1つずつ用意することで簡単に並列化できると思われ。
問題は膨大な量のライブラリモジュール、特にC等で書かれたライブラリのバインディングだ。
スレッドセーフでないライブラリは統合不可ということになる。つまり言語として制約が大きい。
大域変数でメモリ管理ってのは割とありがちだけど、これはスレッドセーフではないのでNG。
こういうものを除外していくとどんどん言語としての有用性が下がっていく。
代替品の再実装なんてやってられん。PythonにしてもRubyにしてもそんなところだと思われ。
208デフォルトの名無しさんsage2008/05/07(水) 20:24:13
pygameがLGPLだからドキュメントも同じ扱いになるんじゃないか?
ちゃんと調べてはいないけど
209207sage2008/05/07(水) 20:41:33
あんま関係ないけど、OpenMPで並列化されたライブラリを拡張モジュールとしてPythonに組み込んだことがある。
これだと並列化がモジュール内で閉じてるから何も問題ない。
俺はOpenMPで並列化された線形解法ライブラリのラッパを書いてPythonに組み込んだ。フツーに使えた。
ただし、Intel C コンパイラの場合はPython一式を -openmp オプション付きでコンパイルする必要があった。

あと、PythonでMPIプログラムを書いてマルチコア環境で実行するというアプローチもあるね。
これだと真に並列に動作するはず(マルチスレッドプログラミングと同じ要領というわけにはいかないけど)。
Python用のMPI実装にはいくつかあった希ガス。
210デフォルトの名無しさんsage2008/05/07(水) 20:53:31
PythonのWikiエンジンってあったんだね
知らなかった

使い勝手は、どうなの?

Python製Wikiエンジン"MoinMoin"、日本語化担当者募集
http://www.python.jp/Zope/PyLog/
211デフォルトの名無しさんsage2008/05/07(水) 21:09:58
http://moinmoin.wikiwikiweb.de/WikiEngineComparison

比較ページを見つけたけど、いい事しか書いてないなぁ。
まぁMoinMoinのサイトだから仕方ないか。
212デフォルトの名無しさんsage2008/05/07(水) 22:00:43
>>207
勉強になった。
スレッドセーフなモジュールを分類してかき集めるってプロジェクトがおこっても
良さそうとか思ったけど見つけられなかった。いろいろと難しいことがあるのかな。
213デフォルトの名無しさんsage2008/05/07(水) 22:46:07
>210

昔、自サイトでつかってたけど、まあ中の上ぐらいかしら。
設計はそれなりに綺麗で、たとえばpybloxsomとかから
エンジンだけ利用してレンダリング、とか、pyblosxomの
間で相互リンク、とかできた気がする。

ただ、見た目のきれいさとかはないけどね(デフォルトの設定では)
214Tracの方が良いよなsage2008/05/08(木) 00:07:36
先に言っておく。この話題で
MoinMoinじゃなくてTracの方がいい
なんて思ってる人は、何かがずれていると自覚したほうがいい。
215デフォルトの名無しさんsage2008/05/08(木) 10:54:55
MoinMoinで気に入ってるのは
Pythonのソースを表示すると
色分けで表示するってやつかな。

あと微妙に軽い。

欠点として‥登録ユーザじゃないと
ページ変更時刻がUTCで記録されてしまう。
これが地味に嫌だ
216デフォルトの名無しさんsage2008/05/08(木) 13:12:49
以前、翻訳してみようとWikiを作ってみたけど頓挫しているサイト
Displayモジュールの一部しかまだ翻訳してません
ぶっちゃけ翻訳の作法とかよくわからないし・・・

pygame日本語ドキュメント
http://wiki.livedoor.jp/py_gamer/d/FrontPage

手伝ってくれる人がいたら嬉しい
ちなみにMLで聞いてみたところドキュメントもLGPLらしいね
217デフォルトの名無しさんsage2008/05/08(木) 13:41:35
>215

今使ってないからなんとも言えないけど、
Config.tz_offset ってのを書換えれば良さそうですが...
(デフォルトのタイムゾーン)
218デフォルトの名無しさんsage2008/05/08(木) 13:43:15
もいんもいん
219デフォルトの名無しさんsage2008/05/08(木) 14:19:37
>>212
調べたことないけど、スレッドセーフなモジュール(特にC等で書かれた拡張モジュール)は
ほとんど無いんじゃないかなあ。

例えばCでマルチスレッドのプログラム書いてみると分かるんだけど「このコードはスレッドセーフです」って
言い切るのって結構大変。呼び出しているライブラリ関数がスレッドセーフかどうか逐一確かめて回らないと
いけないから。逐次プログラムの一部分だけをマルチスレッド化できるOpenMPがいかに便利かを実感する。

その点、Java は最初からマルチスレッド対応だから楽チン。
マルチスレッドで真に並列動作するPythonを実現するための一番の近道はJythonだろうね。
220デフォルトの名無しさんsage2008/05/08(木) 15:12:06
そのレベルの話であれば、Javaがマルチスレッド対応だから楽ちんだなんてとてもいえないと思うけど。
同期とかの方法と、VMのメモリモデルが規定されているだけでしょ。
結局、使うAPIとかライブラリがMT-Safeかどうか調べなきゃいけない。標準のAPIについては大体書いてあるけど。
221デフォルトの名無しさんsage2008/05/08(木) 21:21:29
>>216
今すぐは無理だけど、暇があったら手伝いたい。
勝手に編集してもいいの?
222デフォルトの名無しさんsage2008/05/08(木) 23:20:40
>>216 >>221
おまいらがんがれ。

wikiで自分が翻訳したページを他人に修正されると、なんか一瞬犯されたような気分
になったりするけどそんなケツの穴の小さいことは気にしないでがんがん翻訳してくれ。
223デフォルトの名無しさんsage2008/05/08(木) 23:26:05
>>222
気にしてるじゃねーかw
224デフォルトの名無しさんsage2008/05/08(木) 23:56:46
正規表現検索で
"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" だけ抜き出したい場合はやっぱりその他の文字列処理しないとだめ?

225デフォルトの名無しさんsage2008/05/09(金) 00:35:11
非グループ化の(?:...)が使えないかな
226デフォルトの名無しさんsage2008/05/09(金) 00:41:18
>>224
[A-Z]
227デフォルトの名無しさんsage2008/05/09(金) 00:48:28
re.findall('[¥w*]+', src) して from と import を filter
228デフォルトの名無しさんsage2008/05/09(金) 00:56:39
>>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
なんですがグループの繰り返しだけでは取得できないのでしょうか

229デフォルトの名無しさんsage2008/05/09(金) 01:37:49
正規表現である必要ってあるの?
こういうなの↓の方が簡単でよくない?

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
230デフォルトの名無しさんsage2008/05/09(金) 01:41:52
>>228
¥w は数字ともマッチするわけだが。
一回、正規表現について勉強しなおしたほうがいいんじゃね?
231デフォルトの名無しさんsage2008/05/09(金) 01:44:41
urllib2
232デフォルトの名無しさんsage2008/05/09(金) 02:32:46
print re.findall('(w)+', 'ABCD')
結果: ['D']

グループの繰り返しだと、最後だけしか取り出さないみたいだね。
233デフォルトの名無しさんsage2008/05/09(金) 11:44:42
(¥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']
234デフォルトの名無しさんsage2008/05/09(金) 16:23:44
【平均年収】岩手県の就職【365万円】 [就職]
【岩手県南】一関第一・水沢・花巻北・黒沢尻北高校 [お受験]
235デフォルトの名無しさんsage2008/05/09(金) 17:07:07
何の誤爆かと思ったらおすすめ2ちゃんねるか
236デフォルトの名無しさんsage2008/05/09(金) 17:26:46
同郷がいるな!?

岩手のコンビニのバイトは時給620円がデファクトスタンダードだぜ
そして最低賃金が全国最低で自殺率全国2位という素晴らしい県

スレ汚しスマソ
237デフォルトの名無しさんsage2008/05/09(金) 18:44:32
>>236
いや、君ひとりかもよ?w
俺もここと恐らく俺の他には誰も見ていないであろうスレ(語学板の某マイナー言語のスレ)を
交互に訪れていたらそのスレがおすすめ2ちゃんねるに出たことあるし。
238デフォルトの名無しさんsage2008/05/09(金) 18:49:17
日本では岩手県が一人当たりのPython消費量が多いらしい
239デフォルトの名無しさんsage2008/05/09(金) 18:59:25
>>237
どっちも見たこと無い
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

のような感じで
243デフォルトの名無しさんsage2008/05/10(土) 03:13:59
>>242
ファイルにあるやつなら insepct.getsource で取れる
244デフォルトの名無しさんsage2008/05/10(土) 04:27:34
>>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
245169sage2008/05/10(土) 13:53:14
>>244
おおお,サンクス!
早速いじってみまふ。
246デフォルトの名無しさんsage2008/05/10(土) 14:12:25
どうでもいいから
ちゃっちゃとpygameの資料和訳
作業に入れよ。
非国民か?
247デフォルトの名無しさんsage2008/05/10(土) 14:41:50
>>246
国際人には和訳などいらんのだよ
248デフォルトの名無しさんsage2008/05/10(土) 14:46:02
真の国際人は地域文化を尊重するものだ
と混ぜっかえしてみる
249デフォルトの名無しさんsage2008/05/10(土) 14:48:20
地域文化を尊重するから
現地の言葉を尊重するのだよと
250247sage2008/05/10(土) 14:48:29
>>248
(・ω・)つ おざぶとん
251デフォルトの名無しさんsage2008/05/10(土) 15:03:20
早く日本語化プロジェクトに参加しろよ。
お前らにpygameの未来がかかっている。
252デフォルトの名無しさんsage2008/05/10(土) 15:13:29
ユーザからの入力を正規表現で処理したいと思ってます。
入力された文字列に正規表現が含まれてる場合にそれをエスケープしたいんだけど、どうやったらいいのかわかりません。
誰か助けてプリーズ・・・
253デフォルトの名無しさんsage2008/05/10(土) 15:16:19
英語も読めないようなやつがpygameを使えるようになるとは考えにくい。
254デフォルトの名無しさんsage2008/05/10(土) 15:57:14
たぶんリファレンスの和訳よりも、各オブジェクトを絡ませた逆引きサンプルコードみたいのが需要あると思うよ。
扱い方が理解できりゃオブジェクト名で大体想像できるし
255デフォルトの名無しさんsage2008/05/10(土) 16:08:18
リファレンスぐらいなら簡単に訳せそうに見えるね

試しにpygame.cdromモジュール使ってみたけど対話型シェルから
簡単にトレイの開閉とか再生できておもすれー
かなりよく抽象化されてて使いやすそう
256デフォルトの名無しさんsage2008/05/10(土) 16:10:06
>>252
re.escapeは試してみた?
257デフォルトの名無しさんsage2008/05/10(土) 16:22:06
> リファレンスぐらいなら簡単に訳せそうに見えるね
簡単に訳せる文章、英文でも理解できる文章は、労力をかけて訳してもしょうがないっしょ
邦訳することが目的になっている感じだし、目的が変化している

核となるもの、肝となるもの、大事な概念だけど理解しにくいものを中心に
Pygameに興味のある者が理解しやすい仕組み・しかけをつくるほうが大事


とりあえず、目的・問題の明確化をさせたほうがいいんじゃないの?
258252sage2008/05/10(土) 16:46:20
>>256
できましたありがとー!
(_アンダースコアもエスケープされちゃうのがナゾですが・・・)
259デフォルトの名無しさんsage2008/05/10(土) 19:07:41
このスレッドの目的は
pygame文書の和訳という使命を帯びた事が証明されたわけだ
260デフォルトの名無しさんsage2008/05/10(土) 19:28:29
よし、wxpythonの和訳が終わったらpygameも和訳するぜ

まだ、何もやってないけど
261デフォルトの名無しさんsage2008/05/10(土) 19:43:09
Pygameのドキュメントだけ見てもよくわからないけど
SDLの方のドキュメントを読むと理解できる事も多いよね
262デフォルトの名無しさんsage2008/05/10(土) 20:39:56
お前らは早くpygameの和訳作業にとりかかれ
263デフォルトの名無しさんsage2008/05/10(土) 20:44:07
英語も読めない低脳は黙ってろ
264デフォルトの名無しさんsage2008/05/10(土) 21:01:38
ここの基準はPythonが書けるかどうかで決まるんだぜ(藁)
265デフォルトの名無しさんsage2008/05/10(土) 21:02:23
Pyhton
266デフォルトの名無しさんsage2008/05/10(土) 21:04:17
pyてょn
267デフォルトの名無しさんsage2008/05/10(土) 21:31:23
oh tyPo
268デフォルトの名無しさんsage2008/05/10(土) 21:34:00
○〜〜  ○〜〜  ○〜〜
  ○〜〜  ○〜〜  ○〜〜
    ○〜〜  ○〜〜  ○〜〜
269デフォルトの名無しさんsage2008/05/10(土) 21:52:46
sperm, sperm, sperm and sperm.
270デフォルトの名無しさんsage2008/05/10(土) 21:54:07
まず pygame を何と訳したらいいのかわかりません
271デフォルトの名無しさんsage2008/05/10(土) 21:58:25
pygame でいいじゃん
272デフォルトの名無しさんsage2008/05/10(土) 22:07:29
随時出張してきてもいいが、本スレに帰れ

あとpygame翻訳と最初に騒いだヤツは、もうマルチするなよ
次スレからちゃんとテンプレに追加してやるから

【pygame】pythonでゲーム製作【ぱいがめ】
http://pc11.2ch.net/test/read.cgi/gamedev//

>>270
Python + game = Pygame
こういう組み合わせの名前(造語)って代表的なのってなんだろう?
273デフォルトの名無しさんsage2008/05/10(土) 22:25:32
pychinko
274デフォルトの名無しさんsage2008/05/10(土) 22:59:17
pygameの和訳を済ませろボケナスども
275デフォルトの名無しさんsage2008/05/10(土) 22:59:58
乳遊
276デフォルトの名無しさんsage2008/05/10(土) 23:30:28
自己解決の次は翻訳か
277デフォルトの名無しさんsage2008/05/10(土) 23:37:22
>>272
PyPI, PyPy
278pygame和訳wiki”管理”者sage2008/05/10(土) 23:44:29
事故解決しました
279デフォルトの名無しさんsage2008/05/10(土) 23:49:25
つまんね
280244sage2008/05/10(土) 23:51:28
引続き Parallel Python をいじってみたんだけども、このシステムはマスタワーカモデルを前提にしているみたいだ。
つまり、マスタが仕事の集合を持っていて、有限個のワーカに1つずつ仕事を割り当てる。仕事を終えたワーカは
マスタから新しい仕事をもらって処理する。これを仕事の集合が空になるまで続ける。

ワーカ間で通信をする機能は提供されていないし、特定のワーカ(たとえば特定のリモートホスト上のppserver.py)に
特定の仕事を割り当てることもできないっぽい。Parallel Python が有効かどうかは実現したい並列アルゴリズムが
マスタワーカモデルに適合するかどうかに依る希ガス。
281デフォルトの名無しさんsage2008/05/11(日) 00:26:06
おっpydev
282デフォルトの名無しさんsage2008/05/11(日) 00:37:49
pygameの和訳が進んでいるか、
確認のために毎日一回以上は
pygame関連の話題を出すようにしようぜ

反論がある奴は似非python使いとして認定してやろうぜ
283デフォルトの名無しさんsage2008/05/11(日) 00:40:31
>>280
具体的には、どういう用途に使えそうなんですか?
284244sage2008/05/11(日) 00:59:44
>>283
pygameかな
285デフォルトの名無しさんsage2008/05/11(日) 01:34:00
>>283
最も適しているのは並列処理の分野で embarrassingly parallel と呼ばれるカテゴリに属する種々の計算、
すなわち入力データを複数の独立した部分に分割できて、各部分について他から独立して計算が行なえる
タイプの用途に適している。
http://en.wikipedia.org/wiki/Embarrassingly_parallel
Wikipediaに例があがっている。フラクタル計算とか3DCGのレンダリング(例:レイトレーシング)とか力任せの
暗号解読とか色々ある。

並列処理って概して複雑で長時間計算し続ける必要のある応用が多い。そういう応用には C とか Fortran を
使うことがほとんどなんだけど、きちんと動くようになるまでの開発時間が長くてデバッグがたいへんだったりする。
そういう並列プログラムの試作(プロトタイピング)に Python が使えたらいいなーと個人的には思っている。
286デフォルトの名無しさんsage2008/05/11(日) 08:49:01
>>274
おまえにいいこと教えてあげよう。
市場の中の肉屋さんいって、
「ホースください」頼んでみ。
解体処理した豚の膣の部分がもらえる。
ほんとは金かけて廃棄しないといけない部分だから無料でもらえる。
食い物にはならないから。
この豚の膣が極上。
まあ考えたら膣だからな。
人間のじゃないだけで本物の膣だから、気持ちよくて当たり前。
287252sage2008/05/11(日) 09:30:17
re.escapeってなんでもかんでもエスケープしちゃうのか・・・
¥山¥田¥太¥郎て
288デフォルトの名無しさん2008/05/11(日) 09:43:58
>>285
PythonでCPU8個使って並列計算するよりCで書いたプログラムの方が速そうだったり。。。
289デフォルトの名無しさんsage2008/05/11(日) 09:57:09
>>288
何言ってんだ?
290デフォルトの名無しさんsage2008/05/11(日) 10:28:52
>>289
あ?ヤンのかコラ
291デフォルトの名無しさんsage2008/05/11(日) 11:21:19
http://www.geocities.jp/gaijin_e3/omae01.jpg
292デフォルトの名無しさんsage2008/05/11(日) 11:21:53
>>286
ついでに言うと豚の内臓と人間の内臓はかなり近いらしいね
豚の心臓を人間に移植した話もあるからな
293デフォルトの名無しさんsage2008/05/11(日) 12:13:17
>>292
羊の膣も極上という話だけどどうなのだろうね?
294デフォルトの名無しさんsage2008/05/11(日) 12:14:24
膣なんてどうでもいいから
チャッチャとpygame資料の和訳作業に務めろ糞野郎共
295デフォルトの名無しさんsage2008/05/11(日) 14:39:25
>>285
自分も並列化するときのプロトタイプとしてPythonの並列環境を使ってみたいと
考えているんだけれど、今のところプロトタイプとしての感触はどう?

データ分割の楽な問題ってCとかFORTRANでもOpenMPを注意深く使うだけでも早くなる事が
多いし、MPIでも慣れれば苦労せずに書けるけれど、そうでない、スレーブ間での通信が必要
とかうまく分割できないとかそういう問題はMPIでやろうとするとデバッグが(;゚д゚)
なことになりがちで、そういう用途にPythonのプロトタイプが役に立つなら素晴らしいと思う
実はC並列版とそれほど速度とメモリ使用量が変わらないとかなら最高
C並列版より速ければ神
296デフォルトの名無しさんsage2008/05/11(日) 16:53:12
Parallel Python だけど pp.Server.__scheduler() を適当に書き直せばワーカと仕事の対応(割り当て)を
ユーザ側で決められそうな希ガス。問題はワーカ間のプロセス間通信。これが一番面倒なところなんで
自前で実装となると Parallel Python を使ううまみがほとんどない・・・。

やっぱ MPI の Python バインディングあたりが一番現実的な解かなー。でもなんか気が重いんだなー。
もっと Python らしく lightweight なソリューションがないかなー。

>>288
Python の並列プログラムより C の逐次プログラムの方が速そうってことだよね。
そういうことは十分(多分頻繁に)あると思われ。

>>295
残念ながらまだ並列プログラムのプロトタイプ用途には使えてなくて感触を得るところまでいってない。
理由は単純で、Python で手軽に並列プログラミングを実現できる道具を見つけられていないから。
>>209に書いたようにいろいろ試してるんだけどなかなか・・・。

ただ、個人的には Python を並列化のプロトタイピングに使うのは大いに有望だと思っている。
プロトタイピングの場合、欲しいのは並列度やデータ量を上げたときの実行時間の変化であって、
実行速度が多少遅くて実験に時間がかかるとしても知りたいことは分かるはずだから。
プロセス間通信にソケットを使うとすると、データ量が大きくなれば Python でも C 等と同じぐらいの
速度が出る(ハズ)。演算量が多い部分に numpy 等の C/Fortran で書かれた数値カーネルを使うことに
すれば、プロトタイピング用途には十分な速度とメモリ使用量が得られるのではと思う。
297デフォルトの名無しさんsage2008/05/12(月) 01:33:26

Linux で wxPython をコンパイルしようとして、
ttp://ymasuda.jp/python/wxpython/installation.html
ここを参考に進めて行ったんだけど、最後の
python setup.py install
を実行したところでむちゃくちゃエラー吐いて止まるんだけど・・・
一部だけエラーを載せるけど、同じファイルのエラーが延々と120行近くでるんだ。

contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: 'wxGLCanvas' was not declared in this scope
contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: 'arg1' was not declared in this scope
contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: expected primary-expression が ')' トークン前にあります
contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: 数値定数の前に expected ';'

「glcanvas_wrap.cpp wxPython」で検索したら英語で色々皆同じ問題にあってるみたいだけど、解決方法を探せなくて(読めなくて)困ってます・・・教えて!エロイ人!
298デフォルトの名無しさんsage2008/05/12(月) 02:10:10
config.py(setup.py?)のBUILD_GLCANVASを0にしてみたら?
299デフォルトの名無しさんsage2008/05/12(月) 08:47:31
>>297
どのディストリ使ってるのか不明なんだけど、
バイナリパッケージでは存在してないの?
300デフォルトの名無しさんsage2008/05/12(月) 17:11:39
単なる興味なのですが、Unicode文字列と等価なバイト列を得る方法をご教示頂けないでしょうか?

'hello'と等価なバイト列は'¥x68¥x65¥x6c¥x6c¥x6f'です。
で、u'hello'と等価なバイト列は、例えば'¥xff¥xfe¥x68¥x00¥x65¥x00¥x6c¥x00¥x6c¥x00¥x6f¥x00'
と思うのですが、pythonで両者の直接変換はできるのでしょうか?という質問です。

u'hello'.encode('utf-16')がほぼ等価ですが、これはあくまでエンコーディングなので、
直接バイト列を得てるわけじゃないのかな、と思った次第です。
301デフォルトの名無しさんsage2008/05/12(月) 17:19:12
内部表現はUCS2かUCS4だったと思うのだが
中身に触る方法はないほうがいいんじゃないかな
302デフォルトの名無しさんsage2008/05/12(月) 17:23:20
ord 関数じゃダメなんすか
303デフォルトの名無しさんsage2008/05/12(月) 20:12:59
>>300
文字列はエンコーディングを決めなければバイト列では表現できないよ。

> 'hello'と等価なバイト列は'¥x68¥x65¥x6c¥x6c¥x6f'です。 

ここで実は300さんはエンコーディングとして ASCII  を仮定している(ASCII をサブセットとして含む
別のエンコーディングかも知れない)。例えば、もし EBCDIC を仮定していたら別のバイト列になる。

> pythonで両者の直接変換はできるのでしょうか?

エンコーディングが分かっていればご存知の通り unicode() と .encode() で可能。
304デフォルトの名無しさんsage2008/05/12(月) 20:39:43
print repr([u'hello'])
305297sage2008/05/13(火) 01:30:38
>>297です。
>>298-299
大変申し訳ない。
上記URLの、下記の文をすっとばしてました・・・。

cd $WXDIR               (ソースツリーに移動する)
mkdir bld               (ビルドディレクトリ bld を作成)
cd bld                  (ビルドディレクトリに移動)
../configure            (configure を実行)

一番最初からやり直したらエラーを吐かなくなったよ。
でも、色々可能性を考えて下さってありがとうございました。
お騒がせしてしまい申し訳ございませんでした。
306デフォルトの名無しさんsage2008/05/13(火) 08:29:09
>>305
うわ、ビルド方法が面倒くさいね
307デフォルトの名無しさんsage2008/05/13(火) 10:12:52
>301
ないほうがいいってことはないでしょ

初心者が文字列操作で使うべき方法として
提示されるかどうかはともかく
308デフォルトの名無しさんsage2008/05/13(火) 11:09:48
>>> repr(unicode('あいうえお'))
"u'¥¥u3042¥¥u3044¥¥u3046¥¥u3048¥¥u304a'"
>>> unicode('あいうえお').encode('unicode_escape')
'¥¥u3042¥¥u3044¥¥u3046¥¥u3048¥¥u304a'
>>> unicode('あいうえお').encode('raw_unicode_escape')
'¥¥u3042¥¥u3044¥¥u3046¥¥u3048¥¥u304a'
>>> unicode('あいうえお').encode('unicode_internal')
'B0D0F0H0J0'
好きなのを選べ
309300sage2008/05/13(火) 12:46:51
>>301-304
>>307-308

皆様ご助言どうもありがとうございました。
>>302 >>308さんご提示の、コードポイント取得方法が私の期待に非常に近いものでした。
ですがそもそも、>>303 さんご指摘の通り、私には「バイト列はエンコーディングによって
はじめて定義されるもの」という認識が甘かったように思います。
私が例示したu'hello'のバイト列は、既に何かのエンコーディングが施されたもののはずだから、
そのバイト列と.encode(...)は全く等価ですね。

御蔭様で理解が深まりました。ご教示どうもありがとうございました。
310デフォルトの名無しさんsage2008/05/13(火) 15:58:29
最近の初心者は文体が丁寧だな
311デフォルトの名無しさんsage2008/05/13(火) 16:13:00
いいことじゃないか。
312デフォルトの名無しさんsage2008/05/13(火) 18:42:46
ipython1.0 は並列に対応しているみたいだね
使ってみたいがインストールできないorz
313デフォルトの名無しさんsage2008/05/13(火) 20:05:48
threading.threadで作ったスレッドをKillするにはどうすればええの?

class myThread(threading.Thread):
 alive = True
 def run(self):
  while self.alive:
   """ なにか """
 def kill(self):
  self.alive = False

こういうのじゃなくて、イメージとしては

threading as th

myth = th.Thread()
myth.start()
print "あへあへ"
myth.kill()

みたいな。
314デフォルトの名無しさんsage2008/05/13(火) 20:27:04
無理。
他のOSネイティブなスレッドでも、そういう手段は用意されていないか
用意されていても推奨されていない。
315デフォルトの名無しさんsage2008/05/13(火) 20:33:36
基本的にスレッドはスレッド自身で終了させた方がいいよ
316デフォルトの名無しさん2008/05/14(水) 00:04:03
ttp://www.devchix.com/2008/05/10/kamaelia-the-future-of-python-frameworks-looks-promising/
> Kamaelia: The future of Python Frameworks looks promising.
317デフォルトの名無しさんsage2008/05/14(水) 06:37:55
とりあえず clss GetBBC はよしたほうがいいな
318デフォルトの名無しさん2008/05/14(水) 17:22:08


空のtxtファイルが出来る言ってるから、日本語通らない?
とかスレ違い気味だけど聞いてみる
319デフォルトの名無しさんsage2008/05/14(水) 19:29:11
日本語でおk
320デフォルトの名無しさんsage2008/05/16(金) 19:23:25
ウェブアプリを作りたいなと思い、教育用らしいPythonを始めようと思うのですが
XAMPPみたいにアーカイブを展開するだけで
ApacheとPythonのApacheモジュールが使えるようになるWindows向けソフトとかありますか?
お手軽な感じで始めたいです
321デフォルトの名無しさんsage2008/05/16(金) 19:30:13
cd htdocs
C:¥Python25¥python.exe -m CGIHTTPServer

Pythonだけでできるよ。apacheなんてイラネー
322デフォルトの名無しさんsage2008/05/16(金) 19:55:26
320です
どうもありがとうございます
ブラウザで表示確認できるんでしょうか
よくわからないので調べてきます
ほんと無知ですみません
323デフォルトの名無しさんsage2008/05/16(金) 22:07:06
CGIHTTPServer にあったディレクトリのバグは直ったんだろうか?
324デフォルトの名無しさんsage2008/05/16(金) 22:13:14
これ?
http://svn.python.org/view/python/trunk/Lib/CGIHTTPServer.py
>[Bug #737202; fix from Titus Brown] Make CGIHTTPServer work for scripts in sub-directories
325デフォルトの名無しさんsage2008/05/17(土) 00:01:14
>>321
終了のしかた教えて
326デフォルトの名無しさんsage2008/05/17(土) 01:59:21
Python の C コード書くときのコーディング規約って、みんなちゃんと守ってる? 
どこまで守ってる?

static PyObject *
Hoge(........)
{
•関数の戻り値型の直後に改行を入れる
•関数ブロックの始まりの括弧の直前で改行する

if (a + b + c) {
}
•関数以外のブロックは、始まりの括弧を行末に置く
•括弧の中に余分な空白を入れない
•二項演算子の両側には空白を置く

X return ( expr );
O return expr;
•冗長な括弧は使わない
327デフォルトの名無しさんsage2008/05/17(土) 06:14:03
>>325
Ctrl + D とかじゃないの
328デフォルトの名無しさんsage2008/05/17(土) 10:01:43
>>326
そんな規約があるとは知らなかった。
329デフォルトの名無しさんsage2008/05/17(土) 10:10:11
>>326
ttp://www.python.org/doc/ の下のどこかにあります?
330デフォルトの名無しさんsage2008/05/17(土) 10:59:22
どう見てもPEPだろ
331デフォルトの名無しさんsage2008/05/17(土) 11:14:13
WindowsならCtrl+ZのあとにEnter
でも最初の表示どおりhelp→help()→quit→quit()と入力していってほしいかも。
332デフォルトの名無しさんsage2008/05/17(土) 11:49:46
>>328,329
PEP 7 -- Style Guide for C Code
http://www.python.org/dev/peps/pep-0007/
333デフォルトの名無しさんsage2008/05/17(土) 14:47:26
>>321 >>327 >>331
ありがとうございます

Windows で python -m CGIHTTPServer を実行しています

Ctrl + C
Ctrl + D
Ctrl + Z

どれもダメだったのでタスクマネージャーから殺したら終了出来ました

あとでわかったのですが、
Ctrl + C
を押したあとにブラウザの更新ボタンで再度リクエスト投げると
Keyboard Interrupt
が出て終了するようです
Windows だから select で監視出来ていないということでしょうか?
334デフォルトの名無しさんsage2008/05/17(土) 15:22:22
単純にaccept()がブロックしてるだけでしょ
try節で囲むかtelnet localhost 80とかやってから落とせばいい
335デフォルトの名無しさんsage2008/05/17(土) 15:44:26
>>333
普通のCGIがやりたいの?
ApacheでCGIがやりたいの?
320を読む限りではGoogle App Engineとかそういうのが近いのかな?
GAEはお勧めしないけど。
336デフォルトの名無しさんsage2008/05/17(土) 19:40:24
>>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ともに真っ白な画面が表示されます

うまく実行させるにはどうすればいいのでしょうか・・・
337デフォルトの名無しさんsage2008/05/17(土) 20:05:18
それsh辺りのスクリプトだからwinじゃ動かないよ
.pyに変えたらコマンドプロンプトにエラーメッセージが表示されてるからよく嫁
とにかくエラーメッセージはきちんと嫁
338デフォルトの名無しさんsage2008/05/17(土) 20:05:43
Apacheの場合、デフォルトで
* htdocsにはHTMLおよび画像ファイル
* cgi-binにはCGIスクリプト
と分けて設置しなければいけない。
CGIHTTPServerでも似たようなものだと思う

> Message: CGI script is not executable ('/cgi-bin/check.cgi').
とりわけ使ってるのがLinuxなら
CGIスクリプトの一行目にshebang入れてchmod +xしなきゃだめ
WindowsだとWebサーバにもよるけどshebangは必要かも
339デフォルトの名無しさんsage2008/05/17(土) 20:08:17
ああほんとだ。見てなかった >sh辺りのスクリプト
explore.cgiはPythonで書かれてるから動くんじゃないかな
340デフォルトの名無しさんsage2008/05/17(土) 20:13:03
>>336
htdocs フォルダが My Documents みたいにスペースの入ったフォルダの配下にない?
341デフォルトの名無しさんsage2008/05/17(土) 20:16:50
>>337-340
336です
親切にどうもありがとうございますm(_ _)m
ただ話の内容が難しくて理解が追いついていません・・・

windows上で使っています
いつかはレンタルサーバを借りて動かしたいと思っているのですが
windowsとlinuxでスクリプトの書き方(?)が異なるのでしょうか・・・

コマンドプロンプトにメッセージが表示されるんですね
読んでみます
テスト用に選んだスクリプトも選択ミスだったんですね
パスにスペースは入っていません
ピリオドと数字は入っています

エラーメッセージをよく読みます
342デフォルトの名無しさんsage2008/05/17(土) 20:35:42
実際に試してきた

1. c:¥cgi-bin¥ に env.py を置く
import os
print 'Content-type: text/plain¥n¥n'
for key in os.environ:
  print '%s: %s' % (key, os.environ[key])
2. cd c:¥ して python -m CGIHTTPServer する
3. ブラウザで localhost:8000/cgi-bin/env.py にアクセス
 環境変数がずらっと表示されたら成功

Windowsの場合、shebang も chmod +x も必要ないが
拡張子は .py にしないと動かないみたい

あと My Documents みたいなフォルダの配下だとこけるのは
>>340が指摘してくれている通り
343デフォルトの名無しさんsage2008/05/17(土) 21:01:56
>>342
336です
env.pyはうまく動きました!と思います
45行ほどの文字列が表示されました

explore.pyもうまく表示されました
表データが表示されました

cgi-binに拡張子をpyにして入れるんですね

初歩的なことに付き合っていただき
みなさん
ありがとうございますm(_ _)m
344デフォルトの名無しさんsage2008/05/17(土) 21:10:10
めずらしくpythonのお勉強なんかやってるやつがいるな
345デフォルトの名無しさんsage2008/05/17(土) 21:34:07
まだpythonにたどり着いてない気が…
346デフォルトの名無しさんsage2008/05/17(土) 21:44:28
c:¥ に置かせようとするセンスが理解出来ん
347デフォルトの名無しさんsage2008/05/17(土) 21:50:30
センスっつーより悪意を感じる
348デフォルトの名無しさんsage2008/05/17(土) 22:13:52
拡張子がcgiでも関連付けでpythonを起動してやるようにすれば動くかもしれない。
実行可能ならbatなんかでもCGIとして動作するみたいだから。
349デフォルトの名無しさんsage2008/05/19(月) 16:39:43
こんにちは。いつも参考にさせていただいております。
さて、早速なのですがPythonでテキストファイルへの書き込みは出来るのですが追加の書き込みの方法がわかりません。
一度内容を読み込んで結合してから書き込んでもよいのですがあまりスマートとは思えませんでしたのでここに投稿した次第です。
方法をご教授いただければ幸いです。
350デフォルトの名無しさんsage2008/05/19(月) 16:42:06
open(path, 'a')
351デフォルトの名無しさんsage2008/05/19(月) 16:48:57
レスありがとうございます。解決いたしました。
352デフォルトの名無しさんsage2008/05/19(月) 20:59:01
下記をCGIとして動かしてみたところ、何も表示されません。
# -*- coding: utf-8 -*-
import os
import cgi
import cgitb; cgitb.enable()

print "Content-Type: text/plain¥n¥n"

form = cgi.FieldStorage()
if not (form.has_key("name") and form.has_key("addr")):
print "

Error

"
print "Please fill in the name and addr fields."
return
print "

name:", form["name"].value
print "

addr:", form["addr"].value


以下は動作するのでバーミッションの設定ではないと思います。
# -*- coding: utf-8 -*-
import os
import cgi
import cgitb; cgitb.enable()

print "Content-Type: text/plain¥n¥n"
print "hoge"


解決策など示していただければ幸いです。

353デフォルトの名無しさんsage2008/05/19(月) 21:06:40
returnが関数外じゃない?
354デフォルトの名無しさんsage2008/05/19(月) 21:18:28
すいません。インデントが外れていたので
http://codepad.org/r6g67n1j
http://codepad.org/vUcQXO9g
355デフォルトの名無しさんsage2008/05/19(月) 21:30:37
return→sys.exit()に
356デフォルトの名無しさんsage2008/05/19(月) 21:33:21
いや、だから>>353
が言っているように、関数内じゃないのに
returnがあるのがおかしいんじゃないの

# -*- coding: utf-8 -*-
import os
import cgi
import cgitb; cgitb.enable()

def main():
print "Content-Type: text/html; charset=UTF-8¥n¥n"
form = cgi.FieldStorage()
if not (form.has_key("name") and form.has_key("addr")):
print "

Error

"
print "Please fill in the name and addr fields."
return
print "

name:", form["name"].value
print "

addr:", form["addr"].value

if __name__ == '__main__':
main()

357デフォルトの名無しさんsage2008/05/19(月) 21:34:44
apacheならerror_log(error.log)に出なかったっけ
358デフォルトの名無しさんsage2008/05/19(月) 21:38:05
pychecker, pylintあたりで文法チェックしといた方がいいかもね
359デフォルトの名無しさんsage2008/05/20(火) 06:24:41
>>355でFAもいいところなわけだが
360デフォルトの名無しさんsage2008/05/20(火) 13:59:12
http://codepad.org/AkQK38ei

関数の引数って参照渡しなの?
Traclight/plugins/themaengine/api.py

あとTracってAPacheがないと動かせないですか?
PythonをUSBメモリに入れて持ち運びたい(できればtracも持ち運びたひ…)
361デフォルトの名無しさんsage2008/05/20(火) 14:50:11
>>360
>関数の引数って参照渡しなの?

そうだよ。入門書嫁。
362デフォルトの名無しさんsage2008/05/20(火) 14:54:54
どんな入門書だよ
363デフォルトの名無しさんsage2008/05/20(火) 14:55:42
>>360
いっちゃうと代入も何もかもぜんぶ参照渡しです。
だから逆に参照渡しという概念がでてこない。

TracはFastCGIやWSGIでも動作するからApacheじゃなくてもいい。
lightyなんかいいとおもう。
あとWindows版Pythonならパスが変わっても動作するはず。
364デフォルトの名無しさんsage2008/05/20(火) 15:08:52
>>362
まともな入門書にはたいてい書いてあるよ
365デフォルトの名無しさんsage2008/05/20(火) 15:09:35
Pythonって参照渡しって言うのかな

>>> def foo(x): x = 2
...
>>> a = 1
>>> foo(a)
>>> a
1

いわゆる参照渡しだと、aの値が書き換えられるんじゃないの
366デフォルトの名無しさんsage2008/05/20(火) 15:10:56
>>365
def foo(&x): x = 2

これでOK
まともな入門書にはかいてあるよ
367デフォルトの名無しさんsage2008/05/20(火) 15:15:57
>>366
つまり、「何もかもぜんぶ参照渡し」というわけでなく、
特に指定しなければ値渡し、ということじゃない?
368デフォルトの名無しさんsage2008/05/20(火) 15:16:42
参照をリファレンスという意味で使ったなら
ある意味正しいと思う
369デフォルトの名無しさんsage2008/05/20(火) 15:21:18
>>> def foo(&x): x = 2
SyntaxError: invalid syntax
ついに嘘書く奴が出てきたよ
370デフォルトの名無しさんsage2008/05/20(火) 15:30:59
>>365
def foo(x):
↑ここのxには確かにa = 1と同一の1が渡る。
 x = 2
↑でもこれはその1を2に置き換えるのではなく
xの参照先を2に変更することになるのでaは1のまま。
371デフォルトの名無しさんsage2008/05/20(火) 15:31:48
>>365
Pythonで数字はイデア界にあるから
書き換え不能なんですよ。
372デフォルトの名無しさんsage2008/05/20(火) 15:33:56
>>369
嘘を嘘と見抜く練習をしような(w
373デフォルトの名無しさんsage2008/05/20(火) 15:49:35
つまり = は代入ではなく束縛ってことか

ところで
>>> lst = [0]
>>> lst[0] = lst
>>> lst
[[..]]
>>> def p(x): print x
>>> [p(x) for x in lst]
[[..]]
[None]

なんぞこれ
374デフォルトの名無しさんsage2008/05/20(火) 15:55:14
循環参照は[...]になるのか。賢いな。
375デフォルトの名無しさんsage2008/05/20(火) 18:42:18
>>370-371
えーと、本当に参照渡しの意味わかってんの?

fooの仮引数がxと宣言されているが、aを渡したときにそのxがaのエイリアスとして
機能する(つまりxがaと同等である)ようなものが参照渡しなんだが。
FORTRANはデフォで参照渡しだし、C++やC#は参照渡しもサポートする。

Pythonの場合、a, xは同一のオブジェクトを指している*別変数*だから、
xへの代入はaに影響を与えない。
そういうのは参照渡しとはいえないでしょ。
376デフォルトの名無しさんsage2008/05/20(火) 19:00:23
>>365
引数そのものはimmutable(不変)なので、関数内で書き換え不可。
この場合の引数とは、変数のアドレスのこと。
変数が指しているデータを書き換えたい場合は、例えば以下のように出来る。

def bar(x):x[0] = 2
a = [1,2,3]
bar(a)
print a # --> [2, 2, 3]
377デフォルトの名無しさんsage2008/05/20(火) 19:14:55
ミュータブルorイミュータブルというのはオブジェクトの特性であって
変数の特性ではない
378デフォルトの名無しさんsage2008/05/20(火) 20:15:06
そもそもPythonのオブジェクトには代入演算子ないし
379デフォルトの名無しさんsage2008/05/20(火) 20:36:17
Mr.NishioのJython本を読むと、変数はオブジェクトへのリファレンス貼る
ってことが書いてある。
買って読んでみなよ。
380デフォルトの名無しさんsage2008/05/20(火) 21:01:56

> 変数はオブジェクトへのリファレンス貼る

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

381デフォルトの名無しさんsage2008/05/20(火) 21:05:15
C風に言えば、Pythonの変数はオブジェクトへのポインタ
代入はポインタのコピー
関数呼び出しは全部値渡し
Javaも値型(基本データ型)以外は一緒
382デフォルトの名無しさんsage2008/05/20(火) 21:12:01
>>360
> 関数の引数って参照渡しなの? 

違います。

http://www.python.org/doc/faq/programming/#how-do-i-write-a-function-with-output-parameters-call-by-reference
> Remember that arguments are passed by assignment in Python. Since assignment just creates references to objects,
> there's no alias between an argument name in the caller and callee, and so no call-by-reference per se.
(引数は Python でいうところの代入によって渡されることを思い出して下さい。代入は単にオブジェクトへの参照を作るものなので、
呼び出す側の引数名と呼び出された側の引数名のあいだにはエイリアスはなく、「参照による呼び出し」も本質的に存在しません。)
383デフォルトの名無しさんsage2008/05/20(火) 21:44:09
渡す物がlistになると挙動が変わるはず
384デフォルトの名無しさんsage2008/05/20(火) 21:47:37
>>383
リストだろうが何だろうが、何も変わらない。

>>> def f(x): x = [1,2,3]
...
>>> a = []
>>> f(a)
>>> a
[]
>>>
385デフォルトの名無しさんsage2008/05/20(火) 21:58:26
>>> m = []
>>> def a(x): x.append(3)
>>> a(m)
>>> a(m)
>>> m
[3, 3]

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


俺の頭が弱いのか? 何が言いたいのかわからん
386デフォルトの名無しさんsage2008/05/20(火) 21:59:18
>>385
リストだろうが何だろうが、何も変わらない。

>>> def f(&x): x = [1,2,3]
...
>>> a = []
>>> f(a)
>>> a
[1,2,3]
>>>
387デフォルトの名無しさんsage2008/05/20(火) 22:04:59
Pythonを学ぼうと思うのですが
http://python.rdy.jp/wiki.cgi?page=%B4%D8%CF%A2%BF%DE%BD%F1
で何を選べばいいのかわかりません。
388デフォルトの名無しさんsage2008/05/20(火) 22:06:34
他言語経験は?
389デフォルトの名無しさんsage2008/05/20(火) 22:09:35
>>385
頭が弱いんじゃなくて、基本が理解できてない。
一体どんな教材でPython覚えたんだよ?
390デフォルトの名無しさんsage2008/05/20(火) 22:14:55
>>385
>>384の例は、代入によって「変数自体」を変更している
変数の変更とは、変数が持っていたオブジェクトへの参照を破棄し、
別のオブジェクトを指すようにする、ということだ

>>385の例は、破壊的メソッドによって、変数によって指されている
「オブジェクトの中身」を変更している。変数自体は何も書き換わっていない
391デフォルトの名無しさんsage2008/05/20(火) 22:25:40
>>388
初めてのC#を読みました。
作ったソフトウェアは2つほどでオブジェクト指向はある程度理解しているつもりです。
392デフォルトの名無しさんsage2008/05/20(火) 22:26:09
>>387
名著だ
393デフォルトの名無しさんsage2008/05/20(火) 22:26:37
>>392
ありがとうございます。
394デフォルトの名無しさんsage2008/05/20(火) 22:28:18
>>392
表紙でtypoが名著とはこれ如何に
395デフォルトの名無しさんsage2008/05/20(火) 22:31:19
ほんとだ噴いた
396デフォルトの名無しさんsage2008/05/20(火) 22:34:29
>>392
家宝にさせていただきます
397デフォルトの名無しさんsage2008/05/20(火) 22:45:04
>>391
プログラミング経験有りなら書籍ではないけれど
本家のチュートリアルの邦訳をまず読んでみれば
http://www.python.jp/doc/release/tut/
398デフォルトの名無しさんsage2008/05/20(火) 22:45:52
x = 23
はxのポインタの値が書き換わる。
x.append(3)
はポインタの先の値が書き換わる。
399デフォルトの名無しさんsage2008/05/20(火) 22:51:39
>>376>>384の挙動の違いがよくわからない
400デフォルトの名無しさんsage2008/05/20(火) 22:54:11
>>399
>>376もポインタが指しているオブジェクトの中身を書き換えているだけだ

xとaは別の変数だが同じオブジェクト(リスト)を指しているから、
x経由で変更したオブジェクトをaから参照しても
同じように見えるのは当たり前だ
401デフォルトの名無しさんsage2008/05/20(火) 23:02:28
>>400
>>384の場合はx=[1,2,3]で新たにリストのオブジェクトを生成して、
変数xはそれを指すから、結果的に変数aの指すオブジェクトの中身は
書き換えられなかったってことでいいのかな?
402デフォルトの名無しさんsage2008/05/20(火) 23:04:21
>>401
うん
403デフォルトの名無しさんsage2008/05/20(火) 23:15:12
なるほど、スッとした。さんくす。
404デフォルトの名無しさんsage2008/05/20(火) 23:29:50
やっぱりスッとしない。
405デフォルトの名無しさんsage2008/05/21(水) 00:02:10
>>392
Amazonって、ランキングが出るじゃん。見たんだけどさ。
 
 
 
この時期でこのランキングはないわ。
名著なのに売れないなんておかしいな。
芸術作品ですか。
406デフォルトの名無しさんsage2008/05/21(水) 00:12:37
>>70のリンクの人から見ると名著なんだよ
407デフォルトの名無しさんsage2008/05/21(水) 00:20:13
>>70のリンクの人のせいで売れないんじゃね?
まるで逆宣伝だし。
408デフォルトの名無しさんsage2008/05/21(水) 00:27:14
そもそも対象となる層が少なすぎる感じがする
409デフォルトの名無しさんsage2008/05/21(水) 00:28:39
日本人限定だしね
410デフォルトの名無しさんsage2008/05/21(水) 00:39:27
そのうえ変な人に気に入られてるようじゃ相当マイナスだね。
411デフォルトの名無しさんsage2008/05/21(水) 01:00:29
Jython使うとPOIも使えると思うのですが
CPythonからPOIを使えるようにはできませんか?
412デフォルトの名無しさんsage2008/05/21(水) 01:08:00
Java使え
413デフォルトの名無しさんsage2008/05/21(水) 01:10:44
替わりにwin32comかpyExceleratorを使うとか
414デフォルトの名無しさんsage2008/05/21(水) 02:00:14
win32comもpyExceleratorは使ったことがあるのですが
どっちもいまいちなのでPOIを使いたいんですけど
Javaは使いたくないんです
415デフォルトの名無しさんsage2008/05/21(水) 02:30:37
GroovyとJRubyやるからどっかいけ

416デフォルトの名無しさんsage2008/05/21(水) 02:33:37
>414
ならばCPythonでJava classファイルを使えるようにする仕掛けをこさえるしかなかろ
それって結局JavaVMの特殊な独自実装になるような気もするが。
となると「Javaを使わない」という目的からは厳密には外れるな。

あるいはPure PythonでPOIを書き直すとか
417デフォルトの名無しさんsage2008/05/21(水) 02:50:31
そうですね
そうします
418デフォルトの名無しさんsage2008/05/21(水) 03:46:21
死ねばいいよ
419デフォルトの名無しさんsage2008/05/21(水) 04:20:22
死ねって・・・
Pythonの信者の人が反社会的っていうのはほんとなんですね
420デフォルトの名無しさんsage2008/05/21(水) 08:00:56
Jython本を読むと心が洗われます
421デフォルトの名無しさんsage2008/05/21(水) 09:01:36
>>406
これはむしろ愛と呼べる代物だ。
温泉ではアッー!な光景が繰り広げられるに違いない。
422デフォルトの名無しさんsage2008/05/21(水) 11:30:56
>>421
結論から言うと、今回のRuby Kaigiのテーマは"愛"。
:
Ruby愛以外に何か付け加えるものがあるとするならば、あとは、覚悟。
423デフォルトの名無しさんsage2008/05/21(水) 11:44:02
イケメンハッカーはJRubyの本を出せばよかったんじゃね?
424デフォルトの名無しさんsage2008/05/21(水) 13:12:48
Pythonソースコード完全解説とかなら普通に読みたいな
425デフォルトの名無しさんsage2008/05/21(水) 13:14:46
自分でコードも読めない奴は、技術者としては失格だと思うがな。
426デフォルトの名無しさんsage2008/05/21(水) 14:17:31
neet山
427デフォルトの名無しさんsage2008/05/21(水) 14:32:01
RubyConsortium
Rubycon
不良品乱発
428デフォルトの名無しさんsage2008/05/22(木) 03:50:04
会社で作るソフトに組み込むスクリプトとしてぜひ Python を押したいんだけど、
「(スクリプトの)逆アセンブルがすげー簡単ぽいけど、どうなのよ」みたいなこと言われたんだ。
そういうわけで、会社を納得させるべく、「思いつきでちょっと解析したぐらいでは分からない程度」
に Python スクリプトの難読化について考えてみたい。
429デフォルトの名無しさんsage2008/05/22(木) 04:01:50
(自分がパッと思いつく程度の)スクリプトの解析方法に付いて考えてみる。

A. python スクリプトファイルが丸見えの場合
.py ソースは問題外。
.pyc は dis モジュールに食わせてダンプして終了。しかもドキュメンテーション文字列付き。
.pyo も dis モジュールに食わせて終了。

B. スクリプトファイルが見えない場合
Python##.dll を改造してアプリケーション付属のDLLと差し替えて、
インポートしたモジュールのコードオブジェクトをダンプするなり別ファイルに書き出すなりする

C.コンパイル済みモジュールファイルが丸見えだが、dis に食わせても解析失敗する場合
カスタム Python を使用している事を疑う.
アプリケーション付属の Python##.dll を参照するようにして python.exe を実行し、
自作のスクリプトを pyc に変換させ、純正の pyc と比べてみる。


430デフォルトの名無しさんsage2008/05/22(木) 04:17:33
そう考えると、
•独自のインポータを sys.path_hooks に組み込んで自作アーカイブからスクリプトファイルを読み出すようにする
•独自アーカイブに含まれているスクリプトは、カスタム Python を使って読み書きするための特殊 pyc
•カスタムといっても、ようは pyc の読み書き部分だけつじつまを合わせれば良い
•従って、改造するのは marshal.c あたり?

431デフォルトの名無しさんsage2008/05/22(木) 05:37:37
>>428
「解析されて何か問題でも?」と答えておけ。
本当に解析されて困るプログラムなんて、この世にそれほど存在しないだろ。
432デフォルトの名無しさんsage2008/05/22(木) 11:39:00
GPL
433デフォルトの名無しさんsage2008/05/22(木) 11:49:46
JavaだってC#(IL)だって逆コンパイラは存在してるし
難読化とかもあるけど、最終的には>>431のような気がする
434デフォルトの名無しさんsage2008/05/22(木) 12:15:57
事情をよく知らない割には権限だけ持っていて、
変化を嫌いたがるダメ官吏みたいな上司を説得するのが一番大変なんだよね〜。
435デフォルトの名無しさんsage2008/05/22(木) 12:16:05
pyc や pyo はバイナリエディタで開いただけでも識別子名と関数名がまるわかりだからねえ
簡単な難読化ぐらいならやる価値あると思う
436デフォルトの名無しさんsage2008/05/22(木) 13:34:43
難読化とかwww馬鹿だろwww
死ねばいいのに
437デフォルトの名無しさんsage2008/05/22(木) 16:17:07
簡単な難読化をしてみせるだけで>428の仕事が楽になるならいいじゃないか。
それ自体に意味があるかどうかはどうでもいいのだ。
438デフォルトの名無しさんsage2008/05/22(木) 16:19:55
マってたまに、子供騙しで騙してしまえばいい相手の要求に対して、
妙に本気になって対処してしまうことがあるよね。自戒も含めてw
439デフォルトの名無しさんsage2008/05/22(木) 16:46:15
全て eval を使って文として
他のプログラムに仕込むとか
440デフォルトの名無しさんsage2008/05/22(木) 18:07:12
子供騙しで手を抜く奴はプログラマだ!
バレないように手を抜く奴は訓練されたプログラマだ!

こうですか? わかりません (>_<)
441デフォルトの名無しさんsage2008/05/22(木) 19:29:23
>>434
そういうときはその上司の上司を説得するべき
442デフォルトの名無しさんsage2008/05/22(木) 21:44:24
適当にxorして「暗号化しました!」
とか言っとけば大丈夫
443デフォルトの名無しさんsage2008/05/22(木) 22:47:10
ソースコード自身とxorしたから大丈夫です!
444デフォルトの名無しさんsage2008/05/23(金) 01:11:01
>>443
0x00とXORしないとダメだよ!!
445デフォルトの名無しさんsage2008/05/23(金) 02:15:01
ネタならネタで良いんですが
もう少し楽しめるのをおながいします
446デフォルトの名無しさんsage2008/05/23(金) 02:44:30
pygameで英語分からなくて暴れてる厨房だろ
放っとけよ
447デフォルトの名無しさんsage2008/05/23(金) 08:11:47
pygameの和訳さっさと進めろよハゲども
448デフォルトの名無しさんsage2008/05/23(金) 08:45:46
自己解決しました。
449デフォルトの名無しさんsage2008/05/23(金) 09:17:04
やめてください
450デフォルトの名無しさんsage2008/05/23(金) 10:14:11
イケメンハッカーが自決しました。
451デフォルトの名無しさんsage2008/05/23(金) 10:33:08
やめてください。
452デフォルトの名無しさんsage2008/05/23(金) 10:33:59
自己解決禁止
453デフォルトの名無しさんsage2008/05/23(金) 10:34:36
>>441
お花畑にお住まいの妖精さんですか?
現実は厳しいですよ。
454デフォルトの名無しさんsage2008/05/23(金) 10:35:08
neet山が自己休刊やめてください。
455360sage2008/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}

渡すものが、辞書かリストか、で字面的に違うということですね
事故解決しました。(&なんて使わねー)(*はリスト**は辞書ですが無くても動くのです無害です)
456デフォルトの名無しさんsage2008/05/23(金) 11:07:57
>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ありそうな気もするけど)


457360sage2008/05/23(金) 11:30:33
>>456


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とか、いい感じなものだと最近わかり始めてきますた
458デフォルトの名無しさんsage2008/05/23(金) 12:07:53
自己解決禁止しちゃいかんだろww
459デフォルトの名無しさんsage2008/05/23(金) 16:11:33
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 "", line 1, in
IOError: [Errno 2] No such file or directory: './test-file.txt'

同じディレクトリ下にあるファイルを読むにはどう書けば良いですか?
460デフォルトの名無しさんsage2008/05/23(金) 16:19:24
>>> fn = os.path.join(os.getcwd(), 'test-file.txt')
>>> fn = os.path.join('./', 'test-file.txt')
>>> open(fn).read()

.txt 拡張子が余計に付いてだけでした orz
事故レスすまそ
461デフォルトの名無しさんsage2008/05/23(金) 17:41:49
>>459
なんでバグだらけの旧バージョン使ってるんだ?
462デフォルトの名無しさんsage2008/05/23(金) 19:29:52
うるさいだまれ
463デフォルトの名無しさんsage2008/05/23(金) 19:36:57
自己憤慨しました。
464デフォルトの名無しさんsage2008/05/23(金) 21:15:47
自己発電しました。
465デフォルトの名無しさんsage2008/05/23(金) 22:41:04
助けて
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)
466デフォルトの名無しさんsage2008/05/23(金) 22:43:40
http://pc11.2ch.net/test/read.cgi/tech//385
467デフォルトの名無しさんsage2008/05/23(金) 23:13:26
マルチしちゃったか
死ね
468デフォルトの名無しさんsage2008/05/23(金) 23:38:32
ちょっと教えて欲しいんだけど、pythonの正規表現で先読みって使えないの?
下みたいに書いても全然文字列を分割してくれないんだけど

line = '123,456,79'
regexp = re.compile('(?=5)')
print regexp.split(line)
469デフォルトの名無しさんsage2008/05/23(金) 23:56:48
>>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']
470デフォルトの名無しさんsage2008/05/23(金) 23:57:19
>>468
先読みが使えないっていうより
re.split() に長さ 0 のパターンを渡しても何もしてくれないとかじゃない?
他の言語とかは挙動が違った気がする
471デフォルトの名無しさんsage2008/05/23(金) 23:57:58
>>468
ライブラリリファレンスを見れば分かるけど、先読みは使えるよ。

よくわからんが、split()がzero-width assertionでは機能しないのかもな。
split()に与えた正規表現にマッチした文字列をデリミタとみなして分割するから、
「位置」じゃなくて「文字(列)」にマッチする正規表現じゃないとダメ、とかさ。

ただの想像だけど。
472471sage2008/05/23(金) 23:58:39
ぐは。レスかぶりまくりじゃん。
473デフォルトの名無しさんsage2008/05/24(土) 00:15:30
先読みの使い方を間違えてる
474デフォルトの名無しさんsage2008/05/24(土) 00:38:16
お前は次に「自己解決しました」と言う。
475デフォルトの名無しさんsage2008/05/24(土) 00:46:50
自己解決しました
476468sage2008/05/24(土) 01:09:50
レスサンクス
やっぱり場所指定の正規表現じゃ分割しないみたいだね
perlとrubyでもsplit関数を動かしてみたんだけど、
perlはpythonと同様で場所指定の正規表現じゃ分割してくれなかったよ
一方rubyは意図したとおりに場所指定で分割できた
言語毎に結構挙動が違うもんなんだね


477デフォルトの名無しさんsage2008/05/24(土) 01:31:05
>>472
ぐは禁止。きもい。
478デフォルトの名無しさんsage2008/05/24(土) 01:32:10
ruby最強!
479デフォルトの名無しさんsage2008/05/24(土) 01:33:37
regexp = re.compile('.(?=5)')
480デフォルトの名無しさんsage2008/05/24(土) 01:50:44
>479
それだと一文字消えちゃうだろう常識で考えて
481デフォルトの名無しさんsage2008/05/24(土) 03:40:04
pyunoでOpenOfficeの制御したかったのだけど
ubuntu7.10で動かないみたい
http://udk.openoffice.org/python/python-bridge.html
Hellow Worldのサンプル動かすと
line 5, in
localContext = uno.getComponentContext()
AttributeError: 'module' object has no attribute 'getComponentContext'
482デフォルトの名無しさんsage2008/05/24(土) 03:49:34
>>468

Perlのバージョンは?
試したらできたよ。

my @f = split /(?=5)/, $str;
print join(':', @f), "¥n";

483デフォルトの名無しさんsage2008/05/24(土) 05:24:45
>>> import re
>>> line = '123,456,79'
>>> regexp = re.compile('')
>>> regexp.split(line)
['123,456,79']

そもそもこうなるんだもんなぁ
484デフォルトの名無しさんsage2008/05/24(土) 08:28:25
>>477
ぐはははははははははははhahahahahahahahaha!!!!!
485デフォルトの名無しさんsage2008/05/24(土) 10:14:48
ぐは。自己解決しました。
486デフォルトの名無しさん2008/05/24(土) 12:39:52
>482
perlでもsplitできるね

pythonで位置指定の分割ってどうやんだろ
487デフォルトの名無しさんsage2008/05/24(土) 13:03:35
こんな感じの関数を自分で作って使えばいいんじゃね

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
488デフォルトの名無しさんsage2008/05/24(土) 13:14:27
リスト返すようにしちゃったけど、ジェネレータにすべきだったか
ま、その辺は好きに汁
489デフォルトの名無しさんsage2008/05/24(土) 14:06:35
>487
re.findall()
490デフォルトの名無しさんsage2008/05/24(土) 14:18:04
re.findall()がどうしたの?
491デフォルトの名無しさんsage2008/05/24(土) 15:33:29
Perl で split('', $str); に相当するのは
Python ではどう書けばよいですか?
492デフォルトの名無しさんsage2008/05/24(土) 15:37:47
>>491
list(str)
493デフォルトの名無しさんsage2008/05/24(土) 19:16:39
オブジェクトのメソッドを一覧で取得するにはどうすればええの?
494デフォルトの名無しさんsage2008/05/24(土) 19:24:33
filter(callable, dir(hoge))
495デフォルトの名無しさんsage2008/05/24(土) 19:25:54
[x for x in dir(obj) if callable(getattr(obj, x))]
496デフォルトの名無しさんsage2008/05/24(土) 21:30:26
>>494
動きません。
自己確認してください。
497デフォルトの名無しさんsage2008/05/24(土) 22:48:52
自己完結しました
498デフォルトの名無しさんsage2008/05/24(土) 22:51:21
>>494
オッサン臭いコードだな。その上動かないってどんだけ(www
499デフォルトの名無しさんsage2008/05/24(土) 22:58:55
itertools は使えそうで使えない
500デフォルトの名無しさんsage2008/05/24(土) 23:03:49
>>498
まさに労害(WWW
501デフォルトの名無しさんsage2008/05/24(土) 23:17:21
おれさまがなおしてやった
filter(lambda x : callable(getattr(obj, x)), dir(obj))
502デフォルトの名無しさんsage2008/05/24(土) 23:28:11
ここまで来ると、わざわざfilterを使う意味なくね?
503デフォルトの名無しさんsage2008/05/25(日) 00:07:56
pythonのlambdaって読みづらいだけじゃね?
pythonの基本的な文法と比べると汚い
504デフォルトの名無しさんsage2008/05/25(日) 00:14:14
Guidoもlambdaは嫌いだったと思う。
lambdaを使うのは変態か、自称イケメンハッカーのワンライナー芸人だけだろ。
505デフォルトの名無しさんsage2008/05/25(日) 01:19:41
どうせ残すなら
いろいろできるようにすればいいのに
506デフォルトの名無しさんsage2008/05/25(日) 01:32:31
cshといっしょでコード互換のために残してるだけなんだから
もう新規につかうようなもんじゃないだろ。
507デフォルトの名無しさんsage2008/05/25(日) 02:44:32
Pythonプログラミング入門はクソだとよ。
508デフォルトの名無しさんsage2008/05/25(日) 03:45:36
自分の言葉で語りなさい
509デフォルトの名無しさんsage2008/05/25(日) 05:36:58
ということにしたいのですね
510デフォルトの名無しさんsage2008/05/25(日) 09:50:46
懐かしいフレーズだ
511デフォルトの名無しさんsage2008/05/25(日) 10:51:46
皆さん lambda と聞くと昔の傷がうずくのですね
512デフォルトの名無しさんsage2008/05/25(日) 10:52:28
Twisted本、クソ本フラグがたった感が。
513デフォルトの名無しさんsage2008/05/25(日) 11:37:37
うはは、わかりません。
514デフォルトの名無しさんsage2008/05/25(日) 12:29:07
関数をファーストオブジェクトとして扱えないのはしょうがないが
だからってpython の lambda はちょっと無しだろ
C++みたいに演算子()をオーバーロードできればいいのに
515デフォルトの名無しさんsage2008/05/25(日) 12:33:36
>>514
関数内で関数が定義できるんだから、lambdaはあれで良い。
演算子オーバーロードも、__call__でできるじゃないか。
516デフォルトの名無しさんsage2008/05/25(日) 12:40:01
うはは、わかりません。
517デフォルトの名無しさんsage2008/05/25(日) 13:11:22
>>514
Pythonの関数はファーストクラスオブジェクトだが
518デフォルトの名無しさんsage2008/05/25(日) 13:23:23
ファーストオブジェクトってどういう意味?
519デフォルトの名無しさんsage2008/05/25(日) 13:32:38
http://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88
>>514は、匿名リテラルで宣言できる関数が制限されていると言いたいんだと思う。
でも、def foo() して、 bar = foo; del foo; したら、foo()できなくなる。Pythonのdefは関数定義と
変数への代入を同時にしているというだけなので、関数がファーストクラスオブジェクトと言っても良い。
520デフォルトの名無しさんsage2008/05/25(日) 14:00:35
>>519
ありがとう。ファーストクラスオブジェクトでググればよかったのか。

俺もPythonのlambdaは気持ち悪いと思う。
あと、exceptで例外が複数のときだけ括弧つけるのも気持ち悪い。
521デフォルトの名無しさんsage2008/05/25(日) 14:11:16
(UNIX環境の)Pythonってソースプログラム実行中にソースの書き換えってできるの?
インタプリタだから、できそうなイメージなんだけど
522デフォルトの名無しさんsage2008/05/25(日) 14:13:28
pythonって関数内で関数作って関数を返す関数作れたっけ?
523デフォルトの名無しさんsage2008/05/25(日) 14:26:28
tupleが (a,) ってなるのがきもい



524デフォルトの名無しさん2008/05/25(日) 14:50:03
python の快活環境どれがおすすめですか?
525デフォルトの名無しさんsage2008/05/25(日) 15:54:31
>>522
いろんなデコレータのソース読んでみたら?そういうのばっかりだから。
Pythonのデコレータは、関数を引数にして関数を返す関数。
@foo(a,b)
def bar():
の場合、fooは、"関数を引数にして関数を返す関数"を作成して返す関数になる。
526デフォルトの名無しさんsage2008/05/25(日) 15:58:09
間違えた
快活環境じゃなくて開発環境
527デフォルトの名無しさんsage2008/05/25(日) 16:27:51
>>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)
529デフォルトの名無しさんsage2008/05/25(日) 17:56:17
御臨終です
530デフォルトの名無しさんsage2008/05/25(日) 17:59:29
org が orz の相似に見えた
531デフォルトの名無しさんsage2008/05/25(日) 19:11:41
そういやIronPythonのスレはあるのにJPythonのスレはないんですね
532デフォルトの名無しさんsage2008/05/25(日) 20:08:15
Jythonのスレならあるでしょ。
専用じゃないけど
533デフォルトの名無しさんsage2008/05/25(日) 20:17:07
>>523
これならきもくない?
tup = (
a,
)
534デフォルトの名無しさんsage2008/05/25(日) 20:48:17
>>525,527

ありがとう
やってみたら出来たよ
これで使いやすいschemeの代わりが出来た
535デフォルトの名無しさんsage2008/05/25(日) 21:57:03
そんな見た目だけの問題じゃないよ! >533

誰かが「カンマがtupleを作るんだ、カッコじゃない」と言ってたが、

>>> x=()
>>> type(x)


キモイヨー
536デフォルトの名無しさんsage2008/05/25(日) 22:22:42
>>535
男なら、空のタプルを作りたいときがあるってもんだ。
537デフォルトの名無しさんsage2008/05/26(月) 00:00:59
python for S60のスレはないよなぁ
538デフォルトの名無しさんsage2008/05/27(火) 00:06:35
パックリ(i)

キモイヨー
539デフォルトの名無しさんsage2008/05/27(火) 00:15:23
RDBで言うテーブルに対するビュー
Cで言う配列に対するポインタ
みたいなノリで使える、オリジナルデータを更新可能なスライスみたいなの無いかな

スライスみたいにコピーするんじゃなくて参照を握っていて、
更新も出来るやつ
自分で作るしかない?
540デフォルトの名無しさんsage2008/05/27(火) 00:44:42
うはは、キモイヨー。
541デフォルトの名無しさんsage2008/05/27(火) 00:49:16
>>537
需要があるのか?
542デフォルトの名無しさんsage2008/05/27(火) 01:48:06
>>539
ありますよ
543デフォルトの名無しさんsage2008/05/27(火) 09:27:23
>539

10行ぐらいで書けそうだから、必要な人は手元で書いちゃうんでは。
544デフォルトの名無しさん2008/05/27(火) 09:57:14
ちょちょっっと書いてみていただけませんか?
545デフォルトの名無しさんsage2008/05/27(火) 11:27:27
>>544
書きました。
見せないけど。
546デフォルトの名無しさんsage2008/05/27(火) 16:41:49
さては11行になったな?
547デフォルトの名無しさんsage2008/05/27(火) 17:55:58
>>539
arrayじゃ駄目なの?
548539sage2008/05/27(火) 18:28:38
レスくれた人どうもです

>>542 モジュール名を教えていただけませんか

>>543 書いてみましたが、自分は10行では無理でした
__getitem()__に負のインデクスやsliceオブジェクトが渡された時の
処理とかをいちいち書くのがウザいです

>>547 arrayは全く用途が違うのではないでしょうか
シークエンスの部分列を「参照」するだけならただのスライスで良いし
itertools.islice()ならコピーを避けられますが、
元のシークエンスを「更新」もしたいわけです
549デフォルトの名無しさんsage2008/05/27(火) 18:51:41
pygameの和訳完成してもいいころなんじゃねーの
550デフォルトの名無しさんsage2008/05/27(火) 19:40:47
547は配列を作りたいのかと勘違いした。
ようするに、ポインタに相当するものを作りたいのか。
551デフォルトの名無しさんsage2008/05/27(火) 19:53:15
うはは、すみません
552デフォルトの名無しさんsage2008/05/27(火) 20:10:20
>>548
要するにスライスをスライスして新しいスライスを作れればいい(そこを自前で実装するのは面倒)ということだな。
スライスをスライスしてスライスを作るというのはありがちな気がするので既にありそうだが。俺は残念ながら知らん。
自前で実装するのは確かに面倒そうだ。
553デフォルトの名無しさんsage2008/05/27(火) 22:02:45
>>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で場合分け必要だし
554デフォルトの名無しさんsage2008/05/27(火) 22:15:15
numarray
555デフォルトの名無しさんsage2008/05/27(火) 22:36:17
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2006-10/msg02680.html

これとかヒントになるかも
一部を掬って変化を加えたら、全体が書き換わる…
556539sage2008/05/27(火) 22:52:01
ありがとうございます
NumPyですか
数値計算が目的という訳ではなかったので完全に盲点でしたが、使えそうですね

ちょっと試してみます
557デフォルトの名無しさんsage2008/05/28(水) 09:09:02
これからはRuby一色の時代。
PerlもPythonも廃れ、Rubyだけが生き残る新時代
558デフォルトの名無しさんsage2008/05/28(水) 09:42:45
その「新時代」になってから勉強しても全然遅くない。
559デフォルトの名無しさんsage2008/05/28(水) 12:02:30
for e in dir():
  print e

とかで出力されるデータをA-Z, a-z, __??__で
頭文字ごとに改行して出力するにはどうしたら良いですか?
560559sage2008/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
561デフォルトの名無しさんsage2008/05/28(水) 14:35:40
>>> a2z="abcdefghijklmnopqrstuvwxyz"

>>> a2z=range(ord('a'), ord('z')+1)
562デフォルトの名無しさんsage2008/05/28(水) 14:35:53
groupby使ってみるといいんじゃない?

from itertools import groupby
from operator import itemgetter
for k, g in groupby(sorted(dir(str)), itemgetter(0)):
 print ", ".join(g)
563デフォルトの名無しさんsage2008/05/28(水) 14:36:51
>>560
printだけ書けば改行できるのに。

lastchar = dir()[0][0]
for e in dir():
if e[0] != lastchar:
print
lastchar = e[0]
print e,

これじゃダメ?
564デフォルトの名無しさんsage2008/05/28(水) 14:37:50
インデント消えちゃったけど、まぁ分かるよね?w
565デフォルトの名無しさんsage2008/05/28(水) 14:54:57
>>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])
566563sage2008/05/28(水) 15:07:07
Python始めて1週間の俺には", ".join(g) の部分がよく分からなかったが、
gのシーケンスを", "で区切った文字列が得られるのか。
567デフォルトの名無しさんsage2008/05/28(水) 15:18:09
むしろ g は glue の g かもしれないぜ
568デフォルトの名無しさんsage2008/05/28(水) 17:07:40
>>563
for e in dir():
 1. if 違う要素かどうか判定: 改行¥n + フラグを更新する
 2. 要素を出力する

。ノートにでもまとめて整理しとく乙
569デフォルトの名無しさんsage2008/05/28(水) 17:19:04
>>566
個人的には
リスト.join(区切り文字)
の方がわかりやすいと思ってる。
570デフォルトの名無しさんsage2008/05/28(水) 17:27:24
1. FAQ嫁
2. Ruby使え
3. 俺もそう思う
571デフォルトの名無しさんsage2008/05/28(水) 17:43:04
引数にジェネレータを与えられるのはstr.joinの一つの利点だと思う
572563sage2008/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に格納したデータをいじれたり、見
る事ができない状態です。

何かアドバイスがいただければ助かります。よろしくお願いします。
574デフォルトの名無しさんsage2008/05/28(水) 20:13:19
うちではみれてる
575デフォルトの名無しさん2008/05/28(水) 23:51:30
ディショナリをそのキー名の変数にするってどうすればいいんですか?
つまり
a{hoge:1,foo:2,bar:3}
を↓のようにしたいです。
hoge = 1
foo = 2
bar = 3
576デフォルトの名無しさんsage2008/05/28(水) 23:56:27
>>575
入門書嫁。
577デフォルトの名無しさんsage2008/05/29(木) 00:09:21
>576
みんpyには載ってませんでしたけど、ググッたら解決しました。
exec使えばいいんですね!
578デフォルトの名無しさんsage2008/05/29(木) 00:10:11
D = dict(hoge=1, foo=2, bar=3)
locals().update(D)

あまり行儀良くないとは思うが一応
579デフォルトの名無しさんsage2008/05/29(木) 00:11:39
D = {'foo': 1, 'bar': 2, 'baz': 3}
for k in D: exec "%s = %s" % (k, D[k])

ついでに漏れも生まれて初めて exec 使ったので記念に
580デフォルトの名無しさんsage2008/05/29(木) 00:14:25
>>575
ローカル変数にする意図が全くわからない。
そんなことして何か嬉しいか?
581デフォルトの名無しさんsage2008/05/29(木) 00:20:47
>>577
うはは、わかりません。
582デフォルトの名無しさんsage2008/05/29(木) 00:21:30
クラスの属性の初期化時とか
583デフォルトの名無しさんsage2008/05/29(木) 00:22:32
>>575
>a{hoge:1,foo:2,bar:3}

このコードはどんな入門書にも載ってないよ(www
584デフォルトの名無しさんsage2008/05/29(木) 00:24:03
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)
みたいにすっきりさせたいんです。カラムが多いので。
585デフォルトの名無しさんsage2008/05/29(木) 00:26:53
>>577,579
execなんて危ないもの、初心者が使っちゃいけません!!
586デフォルトの名無しさんsage2008/05/29(木) 00:27:54
>>584
%のフォーマットには辞書を渡す方法もある
"insert name (age,job,height) values %(age)s,%(job)s,%(height)s)" % people
587586sage2008/05/29(木) 00:29:34
すまん、やりたいことと違うみたい
588575sage2008/05/29(木) 00:33:18
>>586

へー。そういうのもあるんですね。勉強になります。今回は>>579
方のやつを使わせていただこうと思います。ありがとうございます!
589デフォルトの名無しさんsage2008/05/29(木) 00:35:20
>>585
eval 使ったらこけて何これって思ったさ

>>584
これでもいけたような気がする。間違ってたらごめんね
cur.execute("insert name (age,job,height) values (:age, :job, :height)", people)
590デフォルトの名無しさんsage2008/05/29(木) 00:39:42
>>582
目的によっては、
for k in dic:
 setattr(obj, k, dic[k])
で充分だったりする。
591デフォルトの名無しさんsage2008/05/29(木) 01:24:15
>>590
せっかくだからiteritems()使おうよ。

for k, v in dic.iteritems():
 setattr(obj, k, v)
592デフォルトの名無しさんsage2008/05/29(木) 05:49:04
djangoのチュートリアルに全部書いてあることばかりですねわかります
593デフォルトの名無しさんsage2008/05/29(木) 08:04:47
iteritems なんてのがあったのか。。。 いままで items しか使ってなかったよ。

。。。。でもどうせ 2.6 あたりで統合されるんでしょ?
594デフォルトの名無しさんsage2008/05/29(木) 09:13:26
djangoってなんで日本ではやらないんですか?
595デフォルトの名無しさんsage2008/05/29(木) 09:23:42
お前が使ってなんかすごいの作ってくれよ
596デフォルトの名無しさんsage2008/05/29(木) 09:42:04
なるほど、595さんみたいなダメな人しか使ってないからなんですね。
はやらない理由が分かりました。
597デフォルトの名無しさんsage2008/05/29(木) 12:35:53
>>593
2.Xでは互換性維持、3.0以降からitemsがiteritems相当になる、だったと思う
598デフォルトの名無しさんsage2008/05/29(木) 16:57:15
(日本では)、やらないか
599デフォルトの名無しさんsage2008/05/29(木) 17:56:25
アッー、、、
600デフォルトの名無しさんsage2008/05/29(木) 19:26:53
for k in (ここに使用):
としたときdictオブジェクトとかその.keys()いれたときのkに出てくる順番はどう決まるのですか?
601デフォルトの名無しさんsage2008/05/29(木) 19:29:39
シェフの気まぐれ順。
602デフォルトの名無しさんsage2008/05/29(木) 19:33:54
多分内部ハッシュ
気にしちゃダメ
順序に依存しない方法を考える>ordereddict自作
603デフォルトの名無しさんsage2008/05/29(木) 19:40:09
>>599
ところでおまいら温泉行く?
604デフォルトの名無しさんsage2008/05/29(木) 19:58:22
了解しました
どうもありがとうございました
605デフォルトの名無しさんsage2008/05/29(木) 21:05:55
webアプリケーションフレームワークを使わないpython製のCMS(WIKI、BLOG含む)って
MoinMoinとPyblosxomくらいですか?
606デフォルトの名無しさんsage2008/05/29(木) 21:08:28
温泉はいつも行ってる
607デフォルトの名無しさんsage2008/05/29(木) 21:15:24
>>594
一時期マイブームだったけど
完成が速すぎて今はメンテナンスだけ
また何か作るときにお世話になると思う

以下djangoに限らずweb開発環境全般に言えるんだが

それなりの努力でそこそこのものが出来るのは利点だけど
プログラミングの面白さはあんまりないかも知れない

djangoだけで出来ない部分を自分でプログラムする訳だけど
そこは最初からdjango使わなくても出来ると言えば出来る訳で
あえてdjango使うのは手間を減らすためだから
djangoで出来る範囲のことをdjangoに精いっぱいやらせるのが良い

「知ってれば簡単」という状態を期待してdjangoを使っている
だけどそのためにはdjangoでどうするのかを知ってないといけない
すごいジレンマが起きる
一通り覚えるまで苦労する
608デフォルトの名無しさんsage2008/05/29(木) 21:35:42
turbogearsってなんで日本
609デフォルトの名無しさんsage2008/05/29(木) 22:51:51
そういやZopeとかもあったなぁ。くだらないアプリだったけど。
あってもなくてもどうでもよかった。
610デフォルトの名無しさんsage2008/05/29(木) 22:53:36
python2 と3の違いが列挙されているサイトはありませんか?
611デフォルトの名無しさんsage2008/05/29(木) 22:58:26
http://gihyo.jp/dev/feature/01/python3000/
612デフォルトの名無しさんsage2008/05/29(木) 23:00:19
>>611
ありがとうございます
どのように変わるのか知りたかったのでこれから見てみようと思います
613デフォルトの名無しさんsage2008/05/29(木) 23:37:35
本家のも見ておくと良いかも
http://docs.python.org/dev/3.0/whatsnew/3.0.html
614デフォルトの名無しさんsage2008/05/30(金) 10:02:34
楽しようとして倍苦労する
そして二度と使わない
615デフォルトの名無しさんsage2008/05/30(金) 11:27:00
3つのなかではdjangoが一番おすすめなの?
616デフォルトの名無しさんsage2008/05/30(金) 11:48:16
>>615
お手軽・・・ならDjangoかもな。
まじめにやるなら、Paste/Pylonsで、wsgiをベースにしたデザインのフレームワークを使った方が良いかも知れない。
617デフォルトの名無しさんsage2008/05/30(金) 12:19:33
日本のコミュニティのgdgdぶりならdjango,pylonsもかわりないよ!
618デフォルトの名無しさんsage2008/05/30(金) 15:47:25
import するとそれのpycが作られてしますんですがこれを抑制できませんか?
変数がつまったちょくちょく変更される.pyのファイルがあり、
それを実際動かすほうで取り込んで変数を使っているのですが
pycがあるといちいち消さなくてはいけなくて不便です
619デフォルトの名無しさんsage2008/05/30(金) 16:00:27
>>618
pycを消す必要はないと思うが。
タイムスタンプが古ければ無視されるから害はないかと。
620デフォルトの名無しさんsage2008/05/30(金) 16:06:36
そうだったんですか、pyc優先だと思い込んでました
どうもすいません
ありがとうございました
6215752008/05/30(金) 16:42:02
>>589

そのやり方でできました!

↓に落ち着こうと思っていたんですが、気持ち悪いなーと思っていました。
for k,v in item.iteritems(): exec '%s = u"%s"' % (k,v)

そちのやり方の方が分かりやすく安全ですね。使わせていただきます。すば
らしいです。ありがとうございます。

pysqliteのマニュアルはtutorial部分ちゃんと読んだつもりなんですが、
そのやり方は知らなかったです。
622デフォルトの名無しさんsage2008/05/30(金) 17:13:56
あれ?チュートリアルに書いてなかったか?
いや、2.5のドキュメントの方か。
623デフォルトの名無しさんsage2008/05/30(金) 19:58:50
サンプルソース
624デフォルトの名無しさんsage2008/05/30(金) 20:00:35
code/execute_2.py
code/execute_3.py
625デフォルトの名無しさんsage2008/05/30(金) 23:09:01
ここにも書いてある
http://docs.python.org/lib/sqlite3-Cursor-Objects.html
626デフォルトの名無しさんsage2008/05/31(土) 00:40:25
コミュニティコミュニティうさんくさい。
627デフォルトの名無しさん2008/05/31(土) 01:10:01
長門とPython
http://d.hatena.ne.jp/yuyarin/20080529/
628デフォルトの名無しさんsage2008/05/31(土) 01:18:33
日本のPythonユーザー激増ですね。わかります
629デフォルトの名無しさんsage2008/05/31(土) 02:38:21
>>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とか*の使い方は覚えておくと応用が利く
630デフォルトの名無しさんsage2008/05/31(土) 03:45:29
そして%sにとんでもない内容のSQLをぶち込まれて涙するわけですね
631デフォルトの名無しさんsage2008/05/31(土) 03:59:27
そして高木先生に怒られるわけですね
632デフォルトの名無しさんsage2008/05/31(土) 04:24:39
>>627
>おはようって言ったらおはようって返してくれるよ!

sugeee---!!!
633デフォルトの名無しさんsage2008/05/31(土) 04:34:13
>>629
%s と ? の数も zip(*d.items()) の個数で自動にできませんか?
634デフォルトの名無しさんsage2008/05/31(土) 09:01:54
d = { 'age': 23, 'job': 'neet', 'height': '164' }
locals().update(d)

じゃだめなの?
635デフォルトの名無しさんsage2008/05/31(土) 09:13:11
オタはRubyでもやってろ。
それか死ね。
636デフォルトの名無しさんsage2008/05/31(土) 09:21:56
>>627
>おはようって言ったらおはようって返してくれるよ!

kimeeeeeeeeeeee------------------------(wwwwwwwwwwww
637デフォルトの名無しさんsage2008/05/31(土) 09:23:13
>>630
辞書のキー側にunsafeな文字列入れるわけ無いじゃん。
638575sage2008/05/31(土) 09:27:52
>>629

なるほど。面白いやり方ですね。勉強になります。

早速zipについてライブラリリファレンスを見てるんですが、
zip(*d.items())についている*の意味が分かりません。

検索にも引っかからないんで、もしよかったら教えていただ
けませんか?

よろしくお願いします。
639デフォルトの名無しさんsage2008/05/31(土) 09:31:56
>>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
640デフォルトの名無しさんsage2008/05/31(土) 09:33:33
>>638
http://www.python.jp/doc/release/tut/node6.html#SECTION000000
641デフォルトの名無しさんsage2008/05/31(土) 09:38:49
>>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) で行けると思う。
642デフォルトの名無しさんsage2008/05/31(土) 09:39:24
>>632
リアルで女と話したこと無いだろ(wwwww
あ、かあちゃんは女じゃないからな(wwww
643デフォルトの名無しさんsage2008/05/31(土) 09:43:30
>>> 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)
644641sage2008/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()とかイラネェ
645デフォルトの名無しさんsage2008/05/31(土) 10:08:38
>644
d={u'長門':(u'おはよう', u'おはよう')}

これでおk。
 
 
 
 
つーかきめぇ(www
646643sage2008/05/31(土) 10:11:02
>>> wiki=''; template=[]
>>> w=dir(wiki); t=dir(template)

>>> for e in set(w).intersection(set(t)):
...    print e,
>>> for e in set(w).symmetric_difference(set(t)):
...    print e,

共通項と相違な部分を列挙していけば
落とし所が見えてくるような…

共通基盤と、それを支えるplug-in機構、
そして,できるだけコンパクトに…

http://pythonpaste.org/webob/differences.html
wiki自作とか、車輪の再発明かもしれんけど
繰り返してブラッシュアップしてくものかもしれん

http://ninjinix.x0.com/mono/index.cgi
雨降って暇だし、移植してみるか…
647デフォルトの名無しさんsage2008/05/31(土) 12:55:44
ttp://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/yuyarin/20080529/

キメェ(www
648デフォルトの名無しさんsage2008/05/31(土) 14:10:49
>>647
>長門は俺のIDLE
だれが上手いこと
649デフォルトの名無しさんsage2008/05/31(土) 14:43:03
ツッコミ入ってるのに延々やってる奴いい加減自重しる

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)
650643sage2008/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 するのってどうすればいいんだろう…
651デフォルトの名無しさんsage2008/05/31(土) 15:25:22
>>650
sort(key = os.path.getmtime())
http://codepad.org/h7Fb2zrE
652643sage2008/05/31(土) 16:32:34
>>651
http://codepad.org/PRAzdgBm

dirs = os.listdir(FOLDER) は

>>> type(os.listdir('./'))


リストしか返さない罠
653デフォルトの名無しさんsage2008/05/31(土) 16:56:16
>>652
だから?
654デフォルトの名無しさんsage2008/05/31(土) 17:43:43
だから651は馬鹿
655デフォルトの名無しさんsage2008/05/31(土) 17:44:21
Perlでいう
@salt = ['a'..'z', 'A'..'Z', '0'..'9', '.', '/']
これをPythonで書きたいんだけど、スッキリ書く方法ないですか?
シーケンス型なら何でもいいです。
656デフォルトの名無しさんsage2008/05/31(土) 17:52:04
題意に沿ってるかは怪しいけど
salt = list("azAZ09./")
657656sage2008/05/31(土) 17:54:04
うん、範囲演算子っぽいものが見えなかったんだ
吊ってくる
658デフォルトの名無しさんsage2008/05/31(土) 18:00:57
標準ではないから、すっきり書きたいなら関数を一つ書く必要があるね
salt = 'abcdefghi...' とベタに書くのが一番簡単かもしれない。
659デフォルトの名無しさんsage2008/05/31(土) 18:02:25
>>655
import string
string.letters + string.digits + './'
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./'
660デフォルトの名無しさんsage2008/05/31(土) 18:09:54
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./'))
とでもするとかな
661デフォルトの名無しさんsage2008/05/31(土) 18:17:49
import re
re.findall(r"[a-zA-Z¥./]", "".join(map(chr, range(256)))
662デフォルトの名無しさんsage2008/05/31(土) 18:22:39
PerlはTMTOWTDI
Pythonは誰が書いても同じようなコード

そう信じていたころが僕にもありました
663デフォルトの名無しさんsage2008/05/31(土) 18:28:03
mがNoneで脂肪
664655sage2008/05/31(土) 18:42:39
やっぱり、標準的な構文で簡単に書く方法はないですか。
今は>>659の書き方をしてますが、もっと汎用的な方法があればと
思ったのですが。

>>661
まいりました _no
665デフォルトの名無しさんsage2008/05/31(土) 19:18:42
>>664
http://www.daniweb.com/forums/thread71264.html
http://www.daniweb.com/code/snippet649.html

入れ子になったデータを展開する関数を定義して上げて
rubyだとbuilt-inで リスト#flattenメソッド list.flatten() 使う

http://codepad.org/0EAY6tJ7

再帰で、入れ子を展開してから、次の処理に繋いでく
666デフォルトの名無しさんsage2008/05/31(土) 20:13:00
import re
re.findall(r"[a-zA-Z0-9¥./]", "".join(map(chr, range(256)))
667デフォルトの名無しさんsage2008/05/31(土) 21:39:30
>>664
a-zとかいう書き方は、aからzまでの文字コードが連続している環境に依存した書き方。
「汎用的な書き方」ではないので注意。
でも、Unicode文字列なら環境依存とか気にしないでいいから、こういった範囲指定構文もほしいね。
c-f なんて何に使うのか知らないけど。
668デフォルトの名無しさんsage2008/05/31(土) 21:41:22
0-255の文字列はstring.maketrans('','')でもいいな
669デフォルトの名無しさんsage2008/05/31(土) 21:55:37
>>667
こらこら嘘を言うな
670デフォルトの名無しさん2008/05/31(土) 23:36:46
>>669
どのへんが嘘?
>a-zとかいう書き方は、aからzまでの文字コードが連続している環境に依存した書き方。
これ?
671デフォルトの名無しさんsage2008/05/31(土) 23:51:40
ぶっちゃけEBCDIC環境とか気にしたこと一度もないな
ましてPythonではな
672デフォルトの名無しさんsage2008/06/01(日) 00:43:19
突然だけどVPython面白いね。
betaで半透明も使えるようになってるし。
簡単な3Dオブジェクト動かしてデモさせるのにええよ。
673デフォルトの名無しさん2008/06/01(日) 00:58:50
import re
re.findall(r"[a-zA-Z0-9¥./]", "".join(map(chr, range(256))))
674デフォルトの名無しさんsage2008/06/01(日) 01:01:55
>>672
出来あがった画をmpgやgifに出来ますか?
675デフォルトの名無しさんsage2008/06/01(日) 02:10:36
わたしもみてみたいなあ
676デフォルトの名無しさんsage2008/06/01(日) 02:16:33
>>672
長門も作れるかな?
677デフォルトの名無しさんsage2008/06/01(日) 02:43:45
そっから離れようぜ
678デフォルトの名無しさんsage2008/06/01(日) 07:20:54
>>655
A-Za-z0-9./ で作ったシーケンスは何に利用するの?

場合によっては、(Pythonでは)そもそもシーケンスを作るという必要がない可能性が。

679デフォルトの名無しさんsage2008/06/01(日) 07:31:04
saltって書いてあるがな
680デフォルトの名無しさんsage2008/06/01(日) 09:15:01
じゃあハルヒは作れるの?
681デフォルトの名無しさんsage2008/06/01(日) 10:01:52
>>678
trip解析だろ
682デフォルトの名無しさんsage2008/06/01(日) 10:10:41
こらこら嘘を言うな
683デフォルトの名無しさんsage2008/06/01(日) 10:39:49
昨日から考えてたが>>652が何を言いたいかわからん
684デフォルトの名無しさんsage2008/06/01(日) 10:48:55
それ以前に>>644からの流れが謎すぎて
685デフォルトの名無しさんsage2008/06/01(日) 10:49:51
ああ>>646
686デフォルトの名無しさんsage2008/06/01(日) 15:05:22
>>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 = ''

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には正しく入っているので接続はうまくできているみたいなのですが、書き込みの方が

>


とエラーが出て、どうやらうまく接続すらできていないようです。
urllibあたりの使い方が適切でないのかなと思っているのですが、心当たりのある方はいらっしゃらないでしょうか。
688デフォルトの名無しさんsage2008/06/01(日) 21:28:35
>>687
> pyhtonで2chに書き込むスクリプトを書こうとしているのですが、

なるほど、スクリプト荒らしか
689デフォルトの名無しさんsage2008/06/01(日) 21:33:07
>>688
そうそうその通り、ってちげーよw
cuiな2chブラウザが作りたいだけぽ
690デフォルトの名無しさんsage2008/06/01(日) 21:36:07
urllib2.urlopen()の後でread()抜けてる
691デフォルトの名無しさんsage2008/06/01(日) 21:39:59
>>690
あ、ほんどだ・・・
すみません、また分からなかったら聞きにきます><
692デフォルトの名無しさんsage2008/06/01(日) 21:40:30
やれば出来る子なんですよ。
やる気になったことがないだけで。
693687sage2008/06/01(日) 22:21:18
やった、書き込めた
わっしょい、わっしょい、わっしょい!
694デフォルトの名無しさんsage2008/06/01(日) 22:56:56
FileCookieJarとかでキチンとスクリプト内でクッキーのやり取り行える様にしたほうがよくねえか?
695デフォルトの名無しさんsage2008/06/01(日) 23:17:27
スクリプトのテストとかは厨房板じゃなかったけかな
普通の板でオイタするとアク禁されちゃうぞ
696デフォルトの名無しさんsage2008/06/02(月) 03:45:56
誘導
http://pc11.2ch.net/test/read.cgi/unix//
697デフォルトの名無しさんsage2008/06/02(月) 10:32:28
書き込みテストとスクリプトのテストは違うけどな・・・
698デフォルトの名無しさんsage2008/06/02(月) 10:37:47
まあ古きよき MH みたいにコマンドラインで扱える 2ch ってのが
あってもいいとは思うけど悪用されやすそうだな…
699デフォルトの名無しさんsage2008/06/02(月) 16:54:47
読み込みは比較的簡単にできるのだが
書き込みが面倒くさいんだよなぁ。
700デフォルトの名無しさんsage2008/06/02(月) 17:20:56
doreamhost申し込むとgoogle app eng が使えるんだな
知らなかったぜ
701デフォルトの名無しさんsage2008/06/02(月) 19:08:25
知らない間にJinjaが準公式ライブラリになってたんだな。
702デフォルトの名無しさんsage2008/06/02(月) 23:27:24
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の関連付けは出来ていると思うのですが、なにが足りないのでしょうか?
703デフォルトの名無しさんsage2008/06/02(月) 23:30:42
>>702
ttp://support.microsoft.com/default.aspx?scid=kb;en-us;321788
704デフォルトの名無しさん2008/06/02(月) 23:31:57
level
705デフォルトの名無しさんsage2008/06/02(月) 23:33:32
>>703
ありがとうございます!!
これで解決できそうです!!
706デフォルトの名無しさんsage2008/06/03(火) 02:48:30
>>700
意外と使うやつ増えるかと思って
doreamhostの割引コード生成してきた

PRLIQUID
707デフォルトの名無しさんsage2008/06/03(火) 10:21:17
Python では組み込みの辞書クラスやリストクラスを継承して
何か新しいメソッドを追加するなどということができるのでしょうか?

C++ でコンテナクラスライブラリを継承して用途に特化した
メソッドを追加するということを時々するのですが,
同様のことが Python でもできれば便利だなと思っています.
708デフォルトの名無しさんsage2008/06/03(火) 10:25:10
基本的型 である int, float, str, list, tuple, dict と file は、
2.2 以降、 基底クラスオブジェクトを継承したクラスとして動作する。
その継承もできる。
ーーーーーーーーー
ということらしい.
709デフォルトの名無しさんsage2008/06/03(火) 10:55:17
>>700
>>706
スペルが違う
dreamhost.com
710デフォルトの名無しさんsage2008/06/03(火) 11:16:29

登録できたけど次に何して遊ぼう
711デフォルトの名無しさんsage2008/06/03(火) 12:32:16
リンク貼っておくから、宣伝やめて。

【海外鯖最強】 DreamHost 【200GB/月$9.95】
http://pc11.2ch.net/test/read.cgi/hosting//
712デフォルトの名無しさん2008/06/03(火) 12:44:54
Python であるオブジェクトの方を表示するにはどうすればいいのでしょうか?
単にある文字列がバイト列の文字列(というのか?)なのか Unicode 文字列
かというのを判定したいのですが、できればより一般的に任意のオブジェクトの
型情報をデバッグ時に表示させたいことがあります。

C++ における typeof のようなものをイメージしています。
7137122008/06/03(火) 12:46:44
すんません、勘で type(object) のようにしてみたら
なんか取得で北っぽい。
714デフォルトの名無しさんsage2008/06/03(火) 12:48:32
typeofに相当するものなら、組み込み関数にtype()があるけど
715デフォルトの名無しさんsage2008/06/03(火) 13:08:27
旧スタイルクラスは型ではないので
typeは全部classobj / instanceになるんで注意汁
7167122008/06/03(火) 13:44:11
>>715
たしかに、codec.open で返ってくるファイルオブジェクトを
type でみたら instance になっちゃうね・・・
最近 boost.python に触発されて使い始めたばっかりだから
「旧スタイル」ってのがわからないが。

boost.python のおかげで C++ ともうまくやっていけそう。
717デフォルトの名無しさんsage2008/06/03(火) 13:47:34
>>> class OldStyle: pass

>>> class NewStyle(object): pass

objectを継承するかどうかで決まる
718デフォルトの名無しさんsage2008/06/03(火) 13:49:23
>>716
組み込みのobjectから直接ないし間接に継承してるクラスは
new style classになり、そうでないものが旧スタイル、のはず

とりあえずclassobjの場合はcls.__name__
instanceの場合はobj.__class__.__name__
とかやればクラス名は取れる

単にxはAのインスタンスかを知りたい場合は
isinstance(x, A)を使うといいよ
これは旧スタイルクラスに対しても意図した通りに働く
7197122008/06/03(火) 14:57:27
よくわかりました、ありがとう。
ところで print ステートメントで簡単にデバッグ用表示が
できるようい __str__ メソッドを用意してみたんだけど、
Unicode 文字列を返しちゃだめなんだね・・・
720デフォルトの名無しさんsage2008/06/03(火) 15:06:50
__unicode__ もあるよ
721デフォルトの名無しさんsage2008/06/03(火) 15:32:54
デバッグなら__repr__
7227122008/06/03(火) 16:15:32
おお、いろいろあって面白いな。
今ディープコピーしようとして import copy して
y = copy.copy(x) とかするって知ったんだけど、
結局ダックタイピングだから __deepcopy__()
が定義されていればいいということ?
じゃ、__deepcopy__() を直接呼び出せばいいんじゃね?
7237122008/06/03(火) 16:16:35
ディープコピーは copy.deepcopy(x) だった
724デフォルトの名無しさんsage2008/06/03(火) 16:23:43
ttp://coreblog.org/ats/stuff/python-codereading/event-02

725デフォルトの名無しさんsage2008/06/03(火) 22:30:07
>>724
具体的にどういうことやるの?
726デフォルトの名無しさんsage2008/06/03(火) 22:52:54
アッー
727デフォルトの名無しさんsage2008/06/03(火) 23:17:56
>>724
イベント全体としての趣旨と受講対象者は、どんな感じなんだろうか
勉強会は、建前で。出会い目的としての懇親会がメインなの?

あとcopyをテーマにした意図は、なんなんだろう

5.17 copy -- Shallow and deep copy operations
http://docs.python.org/lib/module-copy.html
3.18 copy -- 浅いコピーおよび深いコピー操作
http://www.python.jp/doc/release/lib/module-copy.html
728デフォルトの名無しさんsage2008/06/03(火) 23:22:26
>>727
>出会い目的としての懇親会

こういう感覚って逆に新鮮(wwww
729デフォルトの名無しさんsage2008/06/03(火) 23:24:56
>>724
ていうか申し込みできないくさいんだが。
730デフォルトの名無しさんsage2008/06/03(火) 23:28:10
>729
すぐに満員になったから締め切ったんだよ.
なんとか温泉とは大違いだね.
731デフォルトの名無しさんsage2008/06/03(火) 23:38:54
>>728
もちろん、異性出会いという意味じゃないよ
勉強会とか、学校っていわゆる人脈づくりが目的でしょ?

人脈というとなんかあれだけど
732デフォルトの名無しさんsage2008/06/03(火) 23:53:04
>>731
>異性出会いという意味じゃないよ

誰もそんなこと言ってないけど(wwww
733デフォルトの名無しさん2008/06/04(水) 00:18:33
pythonってなんかいい本ある?
734デフォルトの名無しさんsage2008/06/04(水) 00:23:30
LLやるとモテますか?
735デフォルトの名無しさんsage2008/06/04(水) 01:09:44
>>732
誰かが言ってたら「そういう意味じゃないよ」みたいな書き方になるだろう。
まだ言っていないことを先に言うから「異性出会いという意味じゃないよ」と、説明的になる。

誰も言ってないから書かれたものに「誰もそんなこと言ってない」と返しても、あんまり意味が無い。
736デフォルトの名無しさんsage2008/06/04(水) 01:19:17
見えないレスと戦っている人がいるんだな。
737デフォルトの名無しさんsage2008/06/04(水) 01:43:01
同性出会いってこと?
738デフォルトの名無しさんsage2008/06/04(水) 03:20:13

勉強会初心者ですが質問させてください。
女性の参加者は全体の何%くらい居ますか?
739デフォルトの名無しさんsage2008/06/04(水) 03:43:20
>>738
大抵0%だから安心していいよ。
740デフォルトの名無しさんsage2008/06/04(水) 03:56:26
copy読んでも面白くなさそうだけどなぁ。
IronPythonのソース読むなら参加したいかもw
741デフォルトの名無しさん2008/06/04(水) 08:09:17
ログインシェルをPythonにして生活出来ないものかと試してみたがにっちもさっちも行かなくなった
そういう使い方は無しなのか。
742デフォルトの名無しさんsage2008/06/04(水) 08:56:17
>>741
IPythonならもう少し何とかなると思うよ。
でも、最近のbashとかまでは補完機能強くないなぁ。
743デフォルトの名無しさんsage2008/06/04(水) 08:57:25
>740
こういう奴に限って基本が抜けている。
たいてい仕事に使えないので注意。
744デフォルトの名無しさんsage2008/06/04(水) 09:09:29
>>734
非モテはLLやっても非モテだろJK(wwwwwwwwwwwwwwwwwwwww
745デフォルトの名無しさんsage2008/06/04(水) 11:04:15
>>727



MLがあるみたいだから読んでみればいいんじゃね?ていうかggrks?
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
整形してみました
http://pastebin.windy.cx/?page=view&id=
2ch でうまくコードを整形して表示させるのは難しいなぁ.
748デフォルトの名無しさんsage2008/06/04(水) 11:29:31
a = [i for i in a if a != ""]
749デフォルトの名無しさん2008/06/04(水) 11:29:42
while '' in a: a.remove('')
これでも同じか…
in を処理するときにいちいちサーチしているんだよねぇ
750デフォルトの名無しさんsage2008/06/04(水) 11:36:14
>>748
そこでiをチョイスするのはなんだかなぁとおもった。
751デフォルトの名無しさんsage2008/06/04(水) 11:37:12
a = filter(lambda x:x!="", a)
752デフォルトの名無しさんsage2008/06/04(水) 11:39:33
filterおじさんキターーー!!!
753デフォルトの名無しさん2008/06/04(水) 11:39:47
>>748
ふむ,そういう書き方をするのか.
リストの内包表現というのだな・・・
他の言語から来た人間には目新しい。
たぶん Python にはたくさんそういう技があるんだろう。
C/C++/Java しか触ったことないから違いだけに着目して勉強したい。
754デフォルトの名無しさんsage2008/06/04(水) 11:40:04
a = list(itertools.ifilterfalse(None, a))

> ifilterfalse( predicate, iterable)
> predicateがFalseとなる要素だけを返すイテレータを作成します。
> predicateがNoneの場合、値が偽であるアイテムだけを返します

755748sage2008/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 と
最大で同じだけの大きさのリストができてしまうのは仕方ないのか。
757デフォルトの名無しさんsage2008/06/04(水) 11:47:18
といってもリストに入ってるのは参照だけだから問題な鹿。
758デフォルトの名無しさんsage2008/06/04(水) 11:59:03
a[:] = itertools.ifilterfalse(None, a))
ならワークの配列なしのinplaceな変換になるんじゃないかな
759デフォルトの名無しさんsage2008/06/04(水) 12:00:47
ごめん
余分な ) がついてた
760デフォルトの名無しさんsage2008/06/04(水) 12:04:17
>>756
del という手もある。

a = ["", "a", "b", "", "c"] 
i = 0
while i < len(a):
    if a[i] == "":
        del a[i]
    else:
        i += 1
print a
761デフォルトの名無しさんsage2008/06/04(水) 12:07:49
>>760
最初はそれでやろうと思ったんですが、
del すると要素数が変わっちゃうなぁと思いまして。
でも毎回 len(a) でチェックしてるからいいのか。

>>758
先頭の a[:] の効果って何なんでしょうか?
スライス・・・・・・とりあえず全部の要素をさしている?
762デフォルトの名無しさんsage2008/06/04(水) 12:10:39
a = [x for x in itertools.ifilter(lambda x: x!="", a)]
ってやっちゃったら、当然中間生成物(?)ができますよね。
763748sage2008/06/04(水) 12:14:26
>>762
なにそのキメラ(wwwww
764デフォルトの名無しさんsage2008/06/04(水) 12:15:42
>>761
代入文の左辺がsliceの場合は、その範囲がクリップされて、
そこに右辺のシークエンスを突っ込むんだよ

ぶっちゃけ書いてはみたけど、俺ならこんな書き方はしない
765デフォルトの名無しさんsage2008/06/04(水) 12:16:27
>>763
だって120秒前まではスライス代入なんて構文知らなかったから(笑
ラムダ式が使えるってさっき知った。
766デフォルトの名無しさんsage2008/06/04(水) 12:17:32
>>764
in-place にこだわらなければ内包表記ですか?
767デフォルトの名無しさんsage2008/06/04(水) 12:26:53
>>766
うん
というか、一見ワークを使ってないように見えて、こんなのが動くってことは
多分使ってるんじゃないかな
結局、わかりにくい上に遅くなるだけだと思う
768デフォルトの名無しさんsage2008/06/04(水) 12:27:13
文字列しか入っていないならfilter(len,a)でもいいな
769デフォルトの名無しさんsage2008/06/04(水) 12:38:17
あんまりワーク使うとかこだわらないな。
そもそも、そういうことにこだわるレベルのコード書くのににPython使わない。
770デフォルトの名無しさんsage2008/06/04(水) 12:56:05
>>769
確かにメモリが不足するほどの作業をPython使ってやるものじゃ
ないのかもしれませんね。ただ、自分はいままで C++ と Java
でやってた結構メモリを食う操作(大規模なグラフ構造の処理とか)
をやってみようと思ってたんで、逆にヒープ(ってPythonでも言う?)
が不足してOSからメモリを取得しようとしてページングもガリガリ
おき始める手前くらいまではメモリを使い切りたいって思ってます。

いましがたでっかい辞書とかリストを作りまくってみたら1.7GBくらい
メモリを消費したところでやばい気がしたのでpython.exeをきりました。
逆に「ここまでならメモリ使っていいよ」って上限をpython処理系に
最初から教えてあげるとかプログラム内から指定するってことは
できるんですかね。それは言語の仕様の外?あくまで言語としては
例外が投げられるよってところまで?
771デフォルトの名無しさんsage2008/06/04(水) 13:38:06
Windows Server系だと、リソースマネージャでその辺のリソース割り当てを
設定できるみたいだな
772デフォルトの名無しさんsage2008/06/04(水) 13:51:33
タブ区切りのレコードをパース仕様としていてはまった
"".split("¥t") って [""] なんだな。
"".split("¥t") を [] と比較していたよ。
Python という言語とはあんまり関係ないかも試練が。
773デフォルトの名無しさんsage2008/06/04(水) 13:54:37
>>770
以下の不等式が成り立つならメモリをガッツリ爪

メモリの値段 < お前が考えている間の人件費
774デフォルトの名無しさんsage2008/06/04(水) 13:57:38
>>772
自然にsplit()を実装すれば当然そうなるし、自然な仕様だと思うよ

"a".split("¥t") -> ["a"]
なんだから
"".split("¥t") -> [""]
でしょう
775デフォルトの名無しさんsage2008/06/04(水) 14:50:50
>>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が渡されたら、区切ってリスト化する…
776デフォルトの名無しさんsage2008/06/04(水) 15:01:59
>>> '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', '']
777デフォルトの名無しさんsage2008/06/04(水) 15:20:34
>>> "".split("¥t") 分割失敗。塊は一つ
[""]

>>> 'a'.split('a') 分割成功。塊二つ
['', '']

分割したら、その結果、いくつに分かれるかか…
なんかよく考えてみるややこしいな
7787722008/06/04(水) 16:28:03
ううむ、こんなにレスが付いてるとは。
まぁ当たり前の仕様といえばそうだけど。
split したものを join したら必ず元に戻るという保証はあるわけか。

ところで、UTF-8で円コーディングされてるJSON形式のデータって、
Pythonでもそのままパースできるよね?タブ区切りのデータ処理
できるようにしたら、JSON形式でも突っ込む予定ありだからよろしく
って言われた。
779デフォルトの名無しさんsage2008/06/04(水) 16:55:06
ここまでならメモリ使っていいよって上限をpython処理系に
最初から教えてあげるとかプログラム内から指定するってことはできるんです
780デフォルトの名無しさん2008/06/04(水) 17:02:38
Pythonって{}な括弧はどんなところで使うの?
781デフォルトの名無しさんsage2008/06/04(水) 17:13:42
dictのリテラル(3.0ではsetも)
782デフォルトの名無しさん2008/06/04(水) 17:25:43
>>781
それだけっすか?
Pythonって記号が少ないですね。
783デフォルトの名無しさんsage2008/06/04(水) 18:03:58
>779

なにがしたいの? (それはOSの仕事だと思うヨ)
784デフォルトの名無しさんsage2008/06/04(水) 19:17:21
> なにがしたいの? (それはOSの仕事だと思うヨ)

779じゃないけど、ヒープが実メモリに収まっているうちにガベコレを走らせたい
とかそういう需要はあるかと。ってもpythonだとリファレンスカウントか。
785デフォルトの名無しさんsage2008/06/04(水) 22:50:10
for i in xrange(1e100):
  hoge['hoge%d' % i] = 'fuga%d'
786デフォルトの名無しさんsage2008/06/04(水) 22:58:03
hoge = {}
for j in xrange(10):
  for i in xrange(10**j):
    hoge['hoge%d' % i] = 'fuga%d'
  print j, len(hoge)
787デフォルトの名無しさんsage2008/06/04(水) 23:07:53
>>782 はおれがPythonを気に入った理由…
788デフォルトの名無しさんsage2008/06/05(木) 02:11:47
Rubyのbeginendも邪魔だけど
Cの{}さえも邪魔とか
789デフォルトの名無しさんsage2008/06/05(木) 02:57:42
括弧が少ないのは慣れると思った以上に快適
790デフォルトの名無しさんsage2008/06/05(木) 08:22:54
明示的なlisp叩きですね、わかります
791デフォルトの名無しさんsage2008/06/05(木) 15:30:45
Lisp の括弧の色を薄くする設定のエディタもあったらしいが…
括弧なんて飾りです!
792デフォルトの名無しさんsage2008/06/05(木) 16:30:24
括弧が多いとほんと見辛い。
使ってると見慣れてくるもんなんだろうか。エディタで色分けしてるのかな。
793デフォルトの名無しさん2008/06/05(木) 16:37:02
Pythonのインデントってタブなの?スペースなの?
794デフォルトの名無しさんsage2008/06/05(木) 16:38:44
スペース4個
795デフォルトの名無しさんsage2008/06/05(木) 18:16:38
スペースだとインデント戻すのにBS4回押すのが面倒なのでタブ派
796デフォルトの名無しさんsage2008/06/05(木) 18:23:38
>>795
IDLE とか Emacs の Python モードならスペース4個のインデントを一括で入力したり削除したりできるよ。
797デフォルトの名無しさんsage2008/06/05(木) 19:14:17
タブ幅を4にする派
798デフォルトの名無しさんsage2008/06/05(木) 19:41:44
pythonの開発者は、google用コードがスペース2個、
オープンソース用コードがスペース4個、
タブを使ったコードは俺のコードじゃない、とか言ってたな。
799デフォルトの名無しさん2008/06/05(木) 20:22:19
boostのコーディング規約でも
タブがスペース何個に相当するかまちまちだから
いっそのことタブは使わないようにしたって書いていた
800デフォルトの名無しさんsage2008/06/05(木) 20:24:43
おっと3タプ同盟はスレ違いだ
801デフォルトの名無しさんsage2008/06/05(木) 22:40:28
世界中のプログラマがスペース2でコーディングしてくれたらいいのにな。
802デフォルトの名無しさんsage2008/06/05(木) 23:19:16
エンコードの指定つけたんだから、タブ幅の指定もつければいいのに。
803デフォルトの名無しさんsage2008/06/05(木) 23:20:21
802は自分でクソ言語つくればいいとおもうよ。
804デフォルトの名無しさんsage2008/06/05(木) 23:30:19
単なる色分け表示だけじゃなくて、入力補完もできるので
軽いエディタないかな?
805デフォルトの名無しさんsage2008/06/05(木) 23:34:32
>>802
Emacs の Python モードなら
# -*- coding: sjis; py-indent-offset: 2 -*-
とかすればオケ。IDLE では効かなかった。
806デフォルトの名無しさんsage2008/06/05(木) 23:45:13
まじ?ちょっとコンビニでEmacs買ってくる
807デフォルトの名無しさんsage2008/06/05(木) 23:54:22
>>806
3点
808デフォルトの名無しさんsage2008/06/05(木) 23:54:28
python-mode使うならpymacsとpy-completeも入れるのオヌヌメ
809デフォルトの名無しさんsage2008/06/05(木) 23:56:27
>>808
いれるとどうなるんですか?
810デフォルトの名無しさんsage2008/06/06(金) 00:08:13
xyzzyのpythonモード用lisp使ったら、
途中にコメント行があるとインデント
うまく認識してくれんかったんだよな…
811デフォルトの名無しさんsage2008/06/06(金) 02:11:48
xyzzy の py-mode はエディタが固まるバグがあるから嫌い
812デフォルトの名無しさんsage2008/06/06(金) 05:33:40
試しにMeadowで開いてみたけど、"""の中で"を使っていると
色分けがおかしくなるなぁ。
813デフォルトの名無しさんsage2008/06/06(金) 08:51:18
http://coreblog.org/jp
これ使ってる人あんまりいないみたいだけど
なんで?
814デフォルトの名無しさんsage2008/06/06(金) 09:11:00
>>813
「Plone又はZope環境で稼働するプログラム。」
↑が原因じゃない?
海外だとplone人気らしいけど、日本だとほとんど聞かないし。
815デフォルトの名無しさんsage2008/06/06(金) 09:17:22
>812
面倒だから " は偶数回使うことにしている
816デフォルトの名無しさんsage2008/06/06(金) 09:29:31
>>801
自分はそうしてる
千里の道も一歩から
千個のレスも一個から
自分で出来ることから始めるしかないと思う
817デフォルトの名無しさんsage2008/06/06(金) 11:01:22
俺はスペース四つだなn
818デフォルトの名無しさんsage2008/06/06(金) 11:11:25
emacsの時はスペース4つだが、
たまにviで小物をかき捨てるときはスペース1つ。
819デフォルトの名無しさんsage2008/06/06(金) 11:37:12
vimではexpandtabs指定、インデントはスペース4つ分だな
まあ、vi系だとindent/dedentって^D,^Tや<<,>>でやるから
あまり意識することは無いが

vimじゃないviは最近使ったことが無いが、expand通しとかないと怪しいかな
820デフォルトの名無しさんsage2008/06/06(金) 11:55:27
スペース4つだと def や for が美しくなるんだぜ。
821デフォルトの名無しさんsage2008/06/06(金) 13:37:13
def hogehoge:
  for fugafuga in sinesine:
    hagehage
def hogehoge:
    for fugafuga in sinesine:
        hagehage
822デフォルトの名無しさんsage2008/06/06(金) 14:29:15
def hogehoge:
   for fugafuga in sinesine:
      hagehage
823デフォルトの名無しさんsage2008/06/06(金) 16:41:21
なんで同じメソッドを何度も
def するんだ www
824デフォルトの名無しさんsage2008/06/06(金) 16:44:11
単にスペースの比較だろ
825デフォルトの名無しさんsage2008/06/07(土) 00:19:31
おまえらプロポーショナルフォントでソース書いてる?
826デフォルトの名無しさんsage2008/06/07(土) 00:34:19
ソースはフォントまで気にする時代なのかw
827デフォルトの名無しさんsage2008/06/07(土) 00:40:07
>>826
こんな馬鹿初めて見た
828デフォルトの名無しさんsage2008/06/07(土) 00:40:58
826は時代を超越したバカ
829デフォルトの名無しさんsage2008/06/07(土) 00:43:08
>>826 の人気に嫉妬
830デフォルトの名無しさんsage2008/06/07(土) 01:02:05
そういえば「プログラミング言語C++」ではコードの部分が
プロポーショナルフォントで書かれてたな
831デフォルトの名無しさんsage2008/06/07(土) 01:13:57
>>826
最高に頭の悪い発言をしてくださいinム板(XII)
http://pc11.2ch.net/test/read.cgi/tech//
832デフォルトの名無しさん2008/06/07(土) 01:19:26
hoge = {'hage':5, 'fuga':3, 'shine':1}
これを 5, 3, 1 の部分で sort して
fuga = ['shine', 'fuga', 'hage']
みたいな出力を欲しいのですが
sorted(hoge)
で合ってるのでしょうか?
833デフォルトの名無しさんsage2008/06/07(土) 01:20:52
>>825
英文にContras、日本語はメイリオを同幅にしてるのを使っている。
834デフォルトの名無しさんsage2008/06/07(土) 01:22:21
×Contras
○Consolas
835デフォルトの名無しさんsage2008/06/07(土) 01:26:41
sorted(hoge, lambda x,y: x>y)
836デフォルトの名無しさんsage2008/06/07(土) 01:30:37
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']
837デフォルトの名無しさんsage2008/06/07(土) 01:30:45
>>835
できました
ありがとうございました
838デフォルトの名無しさんsage2008/06/07(土) 01:31:38
>>> 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)]
839デフォルトの名無しさんsage2008/06/07(土) 01:36:32
>>835
x>yでもx
>>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)]
840デフォルトの名無しさんsage2008/06/07(土) 01:39:54
>>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)]
841デフォルトの名無しさんsage2008/06/07(土) 01:42:28
>>840
ありがとうございます
lambda の方が import 書かなくて良いのと他にも融通利きそうなので・・・

842838sage2008/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
843デフォルトの名無しさんsage2008/06/07(土) 03:00:43
>826やるなー。

馬鹿と賢い人が共存していて面白い。
844デフォルトの名無しさんsage2008/06/07(土) 05:56:11
>>843
http://pc11.2ch.net/test/read.cgi/tech//
845デフォルトの名無しさんsage2008/06/07(土) 09:33:16
self は全部 $ で書くと面白い
846デフォルトの名無しさんsage2008/06/07(土) 20:00:39
あのですねpytyonでcookielibつかってなんかクッキー処理してもらってるんだけど、
このクッキーってどっかに保存されてるの?
847デフォルトの名無しさんsage2008/06/07(土) 20:23:39
台所の棚の上
848デフォルトの名無しさんsage2008/06/07(土) 20:35:49
>>846
どのクラス使ってるのか知らんが、
saveメソッドを呼ばなきゃ保存されないと思う。
849デフォルトの名無しさんsage2008/06/07(土) 20:39:21
特に保存するような操作してなきゃ保存はされてないってことでいいのかな?
850デフォルトの名無しさんsage2008/06/07(土) 22:04:27
保存はされてる
不揮発デバイスへの
851デフォルトの名無しさんsage2008/06/07(土) 23:45:11
最近 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で探してもさっぱり見つからんのですが、誰か知ってる人
いませんか?
852デフォルトの名無しさんsage2008/06/07(土) 23:52:29
find /usr/lib -name 'gv.py'

853デフォルトの名無しさんsage2008/06/08(日) 00:00:09
graphviz-python を入れるとか
854デフォルトの名無しさんsage2008/06/08(日) 00:11:27
libgv-pythonとかいう奴じゃないのかな
855デフォルトの名無しさんsage2008/06/08(日) 00:21:53
おぉありがとう
でもwindows用のバイナリは無さそうな感じだ…
856デフォルトの名無しさんsage2008/06/08(日) 04:25:24
graphviz-2.18.tar.gz
graphviz-working.tar.gz
なんの問題もないと思うけど
857デフォルトの名無しさん2008/06/08(日) 09:37:24
俺も同じようなことしようとしてた。
Linuxでだけど。
Windows用のバイナリは無いのか
858デフォルトの名無しさんsage2008/06/08(日) 10:03:41
うちのPCの中にはある
859デフォルトの名無しさんsage2008/06/08(日) 10:17:28
これじゃねーの
ttp://www.graphviz.org/Download_windows.php
860デフォルトの名無しさんsage2008/06/08(日) 10:38:38
include/graphviz/gv.cpp
861デフォルトの名無しさんsage2008/06/08(日) 10:49:01
tclpkg/gv
862デフォルトの名無しさん2008/06/08(日) 11:02:27
この中に入ってない?
ttp://yapgvb.sourceforge.net/
863デフォルトの名無しさんsage2008/06/08(日) 11:05:42
http://pypi.python.org/pypi/pygraphviz/
864デフォルトの名無しさんsage2008/06/08(日) 11:12:48
おまえら日曜の朝から元気だな
865デフォルトの名無しさんsage2008/06/08(日) 11:20:47
http://pypi.python.org/pypi/networkx/
866デフォルトの名無しさんsage2008/06/08(日) 11:23:05
ビンビンです
867デフォルトの名無しさんsage2008/06/08(日) 11:32:28
>>862
入ってない

>>863
それもWindowsで動かないw

>>865
PyGraphviz前庭のようなので同上
868デフォルトの名無しさん2008/06/08(日) 11:33:40
gdgd
869デフォルトの名無しさんsage2008/06/08(日) 11:37:03
>>863 を取ってきて setup しろってことだろ
コンパイラ・・・
870デフォルトの名無しさんsage2008/06/08(日) 11:46:56
>> 812
最近の (22以降?) emacs に標準でついてくる python.el なら
triple quoted string の色づけをきちんとしてくれるみたいだね.

個人的には python-mode.el の方がpdb の対応とかで便利だから
色づけ設定の部分だけ python.el からマージしたものを使ってる
871デフォルトの名無しさんsage2008/06/08(日) 12:03:07
>>863

やってみた
setup.py の lib と include を graphviz のある場所にして
python setup.py build -c mingw32
でいけそう
872デフォルトの名無しさんsage2008/06/08(日) 12:03:22
>>863
VC Express か Windows SDK でコンパイルできるかなっ♪
873デフォルトの名無しさんsage2008/06/08(日) 12:07:21
>870
それぞれ全然別に作られてるってこと?
874デフォルトの名無しさんsage2008/06/08(日) 12:07:42
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.

875デフォルトの名無しさんsage2008/06/08(日) 12:20:49
>>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
876デフォルトの名無しさんsage2008/06/08(日) 12:21:45
Traceback (most recent call last):
File "setup.py", line 171, in
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
878デフォルトの名無しさんsage2008/06/08(日) 12:37:05
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を指定しないで同じことをやるとうまくいくんだけど
879878sage2008/06/08(日) 12:39:29
補足。
超短い入力だとtarget parser版も機能するみたいだったんだけど
まともな文書を食わせたときに
target parserを使わないケース(通常のTreeBuilderが使われてるケース)では
上手くいっても、カスタムtarget parser版だとエラーになったりするんだわ
880878sage2008/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 のどちらでも
動くようにポータブルに書けるのでしょうか?
882デフォルトの名無しさんsage2008/06/09(月) 00:06:38
>>881
まーそう。VMで動いてるのもあるし。
でもあくまでマルチスレッドなプログラミングモデルがつかえるだけで
アルチコアをフルに活用とかは期待しない方がいいよ。
883デフォルトの名無しさん2008/06/09(月) 03:11:19
タスクーに常駐するプログラムって、作れるんでしょうか?(スケジューラーなど)
windowsやlinuxのAPIを直接たたかないとだめですかね?
もしGUIライブラリの範囲で可能でしたら、どのライブラリならできるのかも教えていただきたいです。
884デフォルトの名無しさんsage2008/06/09(月) 03:18:31
タスクバーでした、すいません。
885デフォルトの名無しさんsage2008/06/09(月) 03:29:24
wxPythonならwx.TaskBarIconでできる
886デフォルトの名無しさんsage2008/06/09(月) 03:46:49
>>885
ほんとですか!?ありがとうございます!。ちょっと今日からやってみたいと思います。
887デフォルトの名無しさんsage2008/06/10(火) 05:42:46
python a5のソースの中に.bzrignoreがあったんだけどBazaarに移行する予定でもあるの?
888デフォルトの名無しさんsage2008/06/10(火) 07:19:50
           ,r‐ 、           
   z'Zr─〜''''彡 ̄ ̄⌒ミーv─ -tf'.z
      ̄`'''''─ム/'⌒' ⌒ヽ_>'''  ̄ ̄ 
         /  彡、 ノノ:::  
        / _,;彡'´⌒(´ ミ}::: 
    _/ フ::::      Y ヽ::: 
  (⌒こ))≧:::        jfう》::: 
    ̄::::::::::        (_ノ:::::: 
               ::::::
889デフォルトの名無しさんsage2008/06/10(火) 10:30:38
>>887
http://www.python.org/dev/bazaar/
890デフォルトの名無しさんsage2008/06/10(火) 16:37:35
>>888
こんなとこまでくんなwwww
891デフォルトの名無しさんsage2008/06/10(火) 18:37:16
WindowsのGUIのPython shellみたいに色が出たり、
このタイプ中にこのライブラリは、こういったものが扱えますと教えてくたれりするUNIX系のソフトって
ありませんか?
できれば、Xterm上でできるとうれしいんだけどなあ
892デフォルトの名無しさんsage2008/06/10(火) 18:50:10
xtermじゃ動かないけどKomodo IDEとかEric4とか。
893デフォルトの名無しさんsage2008/06/10(火) 19:10:33
>>892
さんくす
みてみます
894デフォルトの名無しさんsage2008/06/10(火) 19:30:09
>>891
emacs
vim
895デフォルトの名無しさんsage2008/06/10(火) 19:36:15
pycomplete入れたけどM-tab押しても
Symbol's function definition is void: py-symbol-near-point
って言われてしまうんですがなぜですか?
896デフォルトの名無しさんsage2008/06/10(火) 20:13:58
>>894
vimを使っているんですが、vimでできますか?
897デフォルトの名無しさんsage2008/06/10(火) 22:07:07
>>894
891はエディタを聞いてるんじゃなくて、IDLEのことを言ってるんじゃないの?

っていうか、いま知ったけど、IDLEでソースの編集もできるんだな。
しばらくこれ使ってみるか。
898デフォルトの名無しさんsage2008/06/11(水) 06:09:41
アイドルって何?
899デフォルトの名無しさんsage2008/06/11(水) 07:14:48
IDLE M@STER
900デフォルトの名無しさんsage2008/06/11(水) 07:44:47
>>891
IDLE (Python GUI) は Linux 等でも動くよ。
901デフォルトの名無しさん2008/06/11(水) 08:01:40
IDLE ってエディタとして使いやすい?
自分は PyDev を使ってる.
でも PyDev の補完がいまいちうまく働いてくれない.
これって,import したモジュールを全部パースしまくって
メンバとか推測しているの?

でもメンバって動的に付け加えられるよね?
動かしてみなけりゃわからないよな.
902デフォルトの名無しさんsage2008/06/11(水) 08:02:37
IDLEは終了時のウィンドウ位置・サイズを記憶してくれないから使ってない。
903デフォルトの名無しさんsage2008/06/11(水) 10:43:30
>>896
python有効になってるvim7だとオムニ補完が使えるはず
pythonのファイルを開いてみて
s = "foo"
s.
まで打ってからC-X C-Oしてみ
正直もっさりしてて動作が軽快とは言いがたいから、あまり俺はつかわんけど

勿論C-Nによる前方参照補完とかはいつでも使える
904デフォルトの名無しさんsage2008/06/11(水) 17:23:58
>>> 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 "", line 2, in
KeyError: 'name)s %(year'

どう書けば良いですか?否定の文字列クラスみたいなのが
書きたいです…
905デフォルトの名無しさんsage2008/06/11(水) 17:28:49
re.findall(r'%¥(([^¥(¥)]*?)¥)d', MULTI)
906905sage2008/06/11(水) 17:31:55
r'%¥((¥w+)¥)d'の方がいいかも
907デフォルトの名無しさんsage2008/06/11(水) 18:06:03
>>906

>>> 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っす
908デフォルトの名無しさんsage2008/06/12(木) 00:35:52
失礼します。
コマンドラインで動かしたときに、引数が入力されているか確認する方法について
聞きたいです。

下のソースは、コマンドラインで引数が入力されていれば判定時に"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」
この条件で、引数に初期値を設定する方法はないでしょうか。
お願いします。
909デフォルトの名無しさんsage2008/06/12(木) 00:37:35
len(sys.argv)
910デフォルトの名無しさんsage2008/06/12(木) 00:59:36
>>908
入力? 文字のprintは普通、出力って言うだろ
911デフォルトの名無しさんsage2008/06/12(木) 01:00:50
>>910
なにいってんの?w
912デフォルトの名無しさんsage2008/06/12(木) 01:28:13
>>908
sys.argv[1] を実行しても「list index out of range」とならないための条件は
len(sys.argv) が 2 以上のときだから

if len(sys.argv) == 2:
    test(sys.argv[1])
else:
    test()

のようにすればいいよ。

プログラムを書いていてエラーが起こったら、そのエラーが起こる理由を考えて
エラーを回避するための条件文を入れていくんだよ。
913デフォルトの名無しさんsage2008/06/12(木) 01:41:22
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しないといけないものを忘れてるとか、
良く分からないのでご存知の方いらっしゃったら
止まらないようにする方法を教えてください。
914デフォルトの名無しさんsage2008/06/12(木) 01:46:33
>>913
stdout の内容が3行未満(lines の要素数が3未満)だから
> IndexError: list index out of range 
となるのだと思われ。つまり cmd が想定外の出力を返している。
915デフォルトの名無しさんsage2008/06/12(木) 01:47:10
コマンドの出力の行数が足りなくなることはありえないの?
916デフォルトの名無しさんsage2008/06/12(木) 01:49:28
あー、言われてみればそうですね。
造って満足して実行させてたら
止まってたので原因を錯覚してました。
ありがとうございます。
917デフォルトの名無しさんsage2008/06/12(木) 08:03:10
Rubyと比較してPythonが優れているのはどんなところでしょうか?
918デフォルトの名無しさんsage2008/06/12(木) 08:14:37
ネイティブスレッド
919デフォルトの名無しさんsage2008/06/12(木) 08:52:00
ドキュメント
920デフォルトの名無しさんsage2008/06/12(木) 09:30:37
異教徒にも優しい
921デフォルトの名無しさんsage2008/06/12(木) 09:42:00
書籍が多い


922デフォルトの名無しさんsage2008/06/12(木) 11:07:22
「恥ぱい」だけに、恥の上塗り。
923デフォルトの名無しさん2008/06/12(木) 11:13:24
Pythonの方がOSのネイティブの機能を使いやすいって思うんだけど
それは単に俺がルビーでの扱い方に慣れて無いから?
924デフォルトの名無しさんsage2008/06/12(木) 11:38:58
パッケージ名がエロ
ttp://d.hatena.ne.jp/seiunsky/20080417/
925デフォルトの名無しさんsage2008/06/12(木) 12:56:19
ライブラリが揃っていること
scipy,numpy等の数値計算周りが便利
926デフォルトの名無しさんsage2008/06/12(木) 13:09:16
>>917
PC初心者(英語圏の人)からプロまで扱えるように設計されている
だまされたと思って、「初めてのPython」を買って、勉強するよろし
927デフォルトの名無しさんsage2008/06/12(木) 13:42:08
>>917
Rubyと違って、プログラミング言語だ。
(Rubyはプログラミング言語っぽいオモチャ)
928デフォルトの名無しさんsage2008/06/12(木) 13:46:36
>>927にGuidoも思わず苦笑
929デフォルトの名無しさんsage2008/06/12(木) 13:50:41
>>928
苦笑しながらGuidoはこう言った。
Ruby is just a toy, indeed.
930デフォルトの名無しさんsage2008/06/12(木) 14:07:18
糊言語として優秀
931デフォルトの名無しさん2008/06/12(木) 15:00:16
そのうちインデントじゃなくて括弧つかいますモードとか出ないかな
932デフォルトの名無しさんsage2008/06/12(木) 15:29:42
from __future__ import braces
933デフォルトの名無しさんsage2008/06/12(木) 17:21:39
やっぱり作者が痛くないという所が最大の違いだろうな
934デフォルトの名無しさんsage2008/06/12(木) 17:32:45
Rubyの作者がイタいみたいなこと言うなよ。Matzに失礼だぞ。
935デフォルトの名無しさんsage2008/06/12(木) 17:45:04
Webアプリケーションをなめるな
http://www.rubyist.net/‾matz/20080126.html
936デフォルトの名無しさんsage2008/06/12(木) 18:08:16
NetworkのライブラリまわりでPythonとRubyの比較情報とかどこかにない?

Rubyで通信内容のdebuglevel設定とかできるようになったんかな?
937デフォルトの名無しさんsage2008/06/12(木) 18:18:17
ググるか、力技でやればいいんじゃないの?
とりあえず、プログラミングに不慣れなら、総当たりでいいんじゃないの?

>>946さんの質問に答える事からはじまる
938デフォルトの名無しさん2008/06/12(木) 18:22:22
>>946がどんな難問を出してくるかwktk
939デフォルトの名無しさんsage2008/06/12(木) 18:24:24
>>901
大体importしたモジュールは勝手に解析してくれるけど
一部うまくいかないモジュールがあるみたい
http://pydev.sourceforge.net/faq.html#code_completion_is_not_working_correctly_for_some
そういうときはPyDEVの設定でPYTHONPATHを確認してみたり
強制読み込みモジュールに指定してみるとうまく動くことがあるらしい
940デフォルトの名無しさんsage2008/06/12(木) 18:25:36
>>926
初めてにしてはゴツすぎるんですけど
941デフォルトの名無しさんsage2008/06/12(木) 18:27:02
>>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//
942デフォルトの名無しさんsage2008/06/12(木) 18:29:48
っエラトステネスの篩
943デフォルトの名無しさんsage2008/06/12(木) 18:31:26
>>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
945デフォルトの名無しさんsage2008/06/12(木) 18:34:45
改行コードの問題忘れてた、無駄な改行スマソ
946デフォルトの名無しさんsage2008/06/12(木) 18:43:37
for i in xrange(3,101): じゃないの?
947デフォルトの名無しさんsage2008/06/12(木) 18:44:47
そうだね
948デフォルトの名無しさんsage2008/06/12(木) 19:03:11
>940
C++Primerのごつさには及ばん
949デフォルトの名無しさんsage2008/06/12(木) 19:25:55
generator使った篩の例をどっかで見たな
ああ
ttp://4topcoder.blogspot.com/2007/07/python-generator.html
950デフォルトの名無しさんsage2008/06/12(木) 19:59:05
>>942
そんなのあるんだね
初めて知った

手順は、なんとなくわかったけど、アルゴリズムで書ける自信がない
951デフォルトの名無しさんsage2008/06/12(木) 20:03:05
というか、944の方法か
952デフォルトの名無しさんsage2008/06/12(木) 21:02:45
義務教育受けてないのか?
953デフォルトの名無しさんsage2008/06/12(木) 21:23:45
ひょっとしたら、ゆとり教育で削られちゃったんじゃないの?
954デフォルトの名無しさんsage2008/06/12(木) 23:04:33
今すぐ行って借りてこい。
955デフォルトの名無しさんsage2008/06/12(木) 23:14:10
義務教育で習うっけ?
956デフォルトの名無しさんsage2008/06/13(金) 00:37:36
義務教育までなら受けた
957デフォルトの名無しさんsage2008/06/13(金) 04:23:17

Pythonのお勉強 Part 27
http://pc11.2ch.net/test/read.cgi/tech//

958デフォルトの名無しさんsage2008/06/13(金) 04:47:35
PythonでWindowsでクライアント領域のハンドルを取得して
そこに直接描画したり逆にそこの色の情報調べたり出来ますか?
959デフォルトの名無しさん2008/06/13(金) 08:22:26
素数の話ってゆとりでは出てこないのか・・・
960デフォルトの名無しさんsage2008/06/13(金) 08:32:02
一部のゆとりを叩いて精神安寧している方がよっぽどみじめだと思いますよ
どうせ大して賢くないんでしょう
961デフォルトの名無しさんsage2008/06/13(金) 08:42:24
ゆとりをたたく奴をたたいて精神安寧している奴が居るわけだが。
2chに精神安定を求めるほど腐ってないよ。賢いし偉いし年収も高いから。
962デフォルトの名無しさんsage2008/06/13(金) 09:48:13
素数は習うがエラトステネスの篩は習わんだろ。
963デフォルトの名無しさんsage2008/06/13(金) 09:55:24
そういえば、エラトステネスの篩を実装するときに使うような
フラグの配列の初期化って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らしいコードだけど、この速度差は厳しいな。
964デフォルトの名無しさんsage2008/06/13(金) 10:13:52
C-API で PyObject_Type テーブルをガリガリ書いてクラスAを宣言したとして、
同じく C-API 上でこのクラスA を継承したクラスBを定義する方法が解説しているページありませんか?

単にクラスを定義するだけなら標準ドキュメントを見ればすぐわかるけど、
別のクラスを継承するやりかたがよくわかりません。

速度が必要な部分なのでなるべくスクリプト側ではなくCで実装したいのです。。。
965デフォルトの名無しさんsage2008/06/13(金) 10:15:48
まちがえた PyObject_Type -> PyTypeObject
966デフォルトの名無しさんsage2008/06/13(金) 10:27:54
>>963
一般的かは知らんが、a=[True]*100 で済ます。
967デフォルトの名無しさんsage2008/06/13(金) 10:49:47
>>964
外してたらスルーしてね

2.1.4 Subclassing other types
ttp://docs.python.org/ext/node25.html
968デフォルトの名無しさんsage2008/06/13(金) 10:52:40
>>966
リストに対して乗算って使えたのか。知らなかった。
リストを同じ値で初期化するなら、これが一番綺麗か。

あと、963のa[:]のとこは、a=list(itertools.repeat(True, 100))の方がスッキリするね。
969デフォルトの名無しさんsage2008/06/13(金) 11:35:45
同じノリで [[True] * 100] * 100 とかするとハマるので注意。

あと963は range(0, 100) より range(100) が普通かと。
970デフォルトの名無しさんsage2008/06/13(金) 12:30:13
>>958
GUIライブラリは?
WindowsのAPIを直接使うなら「Win32API質問箱」で聞いて
win32api,ctypesで書いた方がいい
971デフォルトの名無しさんsage2008/06/13(金) 12:34:45
>>968
入門書嫁
972デフォルトの名無しさんsage2008/06/13(金) 12:36:34
>>964
Pythonのソースの中にあるxxsubtype.cは?
http://svn.python.org/view/python/trunk/Modules/xxsubtype.c
973デフォルトの名無しさんsage2008/06/13(金) 12:38:13
>>969
なるほど。同じ1次元のリストに対する参照が作られるだけなのか。
a=[[1]*5]*5
a[0][0]=0
ってやってみて理解した。

ググってみたけど、多次元のリストを簡単に初期化する方法はないみたいね。
974デフォルトの名無しさんsage2008/06/13(金) 13:39:48
素直にnumpyつかっとけばいいんじゃね

import numpy
a = numpy.ones((5,5),int)

0と1での初期化は専用の関数が用意されているが、それ以外の
値で初期化したいのなら、単に
a = numpy.zeros((5,5),int) + 100
とかすればいい
975デフォルトの名無しさんsage2008/06/13(金) 13:51:14
>>970
なんとかなりそうです
ありがとうございました!
976デフォルトの名無しさんsage2008/06/13(金) 14:08:56
>>973
2次元以上の場合は * とリスト内包の組み合わせが一番簡単だと思う。

a = [[1] * 5 for i in range(5)]
977デフォルトの名無しさんsage2008/06/13(金) 14:17:31
>>976
オタは二次元しか受け付けないだろJK
978デフォルトの名無しさんsage2008/06/13(金) 18:04:57
リスト内包に表記をつけて「リスト内包表記」と書いてある例が
目につくけど、なんでわざわざ「表記」をつけるんだろうと思う。

書籍とかでも結構ある。訳語としておかしいと思うんだけど。
何でこんな変な訳が流行ったのか理由ご存知のかたいます?

ちなみに英語ではList Comprehension。
979デフォルトの名無しさんsage2008/06/13(金) 18:18:29
構文糖なんて表記の上での違いしかないから
980デフォルトの名無しさんsage2008/06/13(金) 18:25:11
981デフォルトの名無しさんsage2008/06/13(金) 18:32:08
失礼、ミスった

ネット上には用例が少ないけど、set comprehensionの定訳が、集合の内包表記だったから。
982デフォルトの名無しさんsage2008/06/13(金) 19:17:51
そういうterminologyにいい訳を求めても仕方がない
むしろ重要なのはその言葉が何を意味しているかはっきりと区別できるという言葉本来の役割である
従って、論文なり技術誌なりで最初に使われたそれらしい言葉がそのまま使われるというのはよくある話

理由は皆がいろいろな訳語を使うと紛らわしいから
技術的な側面を持っている以上、必要なのは言葉の綺麗さなどではなくuniqueである事
983デフォルトの名無しさんsage2008/06/13(金) 19:31:11
用語は日本語に訳せず英語のまま使いましょうって?
984デフォルトの名無しさんsage2008/06/13(金) 19:33:47
うん
985デフォルトの名無しさんsage2008/06/13(金) 19:33:52
一番いいと俺が思うのは専門用語は 日本語(英語) で書いてある奴かな
986デフォルトの名無しさんsage2008/06/13(金) 19:34:56
>>981
なるほど。ありがとう。

>>982
それはそうではあるけど、リスト内包"表記"が気持ち悪いんですよ
ね。まぁリスト内包でも普通に通じるから、自分でそういう表現使
うときにはちゃんと表記を削って書いて、周りにも強制するように
します。
987デフォルトの名無しさんsage2008/06/13(金) 19:45:07
そこまで気持ち悪いと思うんだったら英語で書けばいいと思うけどなぁ
リスト内包という日本語自体も大概変な日本語だし
988デフォルトの名無しさんsage2008/06/13(金) 23:03:42
確かにList comprehensionがリスト内包になるのならわかるが、
リスト内包表記はないよな。どっから沸いてきたんだって感じ。
>表記
989デフォルトの名無しさんsage2008/06/13(金) 23:09:29
リスト内包を文字で表記するための構文なんだから全然問題ないと思うが
990デフォルトの名無しさんsage2008/06/13(金) 23:41:03
はやくpygameの和訳作業やれ屑ども
991デフォルトの名無しさんsage2008/06/13(金) 23:48:23
992デフォルトの名無しさんsage2008/06/13(金) 23:49:09
993デフォルトの名無しさんsage2008/06/13(金) 23:50:15
994デフォルトの名無しさんsage2008/06/13(金) 23:51:13
英語と日本語が1対1で対応するわけじゃないんだから、原語に無い言葉を
足してはいかんとは思わないな。「リスト内包」では日本語としておかしいし。
「内包表記」が良い訳だとは思わないけどね。
リスト内包構文くらいの方がいいかね。

そもそも、俺の辞書だと内包の意味だとuncountableとなっているが、
原文はList Comprehensionsと複数形だし、内包という訳も怪しい。
995デフォルトの名無しさんsage2008/06/13(金) 23:51:29
996デフォルトの名無しさんsage2008/06/13(金) 23:52:01
http://ja.wikipedia.org/wiki/リスト内包
997デフォルトの名無しさんsage2008/06/13(金) 23:54:54
http://ja.wikipedia.org/%E3%83%AA%E3%82%B9%E3%83%88%E5%86%85%E5%8C%85
4件中1 - 4件目の検索結果を表示

http://ja.wikipedia.org/%E3%83%AA%E3%82%B9%E3%83%88%E5%86%85%E5%8C%85%E8%A1%A8%E8%A8%98
3件中1 - 3件目の検索結果を表示
998デフォルトの名無しさんsage2008/06/13(金) 23:56:09
999デフォルトの名無しさんsage2008/06/13(金) 23:56:35
1000デフォルトの名無しさんsage2008/06/13(金) 23:56:53
リスト閉包式が正しい役だろJK
10011001Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
 224KB (229543Byte)
dummy_for_searchRef

DAT2HTML 0.32g Converted.