1 名前:デフォルトの名無しさん [2009/04/26(日) 01:48:01 ] Pythonオフィシャルサイト www.python.org/ 日本Pythonユーザ会 www.python.jp/Zope/ まとめWiki python.rdy.jp/ 関連スレ find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python 前スレ pc12.2ch.net/test/read.cgi/tech/1234716330/
2 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 02:03:24 ] _ ∩ ( ゚∀゚)彡 おっぱいそん!おっぱいそん! ⊂彡
3 名前:デフォルトの名無しさん [2009/04/26(日) 03:40:09 ] ぱいちんこ
4 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 05:48:04 ] ぱいぱい! ぱいぱい!
5 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:28:12 ] 10分前にPython 3.0.1インタプリタをダウンロードしたものですが >>> "hello world" 'hello world' >>> print "hello world" File "<stdin>", line 1 print "hello world" ^ SyntaxError: invalid syntax これはどういうことでしょうか? いきなり挫折しそうです
6 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:31:56 ] print ("hello world") 自己解決すますま
7 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:32:46 ] Python3はprintが関数に変わったんで print("hoge") ってやらなきゃ駄目なんじゃね
8 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:37:20 ] >>6 Python 3.0 はまだαだから開発者以外手を出すな。 Python 3.1 はまだβだから一般人は手を出すな。 Python 3.2 はまだRCだから初心者なら手を出すな。 Python 3.3 から初心者もOK。 今、「環境変数取得APIをUnicodeにしちゃったけど、ちゃんとデコードできない バイナリ列どう扱えばいいと思う?」とか議論しながらAPIを整備中。
9 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:44:12 ] 3.4になったら本気出す。
10 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 01:18:55 ] 入門書嫁 ttp://www.amazon.co.jp/dp/4797353953
11 名前:デフォルトの名無しさん [2009/04/28(火) 12:43:20 ] うちのはPython 2.4だけど 俺がPythonを覚えられない原因がわかったよ
12 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 13:56:03 ] 3.4に手を出すと色々対応してくれるまで待つのが長いね
13 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 17:03:15 ] なんだ、ABCでもダックタイピングできるんじゃねえか ABCMeta.registerとかってなんのためにあるんだよ import collections class Con(): def __contains__(self): pass class NotCon(): pass print(issubclass(Con,collections.Container)) print(issubclass(NotCon,collections.Container))
14 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 17:04:27 ] >>13 うっかり結果を書くのを忘れた print(issubclass(Con,collections.Container)) # ==>True print(issubclass(NotCon,collections.Container)) # ==> False
15 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 17:35:35 ] >ABCMeta.registerとかってなんのためにあるんだよ 自己解決。collectionのABC実装を見たところ、 ダックタイピングしてもissubclassで型チェックできる =issubclassの結果を変える__subclasshook__があるのは 実装のないBaseClassのみだったんだよね。 つまり実装のあるBaseClassに関してはするか 手動でメソッドチェックしてregisterしないといけない。うーん……
16 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:16:30 ] と、思ったけどregisterって動的継承するわけじゃないのか isinstanceやissubclassが通るようになるだけで、 MutableMappingをregisterしてもpopを自動的に実装してくれるわけではない…… CのクラスをABCに登録するとき用と考えたほうがいいのかなあ……
17 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:53:35 ] と、いうわけで、未知のクラスにabstractmethodで指定したメソッドが実装されているかのチェックと、 もし可能であれば対応するAbstract Base Classを継承したクラス用 インターフェースを作成する関数を作ってみた。 def is_abc_castable(instance, C): return all( any(hasattr(Base, abm) for Base in type(instance).__mro__) for abm in C.__abstractmethods__) def abc_cast(instance, C): if isinstance(instance, C): return instance if is_abc_castable(instance, C): class Wrapper(type(instance), C): def __init__(self, hold): self._hold = hold def __getattr__(self, attr): return getattr(self._hold, attr) return Wrapper(instance) raise TypeError("Can't cast")
18 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:59:40 ] 連投すまん。 これは関数内部でダックタイピング的なチェックを行い、チェックが通ったら動的継承を行う。 委譲ラッパーを使うので関数の外部に影響を及ぼさない。 class Interval(metaclass = abc.ABCMeta): @abc.abstractmethod def begin(self): return NotImplemented @abc.abstractmethod def end(self): return NotImplemented def __str__(self): return "({begin}, {end})".format(begin = self.begin(), end = self.end()) class DuckInterval(): def __init__(self, begin, end): self._begin = begin self._end = end def begin(self): return self._begin def end(self): return self._end
19 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 20:00:04 ] def interval_print(interval): if is_abc_castable(interval, Interval): casted = abc_cast(d, Interval) print(str(casted)) else: print("This is not Interval.") if __name__ == "__main__": d = DuckInterval(1,2) interval_print(d) # ==> (1, 2) print(isinstance(d, Interval)) # ==> False print(str(d)) # ==> <__main__.DuckInterval object ...>
20 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 15:48:36 ] numpy.arrayじゃなくて 素のlistで行列計算をやってくれるlibraryはないのでしょうか cのshard libなど(lapack.soなど)を読み込めない環境で数値計算したいのです
21 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 16:53:07 ] pythonのコードが2chでは潰れてしまうから、勉強がてら変換コマンドをつくってみようと思ったら、>>1 のまとめサイトにあったw やっぱりみんな考えることは同じだぬ・・
22 名前:デフォルトの名無しさん mailto:sage J [2009/04/29(水) 19:47:14 ] 3.1は全角でも実行可能
23 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 22:28:31 ] まじで?
24 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 23:51:19 ] コードの半角スペースはそのまま書き込んでいいから自己アンカー付けるようにしてくれよ。そうすりゃ專ブラのポップアップでちゃんと表示できるから。 レス番選択→右クリック(Janeのバヤイ)でもポップアップできるけどメンドい。
25 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 11:25:07 ] PythonPath を call multiply multiply 3 2 として、 PyScripterで2.6と3.01を両方起動できるようになったんだけど call multiply multiply 3 2 はどういう意味ですか? あと、3.1もリリースされているけど、今のPyScripterでは 使えないですか?
26 名前:デフォルトの名無しさん [2009/05/02(土) 22:49:40 BE:544161986-PLT(12000)] Pythonはじめました
27 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 22:57:42 ] がんばって
28 名前:デフォルトの名無しさん [2009/05/04(月) 09:12:35 ] Pythonの並列計算用のppっていうのって、Core2Duoとか同じマシン上のマルチコアでも並列化してくれるの?
29 名前:デフォルトの名無しさん [2009/05/04(月) 09:31:11 ] 解答まだ?
30 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 09:40:52 ] がんばって
31 名前:デフォルトの名無しさん [2009/05/04(月) 11:28:19 ] Pythonに限った話じゃないかもしれませんが、2つの整数が与えられたとき異なるビットの数を求めるよい方法はないでしょうか?たとえば、1111(=15)と1001(=9)が与えられたら真ん中の2つのビットが異なるので2を返したいのです。
32 名前:デフォルトの名無しさん [2009/05/04(月) 11:34:30 ] 釣りだとおもうけど ヒント:XOR
33 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 11:40:56 ] Pythonは超初心者だけど、こんな感じかな? str1 = format(15, 'b') str2 = format(9, 'b') count = 0 i = 0 while i < len(str1): if str1[i] == str2[i]: count += 1 i += 1 print count
34 名前:デフォルトの名無しさん [2009/05/04(月) 11:56:43 ] >>32 >>33 アドバイスありがとうございます。 >>32 XORとると0110(=5)になって1の場所数えればよいわけですね。でも肝心の5という数値をビット列と見なす方法がわかりません・・・ >>33 Python2.5なのでformatメソッドがないのですが、推測するにstr1=format(15, 'b')って'1111'を返してくれるのでしょうか?それならすべてOKなのですが、2.5の範囲で同じことできないでしょうか・・・
35 名前:デフォルトの名無しさん [2009/05/04(月) 11:57:05 ] PYTHONてバイナリ値を いきなり文字配列に入れられるのか 便利だな
36 名前:デフォルトの名無しさん [2009/05/04(月) 11:58:47 ] すみません、自己レスですが、python binary formatでぐぐったら >>> bstr_pos = lambda n: n>0 and bstr_pos(n>>1 )+str(n&1) or '' >>> bstr_pos(15) '1111' という方法を見つけました!これでできそうです。アドバイスありがとうございました。
37 名前:デフォルトの名無しさん [2009/05/04(月) 11:59:21 ] メソッド名やアトリービュート名の先頭につけるアンダースコア(_) アンダースコアが1つついているのと、2つついているのの 違いってなんでしたっけ?
38 名前:デフォルトの名無しさん [2009/05/04(月) 12:05:19 ] マスクBITをANDで順次 0にならない値をカウントとか
39 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 12:08:12 ] >>32 2で割る
40 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 12:09:36 ] アンカ間違えた >>34 しかも 5 じゃなくて 6 だし・・・
41 名前:デフォルトの名無しさん [2009/05/04(月) 13:11:10 ] 4桁のバイナリなら 汎用なら (4BITの場合) XORでもとめた値を 0001=1 0010=2 0100=4 1000=8 を順次に対象の値とAND演算 結果が0にならない値をカウント だよね
42 名前:デフォルトの名無しさん [2009/05/04(月) 13:17:09 ] ゴメン、”てにをは”がおかしかった…
43 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 19:46:51 ] 1bitずつ右シフトして1とandとった方がよっぽどマシだろ。 何がどう汎用なのか小一時間
44 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 22:33:50 ] 初心者スレにまでPython叩きに来る信者って 惨めだな
45 名前:デフォルトの名無しさん [2009/05/05(火) 00:54:31 ] 右シフトとかアセンブラじゃないんだから よく知らないけどCとかJAVAはできるの?
46 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:58:39 ] CでもJavaでもPythonでも右シフト演算子はあるよ。 シフト演算子が無くても整数型を2で割るだけだから、できない言語の方が少ない。
47 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 03:15:49 ] というか、とりあえずhamming distanceでぐぐれ。
48 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 04:11:47 ] ググった。 unsigned dist = 0, val = x ^ y; while(val) { ++dist; val &= val - 1; } return dist; クヌースさん、歪みねぇな。
49 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 12:47:03 ] それってクヌースが考えたの? gurmeetsingh.wordpress.com/2008/08/05/fast-bit-counting-routines/ の 2a) 2b) は Peter Wegner となってる
50 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 15:28:39 ] WikipediaにはKnuth's Algorithmって書いてあったけど、 本の初出が1968みたいだからPeter Wegnerのほうが先なのかな。 先にペーパー出してるかもしれないし、よく分からん。
51 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 18:35:12 ] >>46 整数型に対する右シフトは、Cだと結果が未定義だぞ。 符号無し整数型ならOKだが。
52 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:04:20 ] 仕様厨か?
53 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:57:46 ] 違う。右シフトするときにMSBがどう処理されるかの、現実的な問題だ。 gccで試したら、-2を右1ビットシフトすると-1になった。 処理系によっては、INT_MAXになるはず。 で、前者だと>>46 の通り整数型を2で割ったのと等しいが、今回の目的には使えない。 後者だと今回の目的に使えるが、整数型を2で割るのと結果が異なる。
54 名前:デフォルトの名無しさん [2009/05/06(水) 20:01:06 ] 1になってるbit数数えるのが目的の用途に符号なし整数使わず わざわざ整数型持ってくる香具師が馬鹿でFA?
55 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:06:04 ] いや、>>51 =>>53 は仕様厨ではなく、指摘が回りくどくて揚げ足取りになってるでFAだ。 (おれがその>>51 =>>53 本人だが)
56 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:58:26 ] 1ビット2ビット帰れない〜
57 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 21:41:21 ] うーん、あまりにも小さなネタ過ぎるのか、アルゴリズムの本やそれこそKnuth本を当ってもHamming Distanceの計算方法が見付からないな... 誰かKnuth本の出てる場所知ってたら教えてくれろ。
58 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 22:22:00 ] 差分をとるのはXORで明白だから、 調べるなら>>49 みたいに"bit count"のほうがいいんじゃない?
59 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 23:07:27 ] あーーーーーーがらっとるーーーーーーーーーーーーーーーー なにがったんじゃーーーーーーーーーーーーーーーーーーーーーーー
60 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 08:26:19 ] ubuntuを最近の9.04にして 何かアプリいれると勝手にpython2.6が入るぞ
61 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 08:33:11 ] 別にUbuntuじゃなくても
62 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:58:45 ] debianとか誰に必要とされてるんですか? osにお金も払えない貧乏ニンですよね
63 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:13:35 ] 貧乏人でもいいじゃない。 心が貧しくて卑しい >>62 より
64 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 16:18:22 ] 実際、フリーソフト教って怪しいよね
65 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 16:35:20 ] ソース公開されてなきゃ気持ち悪くて使えないって人とか? 使うソフトいちいちソース調べてるんか
66 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 17:07:33 ] x = [1, 2] x += [9, 8] x == [10, 10] True みたいな事ができる、メソッドか関数か計算式ってありませんか?
67 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 17:30:00 ] マッピー
68 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 17:30:07 ] map(lambda x, y: x + y, [1, 2], [9, 8])
69 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 17:35:12 ] In [3]: from operator import * In [4]: map(add, [1,2], [9,8]) Out[4]: [10, 10] もしくは In [5]: [x+y for x,y in zip([1,2], [9,8])] Out[5]: [10, 10]
70 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 19:23:41 ] >>65 何か悪いことが起きたら、ソースを読むw
71 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 20:03:57 ] import numpy x = [1, 2] x = numpy.add(x, [9, 8])
72 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 00:38:22 ] >>68-71 どれが一番速いですか? どれが一番メモリ効率良いですか?
73 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 01:17:55 ] キー・タイプ数の点で早いのは>>69 モジュールをインポートする必要がないという点で メモリ効率が良いのは>>68
74 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 02:43:36 ] >>73 >>69 のリスト内包は>>68 より効率が悪いの?
75 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 03:39:16 ] >>70 俺は直す知識が無いからパッチ書いたりとか出来ないけど ハードコーディングされてて使い難いと思ったところを ちょこちょこっと書き換えて自分ライクにしたりとかはある。
76 名前:デフォルトの名無しさん [2009/05/09(土) 05:34:00 ] zipの中身ってyieldだっけ?
77 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 05:35:49 ] 3.0
78 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:42:04 ] >>68-69 ,71の中では>>71 が一番処理速度は早いですよね?
79 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 16:35:37 ] >>78 自分で測定しろや
80 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 16:52:02 ] 天下のnumpy様に 標準ライブラリや組み込み関数が勝てるわけないだろう。
81 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:07:07 ] >>78 やってみたぞ。 a, bをランダムな整数10000要素のリストとして 1. map(operator.add, a, b) 2. map(lambda x,y: x+y, a, b) 3. numpy.add(a,b) を各1000回実行するのにかかった時間をtimeitモジュールを使って測定した結果は 以下のとおり。(CPU: Core2Quad Q6600, OS: Linux 2.6.28, Python: 2.6.2) 1. 0.977833986282 2. 1.91782212257 3. 0.0156099796295 ということで当然ながらnumpyの圧勝。 ただし、最初にnumpy.array()でシーケンスをnumpy.ndarrayに変換しておく必要あり。 これをやらないと逆に一番遅い。
82 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 17:45:19 ] >>78-80 numpyは中身がlapackかなんかじゃなかった? どっちにしても一部cで書かれてるから場合によってはnumpyが早いかもね 正直言うと全部pythonのlistのまま処理してくれないとめんどくさくて嫌なんだけどね arrayってなんだよ
83 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 18:10:57 ] numpyとscipyとpylabとmatplotlibの関係が良く分かんないんだけど。
84 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 18:28:23 ] >>> _lambda.repeat(1,100000);_operator.repeat(1,100000);_numpy.repeat(1,100000) [0.5832531788257711] [0.43510585842614091] [1.2607769981939327]
85 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 19:10:13 ] >>84 なにこれ
86 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 19:59:17 ] >>83 おまい使ったことないだろ。使えばすぐに分かるぞ。 おおざっぱに言うと、numpyで効率的なn次元配列及びそれらに対する 基本的な演算が与えられ、それを使ってscipyで計算をし、 結果をプロットするのがmatlabplotだ。
87 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 21:28:07 ] スクリプト系は結局こうなるよな。 アルゴリズムの知識じゃなくて、モジュールの知識。
88 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 21:32:43 ] 最近の言語はそうじゃない? 今C#やってるけど、ひたすら.NETFrameworkの使い方調べてるぞ。
89 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 21:34:30 ] >>87 ある程度ライブラリが揃っていれば、スクリプト言語かどうかに関係なく どの言語も似たようなものだろ。
90 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 23:05:14 ] Python 2.x ではstatementだったexec が3.0ではfunctionになりましたが、 2.xと3.0の両方で動作するように書くにはどうしたらいいでしょうか。 exec '....' in globals, locals # 2.x exec('.....', globals, locals) # 3.0 globalsとlocalsを指定しなくていいなら exec('....') でいいのですが、globalsとlocalsも指定して、なおかつ2.xと3.0の両方で動かしたいです。
91 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:20:09 ] from __future__ import exec exec('.....', globals, locals) とかすればできるのかな。 future文使ったことないから知らん。
92 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:50:52 ] pythonで動画扱いたいのですが どのライブラリがお勧めですか?
93 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:28:57 ] 速さは分かったけど メモリ効率って どうやって調べられるん?
94 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 02:39:10 ] topでresident sizeでも見れば?大雑把な指標にはなる。
95 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 02:50:22 ] resourceモジュールだっけな、もう忘れた
96 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 07:22:06 ] resourceモジュールってgetrusage()呼んでるだけだよな。 ということはtopを見れば十分という話だな。 WindowsでもProcess Explorer使えば同様にモニタリング出来るし。
97 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 07:24:00 ] MacOS XでPython3.0を使っているのですが、help()を使うとときどき UnicodeEncodeError: 'shift_jis' codec can't encode character '¥xab' in position 3701: illegal multibyte sequence というエラーがでます。 たぶんデフォルトの文字コードがshift_jisになっているせいだと思いますが、 デフォルトの文字コードをutf-8に変更するにはどうしたらいいですか。 できればLANG以外の方法で。
98 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 10:59:04 ] >¥xab \が全角だから
99 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 11:03:21 ] 円マークじゃなくて、\x5c の文字である必要があるから、環境によってはバックスラッシュかもね。
100 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 11:47:29 ] import math print math.e ** (1j * math.pi) がOKで print math.exp(1j * math.pi) がNGなんだけど expがcomplex を受け取らないのは何か理由があるの?
101 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 12:20:21 ] >>101 複素数用にcmathが用意されてるから。cmath.exp()を使え。