Pythonのお勉強 Part43

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2011/05/13(金) 01:37:50.64
    \
.       \
.       \
          \   r'´ ̄ ̄ ̄ ̄ ̄ ̄`、::    ___
   l} 、::       \ヘ,___,__,_____/::___|     |_________
   |l  \::      | |  ( ´ё`) J('ー` )し .,l、: :   | [],  .|: [ニ]:::::
   |l'-,、イ\:   | |,r'",´ ̄ ̄ ̄ ̄`ヽl::::  ヘ ̄ ̄,/:::(__)::
   |l  ´ヽ,ノ:   | ,'      :::::...  ..::ll::     ̄ ̄::::::::::::::::
   |l    | :|    | |       :::::::... . .:::|l::
   |l.,\\| :|    | |       ::::....  ..:::|l::
   |l    | :|    | |            |l::    ____
   |l__,,| :|    | |         ``'   |l::    |  ヽ  |     |_   /    \/
   |l ̄`~~| :|    | | ''"´         |l::   ̄| ̄ヽ ̄| ̄   ̄ゝ   /ヽ    /   
   |l    | :|    | \,'´____..:::::_`l__,イ::   └──┼   ヽ_  /  し   ヽ_  
   |l    | :|    |  `´::::::::::::::::::::::`´::
   |l \\[]:|    |
   |l   ィ'´~ヽ  |
   |l-''´ヽ,/::   |
   |l  /::      |           ┌─── ┌──  \    /  
   l}ィ::        |           │      │       \/  
            |           └──┐ ├──    /\ 
            |                │ │     /   \  
            |           ───┘ └── /      \
3デフォルトの名無しさん:2011/05/13(金) 23:15:20.05
過疎
4デフォルトの名無しさん:2011/05/14(土) 00:53:18.09
5デフォルトの名無しさん:2011/05/16(月) 00:00:44.85
まぁPythonなんて勉強しようとする奴は少数派って事だな
言語としての出来は置いといて、ひねくれ者しか使わない言語
6デフォルトの名無しさん:2011/05/16(月) 00:03:16.76
お前にはMS言語やJava等々大衆向けがお似合いだよ
7デフォルトの名無しさん:2011/05/17(火) 15:09:33.93
もう、落ちたりするんじゃないぞ。
保守。
8デフォルトの名無しさん:2011/05/18(水) 08:52:07.22
Threadを作るとスタックを数百KBぐらい確保すると思うんですけど、
Generatorもスタックを確保するんでしょうか(通常の関数コールとは別に)。
その場合、Pythonではどのくらいのサイズを確保するか教えてください。
9デフォルトの名無しさん:2011/05/18(水) 09:41:46.11
>>8
確保しない。実行環境はスタックと別に保存される。
10デフォルトの名無しさん:2011/05/18(水) 12:08:29.05
>>9
ということは、スタックではなくヒープを消費するということでしょうか。
もしそうなら、そのサイズはどのくらいになりますか。
あるいは簡単に計測できる方法がありましたら教えてください。
11デフォルトの名無しさん:2011/05/18(水) 12:42:28.79
いや、ま、その、なんだ、ググレカス

threading.stack_size([size])

Return the thread stack size used when creating new threads. The optional
size argument specifies the stack size to be used for subsequently created
threads, and must be 0 (use platform or configured default) or a positive
integer value of at least 32,768 (32kB). If changing the thread stack size
is unsupported, a ThreadError is raised. If the specified stack size is
invalid, a ValueError is raised and the stack size is unmodified. 32kB is
currently the minimum supported stack size value to guarantee sufficient
stack space for the interpreter itself. Note that some platforms may have
particular restrictions on values for the stack size, such as requiring a
minimum stack size > 32kB or requiring allocation in multiples of the
system memory page size - platform documentation should be referred to for
more information (4kB pages are common; using multiples of 4096 for the
stack size is the suggested approach in the absence of more
specific information). Availability: Windows, systems with POSIX
threads.
12デフォルトの名無しさん:2011/05/18(水) 15:56:30.16
>>10
普通の関数1個分に、数十バイトのオーバーヘッドがある程度。
13デフォルトの名無しさん:2011/05/21(土) 03:38:13.58
pythonでコード書いた後C++やると絶対セミコロン付け忘れる
どうにかして欲しい
14デフォルトの名無しさん:2011/05/21(土) 04:07:18.94
pythonでコード書くときもセミコロンつけとけばいい
15デフォルトの名無しさん:2011/05/22(日) 22:14:19.76
Python2.xだけど、例外オブジェクトからトレースバックを取り出すことってできないんだっけ?
sys.exc_info()を使ってその都度取り出さないとだめ?
例外オブジェクトだけをリストに入れておいて、あとでトレースバックを表示しようとしたけど、
例外オブジェクトとトレースバックとがひもづいてないっぽいので、取り出せなくて困った。
16デフォルトの名無しさん:2011/05/22(日) 22:24:02.41
標準入力の文字コードはどうやって設定するのでしょうか?
17デフォルトの名無しさん:2011/05/23(月) 00:22:40.79
python2.xとpython3.xの関係はどうなっているんでしょうか?
python3.xはあるけど、実務的にはpython2.xという状況でしょうか?
ライブラリでpython3に対応していないものも多いようですが、
世界的にも2.xから3.xへの移行は手間取っているような状況でしょうか?
18デフォルトの名無しさん:2011/05/23(月) 00:33:42.61
緩やかに移行中かな
実務レベルではまだ2系だと思う
19デフォルトの名無しさん:2011/05/23(月) 01:00:35.65
でも日本語ではUnicode文字列が標準なPy3の方が便利すぎる。
いろんなメソッドもイテレータ返しが基本なんで、処理速度やメモリ消費量の心配もずいぶん減ったし。

最近はPy2のコード書くときも、思考の軸足をPy3に置いてる。
20デフォルトの名無しさん:2011/05/23(月) 01:21:27.20
>>19
文字エンコーディングの仕組みを理解してればPython2でぜんぜん問題ないよ
21デフォルトの名無しさん:2011/05/23(月) 01:58:59.99
基本的な言語仕様やライブラリの出来を見ると明らかに3系なんだけど、
ライブラリの充実度を考えると多少の面倒くささがあっても2系を使わざるを得ないという
22デフォルトの名無しさん:2011/05/23(月) 02:14:32.60
ライブラリの出来ってPy2と互換性重視だからI/Fは同じでしょう?
内部のコーディングとかの話なのかい
23デフォルトの名無しさん:2011/05/23(月) 05:08:00.47
枯れてない言語って大変やね
24デフォルトの名無しさん:2011/05/23(月) 08:10:42.65
25デフォルトの名無しさん:2011/05/23(月) 09:46:03.51
Pythonicな感覚を理解することが目的ならば、Python3がやはりベターだから、
これから勉強するなら、まず3やって、慣れてきたら2に戻る方がいいとおもう。
26デフォルトの名無しさん:2011/05/23(月) 10:42:47.45
その発想はなかった
27デフォルトの名無しさん:2011/05/23(月) 14:29:14.96
>>25
逆だろう
得てしてパラダイムとかPythonicとか言語構造の事をあれこれ言う奴は現場をしらない
28デフォルトの名無しさん:2011/05/23(月) 15:10:59.26
現場知識の有無と、言語の設計思想の理解の有無って、独立した概念だと思うけど。

あえて関連があるとすれば、高邁な思想を知ってしまうと、現場の耐性が低下するくらいw
まぁそんなときは、google辺りに転職しましょうww
29デフォルトの名無しさん:2011/05/23(月) 15:57:31.03
Pythonでシェルのメタキャラクタを扱うライブラリってなかったでしたっけ?
ぐぐったけどヒットしない
30デフォルトの名無しさん:2011/05/23(月) 16:02:44.14
えっgrobぐらいあるだろうと思ってぐぐったら
Google先生にglobじゃねってもしかしてされたでござる

os.path.expanduserやfnmatchも参照してね
31デフォルトの名無しさん:2011/05/24(火) 02:01:28.02
>>30
あーそうそう、fnmatchだ。ありがとう。
globはどうでもいいや。

fnmatchはマッチするかどうかを調べるだけなんだな。
メタキャラクタを正規表現に変換する機能も欲しいのだが、自前で書くしかないかな。
32デフォルトの名無しさん:2011/05/24(火) 08:55:27.77
>>31
つfnmatch.translate
In [4]: fnmatch.translate('foo/*/bar')
Out[4]: 'foo\\/.*\\/bar\\Z(?ms)'
33デフォルトの名無しさん:2011/05/24(火) 18:43:10.45
>>32
よっしゃー!
・・・と思ったら、{aaa,bbb,ccc} をサポートしてないのね、残念すぎる。
34デフォルトの名無しさん:2011/05/26(木) 18:15:35.15
>・・・と思ったら、{aaa,bbb,ccc} をサポートしてないのね、残念すぎる。
それはファイル名の一致条件じゃなくて、ファイルの有無とは一切関係なく、文字列としてシェルが機械的に展開しているだけだからねぇ。
35デフォルトの名無しさん:2011/05/27(金) 21:49:23.13
リスト内包やジェネレータ式みたいに、普通のforの後ろにifを書きたくならない?
for i in range(20) if i % 3:
 print(i)

むしろ、リスト内包のforの後ろに許されている全ての構文を許可して欲しい。
for x in range(30) if x % 2 if x % 3 for y in range(20) if y % 4:
 print(x,y)

たぶん文法的には矛盾は生じないと思うんだが。
36デフォルトの名無しさん:2011/05/27(金) 22:03:25.78
読む気しない
37デフォルトの名無しさん:2011/05/27(金) 22:05:17.88
それなんてperl?
38デフォルトの名無しさん:2011/05/27(金) 22:08:29.52
内包という字をみると、包茎を連想するわ(´・ω・`)なんでだろう
39デフォルトの名無しさん:2011/05/27(金) 22:26:30.55
たしかに欲しいかも
for y in range(10) for x in range(10):
とか
for i in range(N) if not spam(i)
とか
40デフォルトの名無しさん:2011/05/27(金) 22:33:20.62
Scala病?
41デフォルトの名無しさん:2011/05/27(金) 22:37:25.04
Scalaなんてしらんがな
42デフォルトの名無しさん:2011/05/27(金) 22:41:07.57
頭もスッカラカン なんつって
43デフォルトの名無しさん:2011/05/27(金) 22:50:12.26
42
44デフォルトの名無しさん:2011/05/27(金) 23:27:03.11
パニくるなう
45デフォルトの名無しさん:2011/05/28(土) 07:43:46.87
>>39
好みの問題だろうけど、俺は
for x, y in itertools.product(range(10), range(10)):
の方が好きだな。

後者はちょっとほしいかも。
この場合はifilterfalseでできるけど、lambdaが必要になる場合も多いから。
46デフォルトの名無しさん:2011/05/28(土) 13:37:21.98
>>45
リスト内包だったら連続forができるから、いちいちitertoolsは使わないかな。

後者、ifilterfalse&lambdaなんか使う?
for i in range(N):
 if spam(i): continue
 do_something(i)
って書いちゃう。でも>>45見たいに書ければそっち使うな。
47デフォルトの名無しさん:2011/05/28(土) 14:22:14.58
for i in range(N) if not spam(i)
は欲しいなー
48デフォルトの名無しさん:2011/05/28(土) 20:29:32.67
product使うと、何重ループでも同じコードでできるのがいい。
for xs in product(*iters):
 f(*xs)
49デフォルトの名無しさん:2011/05/28(土) 21:33:53.68
XCode4をうまくセッティングすればPythonのIDEとして使えるみたいなんで
誰かトライしてやり方教えてください。
50デフォルトの名無しさん:2011/05/28(土) 21:59:19.33
>>48
なるほど。
ただ用途が思い浮かばない。
51デフォルトの名無しさん:2011/05/29(日) 06:49:21.63
>>50
多次元空間
思いつきで遊ぶ場合はよく使うよ
物理や数学では時々使う
52デフォルトの名無しさん:2011/05/29(日) 07:26:43.51
>>49

             「 ̄ `ヽ、   ______
             L -‐ '´  ̄ `ヽ- 、   〉
          /           ヽ\ /
        //  /  /      ヽヽ ヽ〈
        ヽ、レ! {  ム-t ハ li 、 i i  }ト、
         ハN | lヽ八l ヽjハVヽ、i j/ l !
         /ハ. l ヽk== , r= 、ノルl lL」
        ヽN、ハ l   ┌‐┐   ゙l ノl l
           ヽトjヽ、 ヽ_ノ   ノ//レ′
    r777777777tノ` ー r ´フ/′
   j´ニゝ        l|ヽ  _/`\
   〈 ‐ 知ってるが lト、 /   〃ゝ、
   〈、ネ..         .lF V=="/ イl.
   ト |お前の態度が とニヽ二/  l
   ヽ.|l         〈ー-   ! `ヽ.   l
      |l気に入らない lトニ、_ノ     ヾ、!
      |l__________l|   \    ソ
53デフォルトの名無しさん:2011/05/30(月) 05:25:46.39
0-9の値を使ってそれに対応する文字列を取得する時ですが、
listは線形探索なのでO(n)であると聞きました。
tupleはO(1)で対応する文字列を取得できるでしょうか?
辞書はO(1)であると聞きました。
54デフォルトの名無しさん:2011/05/30(月) 07:48:38.62
>>53
tupleはO(n)だな。setならO(1)
55デフォルトの名無しさん:2011/05/30(月) 08:17:14.90
>>53
添字に対応するようなリスト作っておけば線形探索する必要ないんじゃない?
list[index] は O(1) だよ。tupleも同じ。

参考つ ttp://wiki.python.org/moin/TimeComplexity
56デフォルトの名無しさん:2011/05/30(月) 08:56:34.57
thanks
57デフォルトの名無しさん:2011/05/30(月) 15:55:14.61
>>> math.sin(math.radians(360))
-2.4492935982947064e-16



>>> math.sin(math.radians(360))
0.0

というように、キレイに0にすることってできますか?
58デフォルトの名無しさん:2011/05/30(月) 16:58:50.36
-0.0 を何とかするのが面倒だね
59デフォルトの名無しさん:2011/05/30(月) 17:33:30.88
誤差の表記が問題なら "%f" % sin(radians(360)) で -0.000... にはなるかな。

google電卓のようなきっちりした結果が欲しいなら、
radians(360)やmath.piといった実数ではなく、sympyとかでπを記号として代数計算。

>>> from sympy import *
>>> sin(2*pi)
0
60デフォルトの名無しさん:2011/06/01(水) 02:43:00.67
>>57
machine epsilon よりはでかいのか
61デフォルトの名無しさん:2011/06/01(水) 19:23:13.00
オライリー 初めての Python の次に読む本は?
62デフォルトの名無しさん:2011/06/01(水) 19:43:33.08
「魅惑のおっPython 上下巻」(民明書房)
63デフォルトの名無しさん:2011/06/01(水) 19:45:28.67
Programing Pythonは全然和訳が出ないからねぇ。

邦訳のある中上級向けとしてはエキスパートPythonプログラミングがあるけど、
悪い本じゃないけど、興味のある項目だけ立ち読みでもいいかも。

Python自体に、習得すべき言語特有の高度技術(悪く言えばハック)があまり無いから、
そういう意味では網羅的な書籍は「初めての〜」で十分なのかも。
64デフォルトの名無しさん:2011/06/01(水) 20:04:56.13
あれは訳さないのが正解。マジドアストッパー
65デフォルトの名無しさん:2011/06/01(水) 21:33:48.29
matplotlibの邦訳解説書が欲しい
66デフォルトの名無しさん:2011/06/01(水) 21:48:19.65
>>58-59
SymPyなんてかっこいいライブラリがあったんですね。
いろいろいじってみます。ありがとうございます。
67デフォルトの名無しさん:2011/06/02(木) 00:37:20.29
しんぱい って読んでしまった…
68628:2011/06/02(木) 00:45:24.86
しむぱい?
69デフォルトの名無しさん:2011/06/02(木) 18:00:38.04
symbolic を しむぼりっく と読むか しんぼりっく と読むかの違いでしかない

つまり しんぱい でもいい
70デフォルトの名無しさん:2011/06/03(金) 02:32:46.48
__init__はなんて読むの?
initializeから来てるとおもったら、tの発音に悩む。
71デフォルトの名無しさん:2011/06/03(金) 08:16:21.88
マスコミは違和感あるので
マスコミュと呼ぶことにしている
72デフォルトの名無しさん:2011/06/03(金) 11:26:33.22
>>70
ネイティブに読んでもらったがイニットだった
73デフォルトの名無しさん:2011/06/03(金) 11:48:23.41
フランス人に読んでもらったら、イニーだった。
74デフォルトの名無しさん:2011/06/03(金) 16:15:22.27
日本人ならイニットだろ
75デフォルトの名無しさん:2011/06/04(土) 10:37:23.54
日本人?
76デフォルトの名無しさん:2011/06/04(土) 10:50:37.83
2ch住民だったらニィトだろ
77デフォルトの名無しさん:2011/06/04(土) 12:40:18.10
numpy はなんて読むの?
ナンピーって読んでたけど。pyピーとは読まないよな……
でも真面目な場でパイパイ言ってるのは少し抵抗あるし。
78デフォルトの名無しさん:2011/06/04(土) 12:47:23.93
79デフォルトの名無しさん:2011/06/04(土) 15:46:41.13
なんぱ
ぬんぱ

どっちかを相手に合わせてる
80デフォルトの名無しさん:2011/06/04(土) 16:54:24.17
ナヌパイ、ナンパイって読んでたわ
81デフォルトの名無しさん:2011/06/04(土) 17:37:17.91
なんぴー
82デフォルトの名無しさん:2011/06/04(土) 23:38:26.99
pythonから、perlやphpのコマンドを実行するときはsubprocessモジュールを使うと思いますが、
複数のコマンドを並列に実行するにはどうしたらいいでしょうか。
スレッドというのを使えばいいのでしょうか。
具体的なコードがあれば助かります。
83デフォルトの名無しさん:2011/06/05(日) 00:00:51.71
普通にsubprocessでできるだろ。
84デフォルトの名無しさん:2011/06/05(日) 05:11:47.82
同意
85デフォルトの名無しさん:2011/06/05(日) 12:37:42.85
・゚・(つД`)・゚・ ウェ―ン 本家で怒られたよー
86デフォルトの名無しさん:2011/06/05(日) 13:56:13.08
何をやらかしたんだ?
87デフォルトの名無しさん:2011/06/05(日) 14:04:13.15
これやれよって言われて、別のことやってパッチ送っちゃった。
Pythonコミュって厳しいん?
88デフォルトの名無しさん:2011/06/05(日) 14:23:35.09
そんなの怒られるのがあたりまえだろ
宿題で別の問題やってきた小学生が怒られるようなもんだろ
89デフォルトの名無しさん:2011/06/05(日) 14:58:41.39
Pythonのlistやdictって、threadセーフなん?
具体的には、
list.pop()
dict[key] = value
がスレッドセーフかどうか知りたい。
90デフォルトの名無しさん:2011/06/05(日) 15:21:56.93
GIL的にそうじゃね
91デフォルトの名無しさん:2011/06/06(月) 00:44:51.71
Pythonでツリー構造扱うのって、どんな感じにするのがPythonicなの?
いつもこんな感じで書いてるけど、treeかleafかをisinstanceで判断してたり、
maximum recursion limit越えることを想定してなかったりで、個人的にはあんまり気にいらないんだ。

tree = [[1, 2], [[3, 4], 5], 6]
def tree_map(func, tree):
 if isinstance(tree, list):
  return map(lambda t: tree_map(func, t), tree)
 else:
  return func(tree)
tree_map(lambda x: x*2, tree) # ==> [[2, 4], [[6, 8], 10], 12]

def flatten(tree):
 if isinstance(tree, list):
  return sum((flatten(x) for x in tree), [])
 else:
  return [tree]
flatten(tree) # ==> [1, 2, 3, 4, 5, 6]
92デフォルトの名無しさん:2011/06/06(月) 07:41:51.71
>>89

list / dict はmutable object (可変オブジェクト)
状態を持つので適切にロックしないと使えないはず。

----
list.pop() は atomic だけど
他所で繰り返しで使ってるときに pop(idx) が呼ばれたら?

dict[key] = value は状況次第。置き換えの際に以前の値があると、
そのオブジェクトのデストラクタが呼ばれるかもしれない。


http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm

に、一応 atomic な操作のリストがあるけど・・
公式のドキュメントには記述がないことから、将来もスレッドセーフであるかどうかは保証がない。
(スレッドセーフかどうか調べたところで、現在の実装の詳細でしかない。)
CPython の現在の実装に依存することになるので、疑わしいときはmutex 使って明示的にロックしよう。との事らしい。
93デフォルトの名無しさん:2011/06/06(月) 19:32:33.76
>>91
OOPならvisitorパターン。Pythonのコンパイラなんかはこのパターンで構文木を処理してる。# @see compiler.walk

FPなアプローチでは、2要素のタプルを連結リストとして使うようにすれば、lisp等からほぼそのままコードをもってこれる。
(ただし、Pythonには末尾再帰最適化がないので、Pythonで実行する場合は
連結リスト版の再帰で書いたmap関数は関数呼び出しのスタックが要素の長さ(!=深さ)に比例して深くなるのが欠点)

どんなのが pythonic かって議論は自分の関心ではないので他の方に任せるとして、とりあえずコード。

http://codepad.org/eyZUIvta

汎用性を追及すると複雑化(キーワード引数がたくさん!)する例にもなってるので注意。
利用法としてはfunctools.partialでwrapper関数を作って使うのを想定。(てことにしておく)
必要なアイデアのみ拾い読みしてください ;)

一応、dequeでもイテレータ・ジェネレータ形式で表現された木でも独自に定義したクラスでも
hasnodes,getnodesに渡す関数を適切に設定すれば扱えるようになるはずです。

tree_walkの様に木構造をフラットな繰り返しで処理する例は、例えばos.walk 関数があります。
9493:2011/06/06(月) 21:13:29.19
9591:2011/06/07(火) 01:35:40.78
>>93-94
勉強になった。ありがとう
96デフォルトの名無しさん:2011/06/07(火) 09:39:19.48
C拡張で書いた高速・省メモリな汎用木構造ライブラリとかあったら便利かなぁ、と言ってみる。
97デフォルトの名無しさん:2011/06/07(火) 13:19:03.19
仕様を固めると誰かがPython3.2で作り出すかもねえ
とつぶやいてみる。
98デフォルトの名無しさん:2011/06/07(火) 16:51:36.60
997 名前:デフォルトの名無しさん[sage] 投稿日:2011/06/07(火) 12:53:38.06
ニッチな分野ではあるがなwくそ高い専用ソフトが溢れてる中にあっては貴重な存在

アホか。pylabより便利で強力で日本語の資料が揃ってるフリーソフトで溢れとるわ
初心者に科学技術用途でpythonがいいよー^^
とかひたすら勧めてる奴は馬鹿なの?
99デフォルトの名無しさん:2011/06/07(火) 17:35:37.55
じゃ、科学技術用途でおすすめの汎用LLは何なの?
100デフォルトの名無しさん:2011/06/07(火) 17:37:37.56
r
101デフォルトの名無しさん:2011/06/07(火) 17:39:06.56
それ汎用じゃないし
10293:2011/06/07(火) 18:20:14.79
汎用との両立は難しい・・・

省メモリに関してはPythonの標準モジュールでなんとかなることもあるよ。

http://www.doughellmann.com/PyMOTW-ja/articles/data_structures.html

木構造の要素の追加・削除を考えるとリストよりdequeが適切かな?
もっと大量のノードを想定した場合でも、arrayとctypesを工夫して使えば、
大量のオブジェクトを作った際に起こるpythonのパフォーマンス低下なんかは避けられる。
10393:2011/06/07(火) 18:20:49.88
今、自分自身の勉強を兼ねて>>94 の tree_walk 関数をベースにして非再帰版のtree_mapを実装中。
大量の引数指定が面倒だったので型オブジェクトを引数にモジュールを動的に生成するようにした。
こんな感じ。

# dequeの木を扱うmoduleの生成 dequetree.walk や dequetree.map 関数が作られる。
>>> dequetree = treetools.build_tree_module(collections.deque)

# リストの木からdequeの木へ変換。
>>> d = dequetree.from_([1,2,3,[4,5,6]])
deque([1, 2, 3, deque([4, 5, 6])])

>>> d.rotate(1)
>>> list(x * 2 for x in dequetree.walk(d))
[8, 10, 12, 2, 4, 6]
>>> dequetree.map("(%d)".__mod__, d, init=list)
[['f(4)', 'f(5)', 'f(6)'], 'f(1)', 'f(2)', 'f(3)']

./Modules/treeobject.c よりは ./Lib/treetools.py 狙いかな。独自のデータ構造は持たず、
ノードを持っているか(hasnodes)、ノード一覧の所得(getnodes)で抽象化し、汎用の操作を提供する試み。

400行くらいに育ってきた辺りで、再帰のtree_mapは僅か数行なんだよなぁと。FPの生産性の良さを実感。
104デフォルトの名無しさん:2011/06/07(火) 18:21:25.67
科学技術用途で最強ならboostとか言ってみるテスト
105デフォルトの名無しさん:2011/06/08(水) 02:59:03.74
Pythonの正規表現置き換えの否定を教えてください
対象は文字列で変数に入れてます
闇雲にやってみたんですが当然のようにエラーでした

!sub("{A}","{B}")
!re("{A}","{B}")
106105:2011/06/08(水) 03:14:55.12
Pythonでの否定はnotをつけるんですね

でも
import re
not sub("{A}","{B}")
not re("{A}","{B}")
だめ

a = re.compile("{A}")
not a.sub("{A}","{C}")
False

ワケワカメ・゚・(つД`)・゚・
107デフォルトの名無しさん:2011/06/08(水) 03:36:07.60
>>105-106
何がしたいのか分からん
とりあえずsubの戻り値を確認しろ
http://www.python.jp/doc/release/library/re.html#re.sub
108デフォルトの名無しさん:2011/06/08(水) 09:43:14.82
>対象は文字列で変数に入れてます
もしかして、変数 A や C に文字列を入れてて {} で展開を期待してたりしないかな?
いろいろと他の言語と混同してそうな気がする。

notで否定は出来るけど、Pythonの場合文字列が空かどうかで判別されるよ。

一番下の re.compile のコードは、compileを使わないで書くと以下に相当。

not re.sub("{A}", "{A}", "{C}")

文字列 "{C}" の中に 正規表現 "{A}" に一致する部分があればその部分を "{A}" に置換
この例の場合、"{C}" の中に 正規表現としての "{A}" に一致する部分は無いので置換は行われず
戻り値は "{C}" がそのまま返る。空の文字ではないので真偽値は True で not により否定されて、結果は False
109デフォルトの名無しさん:2011/06/08(水) 10:17:01.70
>>106
from re import *
とやりたかったのでは・・・
110デフォルトの名無しさん:2011/06/08(水) 12:33:37.99
rubyの文字列のような sub! (文字の破壊的変更) を期待してるんじゃないかなって気がしてる
111デフォルトの名無しさん:2011/06/08(水) 18:27:09.16
112デフォルトの名無しさん:2011/06/08(水) 19:19:02.25
置き換え自体がミスリードだったのか。
あっちにレスつけてきます。
113デフォルトの名無しさん:2011/06/08(水) 22:38:19.99
>>103
30行くらいで済んだよ。
http://codepad.org/OaFtsidO
114103:2011/06/09(木) 17:40:52.03
>>113

あっ、数百行になったのはモジュール全体の行数でした。

自分の tree_map 関数は・・・それでも要ダイエットな規模かなぁ
汎用性(例えば、list以外を返したい場合。)や
再利用性(例えば、tree_filter関数を書くときのロジック部分のコードの共有)を考えてると
定義部はコンパクトになったけど、内部はかなり冗長になってきた。

一点、気になった所を指摘させてもらうと、
循環した構造の木を受け取った場合、再帰版では maximum recursion limit で止まってくれますが、
非再帰版では深さ管理してないと、無限ループになって永遠とリソースを食い潰すことになりますね。
メモリが確保できなくなるまで例外として検出できないので sandbox環境でリソースを制限して実行してないと困るかもしれない。

# 補足: 再帰でも制限を回避する方法として(本当に必要なとき意外は推奨される方法ではありませんが)
# sys.setrecursionlimitを指定して制限を増やすことはできます。

スタックサイズ管理の手間は、きちんと実装把握して使えば不要になる事の方が多く
実行効率を考えると省きたいところですが、安全性なんかとの両立を考えると難しいところですね。
安易な回避方法だと stack にリスト使ってるところ、代わりに maxlen付でdeque使えば 少なくともメモリが増え続ける状況は避けられます。
115103:2011/06/09(木) 17:55:35.30
>>113

ループの効率的な組み立て方(while 1: と form/toのスタック) なんかはとても参考になりました。

自分のコードは、ちょっと余計な部分が多くて気軽に読んでもらえる規模超えてきた感じなので、
興味ある人のみどうぞ。http://ideone.com/HQqjA
116デフォルトの名無しさん:2011/06/09(木) 23:13:32.15
>>114
木は循環しない。循環したらそれはただのグラフだ。
11791=113:2011/06/10(金) 02:06:49.86
>>114
depthもstackに入れて、maxdepth越えたら例外投げるのもなしではないが、
もともとは、ハードウェアが十分にあっても木の大きさに制限が付くのが気にいらなくて、
再帰じゃない方法を探してたんだ。

sys.setrecursionlimit()で変えられるのは知ってたけど、
事前に深さを求めるってのも、制限に達するたびに制限を上げていくのも、なんか微妙だし。

>>113は、再帰での動きをイメージしながら書いたのだけど、
スタックにイテレータ積むことで、実行途中の状態を無理なく保存できたから短くできたと考えてる。
118デフォルトの名無しさん:2011/06/11(土) 11:36:57.55
変数に値が入ってるかどうかを確かめるにはif文でしょうか?tryでしょうか?

var = 1
if var:
print 'varは%sです' % var
else
print 'varはありません'

こう?
119デフォルトの名無しさん:2011/06/11(土) 12:10:04.81
>>118
それじゃできない。
try使うか、if 'var' in locals()ってするか。
120デフォルトの名無しさん:2011/06/11(土) 12:23:47.08
var = 1
try:
var
except NameError:
pass
print 'varは%sです' % var
else:
print 'varはありません'

こうですかね?
if 'var' in locals()ってどう書けばいいの?
121デフォルトの名無しさん:2011/06/11(土) 18:34:27.81
>>120
varが何かによるけど、

そういうコード書かないといけない時は、大抵もっと根本的なとこを見直した方がいい。
if 文の中で変数に値入れてるとかだったら、先にvar = None と初期化しておいて if var is not None: で判断。
(Noneを値なしとして扱う)

ローカル変数が 宣言 されてるかどうかを調べる場合は 'var' in locals() を使うけど。
出来るならわざわざ調べないといけないような状況自体を避けよう。(メタプログラミング等の特殊な用途を除いて)

NameError はローカル・グローバル・組み込みを探して見つからなかったら投げられる例外。
外のスコープに同名の変数がなければ期待通りに動くけど、注意が必要。(似た名前で組み込みに vars って名前がある。)
122デフォルトの名無しさん:2011/06/11(土) 18:39:25.02
訂正

>ローカル・グローバル・組み込みを探して
これはどこで変数宣言してるかで変わってくるので、状況次第だった。
123デフォルトの名無しさん:2011/06/11(土) 18:43:12.06
Pythonの正規表現について聞きたいんだけど
value="〜"
の16桁の数字にマッチさせたいんだけどどう書き換えればいいの?

http://ideone.com/QsYVb
124デフォルトの名無しさん:2011/06/11(土) 18:55:34.35
>>123
解決しました
125デフォルトの名無しさん:2011/06/13(月) 08:42:48.68
126デフォルトの名無しさん:2011/06/13(月) 20:04:34.63
>>125
3.1.4 release は無視ですか?
127デフォルトの名無しさん:2011/06/13(月) 20:42:45.24
TeXのバージョンみたい
128デフォルトの名無しさん:2011/06/14(火) 03:58:07.72
>>126
Python2.7は2.7.256 までリリースされるから辛抱しろ
129デフォルトの名無しさん:2011/06/14(火) 13:53:13.41
>>126
それは無視してええんじゃない?3.2がリリース済の今なら。
2.7は2系列最後だから長期的に大切な系列だけど、3.1は違うから。
130デフォルトの名無しさん:2011/06/14(火) 14:42:57.25
2.6系は終わったの?
131デフォルトの名無しさん:2011/06/14(火) 16:45:59.54
開発が、という意味なら終わってないけど?
132628:2011/06/14(火) 22:44:52.22
2.x系使ってるけどソース内でリテラル文字列ははUnicode使って、出力する際にエンコードするって感じで
書いてるんですが、これでOKでしょうか?
133デフォルトの名無しさん:2011/06/14(火) 22:48:47.66
>>130
2.6.7が6/3にリリースされたよ
134デフォルトの名無しさん:2011/06/15(水) 00:41:12.83
>>132
3.xへの移行のしやすさ(=Guidoたんの考える処のPythonicさ)で考えれば正解。
ただ、他の2.xのソースやライブラリとの連携が難点。

自分も3.xにかなりなれてしまったので、2.xでbytesに文字列入れる作法が気持ち悪くて仕方がない。
135デフォルトの名無しさん:2011/06/15(水) 01:12:35.13
そろそろ3.xに移行すべきなのかね、、、
勉強するのめんどくせ
136デフォルトの名無しさん:2011/06/15(水) 01:39:32.03
ライブラリを見捨てて移行するなんて出来ないよ><
137デフォルトの名無しさん:2011/06/15(水) 03:10:55.56
3.xへの移行なんて30分で2.x→3.xの変更点掴んで1時間以内で作業とテスト完了したよ
138628:2011/06/15(水) 05:55:45.14
>>134
なるほど、ありがとうございます。
139デフォルトの名無しさん:2011/06/15(水) 09:26:26.77
pythonで画像のバイナリ(具体的にはpngの付加情報)を編集しています。
file = open('test.png' , 'rb')
byteCodeList = [code for code in file.read()]とし、付加情報以外を捨てたとして
['t', '\xb6', 'h', 't']といった感じで取り出せると思うのですが、これを日本語に復号するにはどのようなモジュール等を使えばいいのでしょうか?
140デフォルトの名無しさん:2011/06/15(水) 09:42:55.02
1バイト毎のリストにする必要がわかりません。
メモリ馬鹿食いするし、単なるbytesでいいのでは?

file = open('test.png' , 'rb')
byteCode = file.read()
nihongo = byteCode[kokokara:kokomade].decode('some-charactor-code')

でいいのでは?
141デフォルトの名無しさん:2011/06/15(水) 09:55:15.54
>>140
python初心者なもので、byteCodeの存在を知りませんでした。
おかげでかなり前進した。ありがとうございました。
142デフォルトの名無しさん:2011/06/15(水) 09:57:21.04
>>141
×おかげでかなり前進した。
◯おかげでかなり前進しました。
間違えました。
143デフォルトの名無しさん:2011/06/15(水) 09:59:49.56
>>141
分かったならよかったけど。
byteCodeはただの変数名だよ。file.read()をわざわざリストにせずに、そのまんまつかってるだけ。
144デフォルトの名無しさん:2011/06/15(水) 10:13:35.88
>>143
たしかにただの変数名でした。
コピペして動いたので調子にのりました。(´・ω・`)
ファイルオブジェクトについて調べてみようと思います。
145デフォルトの名無しさん:2011/06/15(水) 10:35:03.62
>125
そうか 2.7.1.8.2.8... みたいなバージョンになっていく夢は消えたのか
146デフォルトの名無しさん:2011/06/15(水) 12:48:51.52
>>144
どうでもいいけど、fileって、Python2.7までは組み込み関数名とぶつからない?
この部分のコードだけならいいけど、一応他の変数名に変えた方が良いと思われる。
自分はC言語以来の慣習で、大体こういうケースでは fpという変数にしてるけど。
147デフォルトの名無しさん:2011/06/15(水) 13:35:01.03
>>146
名前はかぶるけど、それが問題になることはない。
isinstance(f, file) で厳密にチェックする必要があるケースは無いし、
ファイルを開くときは file() じゃなくて open() するし。
標準ライブラリの中でもバンバンローカル変数名にfileって使ってるから、
気にしなくておk
148デフォルトの名無しさん:2011/06/15(水) 15:34:24.80
>>145 METAFONTかよw
149デフォルトの名無しさん:2011/06/15(水) 19:35:27.66
ピリオドがやたら多いとダイオキシンみたいで、なんか嫌かもw
150デフォルトの名無しさん:2011/06/15(水) 22:30:21.87
体当たりのルートミスを見られるのはしぇにぃchだけ!
151デフォルトの名無しさん:2011/06/15(水) 22:32:25.54
ごめん誤爆
152デフォルトの名無しさん:2011/06/16(木) 10:09:44.90
メモ帳にutf-8形式で保存しててそれを
fin=codecs.open(path, 'r', shift_jis)で読み込んだときfinの中身はどうなってるんでしょうか?
str型のshift-jis形式なのかエンコード宣言ではutf-8なのでutf-8形式なのかそもそもutf-8形式のファイルをshift-jisで読み込むのがおかしいのか混乱中です
153デフォルトの名無しさん:2011/06/16(木) 10:19:50.86
すみません自己解決しました。
for line in finでループさせるとUnicode型の文字列に変換されるんですね。
ならこの場合fin=codecs.open(path, 'r', shift_jis)みたいにエンコード形式を指定するのは何故なのでしょうか?
154デフォルトの名無しさん:2011/06/16(木) 11:51:54.21
>>152-153
君のコードで、変数 shift_jis の中に何が入ってるの?
155デフォルトの名無しさん:2011/06/16(木) 12:33:57.26
>>154
ファイルの文字列をUnicode型にデコードする際に必要なんですね。
スレ汚しすみません
156デフォルトの名無しさん:2011/06/16(木) 13:34:21.56
codecs.open(path, 'r', shift_jis)
じゃなくて
codecs.open(path, 'r', 'shift_jis')
だよな。
それとも本当にshift_jisなる変数でも定義してるのか??
157デフォルトの名無しさん:2011/06/16(木) 14:42:55.26

> fin=codecs.open(path, 'r', shift_jis)で読み込んだときfinの中身はどうなってるんでしょうか?

openの段階では、まだファイルの内容は読み込まれず、
変数fin は file オブジェクト (io.openの場合は io.TextIOWrapper)

実際にデータを読み込む時・read系メソッドやイテレータで評価(内部でreadlineが呼ばれる)に
第三引数のencoding (後から参照する場合は fin.encoding) へデコードされる

codecs.openのencodingは、対象とするファイルのエンコーディングを指定する
utf-8 のファイルを読み込むなら utf-8、shift_jisでファイルへ書き出すならshift_jis
pythonスクリプト内では、ファイルの内容はunicodeの文字列のデータとして扱います。
158デフォルトの名無しさん:2011/06/16(木) 16:31:58.63
>>157
詳しい解説ありがとうございます。
何度か熟読したのですがやはり上手くいかないのですが
メモ帳にUTF-8方式で保存してあって
fin=codecs.open(filename, 'r', 'utf-8')で読み込み、
for l in fin:
print l.encode("utf-8")
で表示しても元の文字列じゃなくて文字してしまいます。
何度もすみませんが理由分かる方いましたらお願いします。

159デフォルトの名無しさん:2011/06/16(木) 16:42:03.14
>>158
コマンド プロンプトはShift_JISなのに
l.encode("utf-8")してどうする。
160デフォルトの名無しさん:2011/06/16(木) 16:52:47.48
>>159
取り合えずメモ帳の保存形式をASCIIにして
fin=codecs.open(filename, 'r', 'shift_jis')で
print l.encode("shift_jis")で表示することが出来ました。
回答ありがとうございました。
161デフォルトの名無しさん:2011/06/16(木) 17:02:17.18
やはり初心者はPythonの文字コード辺りで躓くのかね
162デフォルトの名無しさん:2011/06/16(木) 17:05:52.88
それ以前にきちんと推敲してから質問してほしいな
163デフォルトの名無しさん:2011/06/16(木) 17:21:28.83
codecs.open よりも io.open の方がいいよ。
大抵のケースではそのまま書き換えるだけで使えるが、io.openの方が仕様が一貫している。
3.xへの移行もしやすいし。
164デフォルトの名無しさん:2011/06/16(木) 21:50:32.79
linux (ubuntu)で python2.7 やってるが、

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) 

て出てこまってる。
165デフォルトの名無しさん:2011/06/16(木) 21:58:39.62
スマソ ageてた。
166デフォルトの名無しさん:2011/06/16(木) 22:20:57.23
いつからage禁止になったの?
167デフォルトの名無しさん:2011/06/16(木) 22:23:51.00
>>164
それはコード見ないとわからないな。
自分で究明したいなら
http://wiki.python.org/moin/UnicodeEncodeError
を読めばわかるかと。
168デフォルトの名無しさん:2011/06/16(木) 23:48:16.17
日本語を含んだリストなり辞書型とかめんどうだな
169デフォルトの名無しさん:2011/06/17(金) 05:07:36.45
>>160
unicodeで普通にprintすれば、わざわざ encode('shift_jis') しなくても表示してくれるはずだけど。

メモ帳で UTF-8 で保存するとファイルの先頭に ZWNBSP とか入らなかったかな?

encodingを 'utf-8-sig' で open してみるとどう?

170デフォルトの名無しさん:2011/06/17(金) 06:32:47.92
>>167

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
import sys

SCREEN_SIZE = (640, 480) # 画面サイズ

# Pygameを初期化
pygame.init()
# SCREEN_SIZEの画面を作成
screen = pygame.display.set_mode(SCREEN_SIZE)
# タイトルバーの文字列をセット
pygame.display.set_caption(u"ウィンドウの作成")

# ゲームループ
while True:
screen.fill((0,0,255)) # 画面を青色で塗りつぶす
pygame.display.update() # 画面を更新
# イベント処理
for event in pygame.event.get():
if event.type == QUIT: # 終了イベント
sys.exit()
171デフォルトの名無しさん:2011/06/17(金) 06:36:39.29
python2.x の文字コードは鬼門
172デフォルトの名無しさん:2011/06/17(金) 06:38:05.01
XのLANGなりがen_USとかCとか
173デフォルトの名無しさん:2011/06/17(金) 06:38:58.36
>>170
pygame.display.set_caption(u"ウィンドウの作成".encode('utf-8'))
174デフォルトの名無しさん:2011/06/17(金) 06:52:43.19
>>173
そこをなんとか・・・・。お願いできませんか?
175デフォルトの名無しさん:2011/06/17(金) 13:24:47.38
pythonで、何かしら1つキーが押し下げられたら、その値を取得することは可能でしょうか?
コンソールを利用した対話形式のプログラムで、
下記のように *,1,2, ... が表示されており、キーボードの2,8を押すごとに、
*が表示される行が上下するようにしたいのですが、
input()で値を取得しようとすると2enter,2enterと入力する羽目になってしまい、何とかしたいのですが

<初期状態>
*1
 2

<2キーを押した後>
 1
*2
176デフォルトの名無しさん:2011/06/17(金) 13:29:02.33
cursesかWindowsならmsvcrt.getch()
177デフォルトの名無しさん:2011/06/17(金) 17:34:06.69
有難うございます
178デフォルトの名無しさん:2011/06/18(土) 02:00:20.90
pythonの辞書データだと単純にキーと値の順番が違うだけで
別のデータに扱われてしまうのですがどうしたら良いでしょうか?

[{"apple":10, "orenge":20}, {"orenge":20, "apple":10}]
これを単純に同一のデータとして扱いたいのですが・・・
179デフォルトの名無しさん:2011/06/18(土) 02:06:37.48
>>> L = [{"apple":10, "orenge":20}, {"orenge":20, "apple":10}]
>>> L[0] == L[1]
True
>>>
180デフォルトの名無しさん:2011/06/18(土) 02:28:37.30
Orengeってなんだ?
181デフォルトの名無しさん:2011/06/18(土) 02:44:55.51
>>> L = [{"apple":10, "orange":20}, {"orenge":20, "apple":10}]
>>> L[0] == L[1]
False
182デフォルトの名無しさん:2011/06/18(土) 02:49:45.22
まあそうなりますわな
183デフォルトの名無しさん:2011/06/18(土) 06:14:31.38
pythonではマジックコメント (coding: utf-8 とか) があるとそれにしたがって
自動的にデコードされますが、おなじことを自前でやるにはどうしたらいいでしょうか。
open('filename', encoding='magic')
みたいのがほしいです。
184デフォルトの名無しさん:2011/06/18(土) 06:52:31.61
>>178
同値(==で比較してTrueになる関係)という意味なら>>179がやっているように辞書ならキーの順番は関係なく同値になってるはず。

本当に文字通り、同一(isで比較してTrueになる関係。片方を変更すると、もう片方も変更される)という意味なら、
やっぱりキーの順番は関係ないんだけど、
L = [{"orenge":20, "apple":10}]
L.append(L[0])
とか、
L = (lambda a: [a, a])({"orenge":20, "apple":10})
みたいにしないといけない。
185デフォルトの名無しさん:2011/06/18(土) 06:54:06.64
>>183
自分で実装してください
186デフォルトの名無しさん:2011/06/18(土) 07:00:30.67
>>183
PyPyでは
ttp://codespeak.net/svn/pypy/trunk/pypy/interpreter/pyparser/
のpyparse.py, pytokenize.pyあたりで、その処理が実装されてる。
pyparse.pyのPythonParser.parse_sourceあたり。

目から鱗のテクニックっていうよりは、力技で実装されてる感じ。
187デフォルトの名無しさん:2011/06/18(土) 13:14:51.13
スライスのインデックス指定で異常ととれる値を指定してもエラーとならないのはなぜでしょうか
>>> "ab"[2:1]
''
188デフォルトの名無しさん:2011/06/18(土) 16:26:23.82
sys.stdoutの先がターミナルなら色付き、ファイルへのリダイレクトなら色なし、
という処理を考えてます。
その判定はどうやってやればいいでしょうか。
sys.stdout.isatty()ではうまくいきませんでした。
189デフォルトの名無しさん:2011/06/18(土) 17:01:48.87
>>188
まちがえました、isattyでOKでした。
190デフォルトの名無しさん:2011/06/18(土) 17:55:50.56
>>> a = ({'apple':10,'orange':20}, )
>>> b = ({'orange':20,'apple':10}, )
>>> a == b
True
191デフォルトの名無しさん:2011/06/18(土) 17:56:42.94
>>183
>pythonではマジックコメント (coding: utf-8 とか) があるとそれにしたがって
>自動的にデコードされますが、

されません。
デコードされるのはソースコードだけです。
192デフォルトの名無しさん:2011/06/18(土) 17:59:18.88
>>187
異常じゃないからです
193デフォルトの名無しさん:2011/06/18(土) 18:01:05.68
>>183
codecs.getreader('magic')(open('filename', 'rb'))
194デフォルトの名無しさん:2011/06/19(日) 09:17:17.14
こんにちは。Pythonいじり始めて三日目です。
たぶん、基本的なことだと思うのですが原因が分からないので質問させて頂きたく。
WinXP&Python 2.7使っています。

↓これを動かすとサイズが2と表示され、コメント外すと0になります。
class TrgClass:
list=[]

trgA=TrgClass()
trgA.list.append('a1')
trgA.list.append('a1')

trgB=TrgClass()
#trgB.list=[]
print len(trgB.list)

trgBを宣言したときにはlistは初期化されないものなのでしょうか?
これは毎回初期化処理を自分で書かないといけないものなのでしょうか??
195デフォルトの名無しさん:2011/06/19(日) 09:26:30.53
>>194
そこで定義してるのはクラス変数
Pythonのインスタンス変数の扱いは少し変わってるから
ちゃんと勉強すべし
196デフォルトの名無しさん:2011/06/19(日) 09:51:58.30
>>195
ありがとうございます!動きました!



class TrgClass:
def __init__(self):
self.list2=[]

trgA=TrgClass()
trgA.list2.append('a1')
trgA.list2.append('a1')
print len(trgA.list2)

trgB=TrgClass()
#trgB.list=[]
print len(trgB.list2)
197デフォルトの名無しさん:2011/06/19(日) 16:03:56.63
python使いはエディタ何使ってるの?
198デフォルトの名無しさん:2011/06/19(日) 16:17:49.50
Python の Firebird 用ライブラリを使いたいのですが
Firebird 2.1.x 用の kinterbasedb 3.3 が最新なのでしょうか?
Firebird 2.5.x や 3.x 用のものは無いのでしょうか?
199デフォルトの名無しさん:2011/06/19(日) 18:03:56.00
>>197
eclipse一択
200デフォルトの名無しさん:2011/06/19(日) 18:17:06.38
Vim
201デフォルトの名無しさん:2011/06/19(日) 18:53:41.52
なんといってもvim
202 ◆AcQFrtuMJE :2011/06/19(日) 19:39:29.91
LINUX使いだから Geany
203デフォルトの名無しさん:2011/06/19(日) 19:50:10.38
俺も editor は vim だ
204デフォルトの名無しさん:2011/06/19(日) 19:58:32.10
折り畳みが完全にワークするからvim
205デフォルトの名無しさん:2011/06/19(日) 20:14:49.27
何この、emacsのスルーっぷり?
206デフォルトの名無しさん:2011/06/19(日) 20:16:35.93
xyzzy
207デフォルトの名無しさん:2011/06/19(日) 20:58:09.94
ところでみんな LINUXですかMACですか普通にWinですか?
208デフォルトの名無しさん:2011/06/19(日) 20:59:44.27
マークIIIです
209デフォルトの名無しさん:2011/06/19(日) 21:11:27.59
vim
210デフォルトの名無しさん:2011/06/19(日) 21:12:52.92
vim on Linux (SUSE, Arch)
vim on Mac OS X
vim on Windows XP
211デフォルトの名無しさん:2011/06/19(日) 21:32:17.66
>>203
なんか・・・・かっこいいです。先輩
212デフォルトの名無しさん:2011/06/19(日) 22:02:59.72
edlin
213デフォルトの名無しさん:2011/06/19(日) 22:15:44.84
eclipseだな
windows+Javaの環境から入ったせいもあるが、
他のOSでもJavaなしの環境で作業することがありえないので替える気が起きない
214デフォルトの名無しさん:2011/06/19(日) 22:48:10.11
vim on Linux (SUSE, Arch)
vim on Mac OS X
秀丸 on Windows XP
215デフォルトの名無しさん:2011/06/19(日) 22:49:56.36
とある日に技術的なブレイクスルーが起きて、
かつてのbasicのようにjavaやflashが堕ちていくのは目に見えね?
216デフォルトの名無しさん:2011/06/19(日) 23:04:16.43
Javaのブレイクスルーはとっくに起きてJava on PC(J2SE)は絶滅寸前
J2EEが何とか生き残るかと思った所に、
GoogleがApache Hormonyのノウハウをかっさらって
Android OSを作ってMobile/EmbeddedでJavaっぽい何か(not J2ME)が生き残った
SDKとしてのEclipseは使われてるけど、ランタイムとしてのJ2SEはもうだめだ

かと言って、PythonがPC上で流行るとも思えないけどな ;(
217デフォルトの名無しさん:2011/06/19(日) 23:04:47.21
全部小文字で書いていいのはflashだけだよね
218デフォルトの名無しさん:2011/06/19(日) 23:07:21.00
PC上なら Jsva より Python だわ
219デフォルトの名無しさん:2011/06/19(日) 23:11:25.35
Javaかどうかはわからないけど、JavaやC++やC#みたいな何かは生き残るでしょ。小改良で。
ああいう型検査はっきりしていて、集団で開発するのに適した言語は必要。
RubyやPythonで置きかえられない。
Scalaは流行らないだろうな。
220デフォルトの名無しさん:2011/06/19(日) 23:14:17.44
cat on Linux
221デフォルトの名無しさん:2011/06/19(日) 23:25:58.47
>>220
本当に cat でプログラミングしてるなら script でコマンドログ出してみろや、クズが
222デフォルトの名無しさん:2011/06/19(日) 23:28:24.92
どう見てもネタレスになに突っかかってるんだ?
223デフォルトの名無しさん:2011/06/19(日) 23:29:44.38
ED on Impotents no kuzu ver.221
224デフォルトの名無しさん:2011/06/20(月) 00:25:26.32
タプルをキーにしたハッシュにバリューとしてリストを入れることって簡単に実現できますか?

hash = { (a, b): list[] }

みたいなイメージで(これじゃダメですよね)。
バリューとして0個以上の文字列を入れたいのですが。
225デフォルトの名無しさん:2011/06/20(月) 01:18:33.26
今ってPython-devで何が熱いの?
話題についていけなくて。。。
226デフォルトの名無しさん:2011/06/20(月) 01:30:33.90
>>224
hash = { (1, 2): [] }
227デフォルトの名無しさん:2011/06/20(月) 01:51:06.33
>>226
サンクス

hash = {('\n', '\n'): []}
hash[('a', 'b')] = [].append('111')
hash[('a', 'b')] = [].append('222')
hash[('a', 'b')] = [].append('333')
print hash
とやってみたのですが
[{'a,' 'b'): None, ('\n', '\n'): []}
となってしまいます。タプルabで指定したハッシュでよびだされるリストに111から333までが
入っているようにしたのですが、良くわかりません。
質問の仕方がまずいですかね?
228デフォルトの名無しさん:2011/06/20(月) 02:16:34.82
>>227
print [].append('111')
すればわかる
229デフォルトの名無しさん:2011/06/20(月) 02:29:09.50
>>228
Noneになっちゃうけど、hash = { (1, 2): [] }のリスト部分に対する
appendとしてhash[('1', '2')] = [].append('111')じゃ正しくないってことですか?
ダメだわからん・・・
230デフォルトの名無しさん:2011/06/20(月) 02:44:34.83
>>229
[].appendの戻り値はNone リストを返さず[]を更新する。
231デフォルトの名無しさん:2011/06/20(月) 03:31:19.60
hash = {('\n', '\n'): []}
hash[('a', 'b')].append('111')
hash[('a', 'b')].append('222')
hash[('a', 'b')].append('333')
print hash

今回だけ特別だぞ
232デフォルトの名無しさん:2011/06/20(月) 03:48:34.11
>>231
それやってみたけど
KeyError: ('a', 'b')になっちゃいます。

>今回だけ特別だぞ
そんな冷たいこといわないでよもう。
233 忍法帖【Lv=12,xxxPT】 :2011/06/20(月) 04:46:10.24
>>232
hash[('a', 'b')] = ['111']
234デフォルトの名無しさん:2011/06/20(月) 05:44:58.05
むしろ、hash[キー] = [].append(値) なんて書き方になった理由が知りたい
そこに勘違いの理由がある気がするんだ
235デフォルトの名無しさん:2011/06/20(月) 06:12:22.20
= を数学のイコールと勘違いしてるんじゃまいか
もっと言うと関数型言語のパターンマッチとか
236デフォルトの名無しさん:2011/06/20(月) 06:38:26.65
いや一番気になるのは空リストなんだ
237デフォルトの名無しさん:2011/06/20(月) 07:10:06.31
http://codepad.org/BWwWGPFT
これの出力の5行目は、Barを期待していたんだけどFoo。
なんで?
238デフォルトの名無しさん:2011/06/20(月) 07:25:40.50
変数selfがメソッド内で書き換えられて捨てられただけだからでは

そもそもメソッドを呼び出すとクラスが変わるオブジェクトなんてありうるのか
239デフォルトの名無しさん:2011/06/20(月) 07:29:29.11
>>232
from collections import defaultdict
hash = defaultdict(list)
hash[('a', 'b')].append('111')
240デフォルトの名無しさん:2011/06/20(月) 07:40:57.22
>>237
やってることは
def f(n):
 n = n + 1

n = 0
f(n)
print n # ==> 0
と同じだ。
241デフォルトの名無しさん:2011/06/20(月) 10:56:49.45
>>233
リストへの追加になってない。
242デフォルトの名無しさん:2011/06/20(月) 11:03:33.57
>>239
が正解だが、こういうデータ構造はPerlやRubyの方が簡単に記述できるやね。
リファレンス使って。
243デフォルトの名無しさん:2011/06/20(月) 11:31:57.39
>>242
Rubyってリファレンスあるん?
PerlのリファレンスよりもPythonの方が分かりやすくて好きなんだが。
244デフォルトの名無しさん:2011/06/20(月) 14:16:49.08
setdefault使えばオーケー

hash = {}
hash.setdefault(('a', 'b'), []).append('111')
245デフォルトの名無しさん:2011/06/20(月) 15:14:06.92
>>243
Rubyのリファレンスに対する考え方はPythonのそれとあんまり変わらんやね
それらの中ではPerlが一番面倒で、RubyはPythonと似たようなもんだな
246デフォルトの名無しさん:2011/06/20(月) 16:11:26.38
単なるマップやリスト、連想配列使っているだけならすごく楽なんだけど、こういうちょっと凝った
データ構造使うと一気に見通しが悪くなってパズル状態になるよなPythonは。
あのレベルの質問に間違った回答がいっぱいつくのはC++やJavaではありえない。

テンプレートやコレクションクラスは、それだけを使うとPythonよりも面倒だが、組み合わせても
急に難しくなったりはしない。
247デフォルトの名無しさん:2011/06/20(月) 16:26:56.44
型推論のあるhaskellやocamlに改宗すれば?
248デフォルトの名無しさん:2011/06/20(月) 16:27:53.66
というか、どんな言語でも
不慣れな状態で複雑な構造を作ろうとすると不恰好になるのは一緒。
249デフォルトの名無しさん:2011/06/20(月) 16:51:51.73
>こういうちょっと凝ったデータ構造使うと一気に見通しが悪くなって

おまえの頭の悪さをここで自慢せんでくれ
250デフォルトの名無しさん:2011/06/20(月) 17:01:49.33
バカに下手なバグをこさえさせない方が言語として優れてるだろ
251デフォルトの名無しさん:2011/06/20(月) 17:02:20.96
>>246
質問が意味不明だったから回答者が混乱しただけで、
Pythonでもコードは簡単だろ?どこがパズルなんだ?
キーが無いときでもsetdefault使えばKeyError出ないってだけなんだから
252デフォルトの名無しさん:2011/06/20(月) 17:22:54.65
python信者って冷静な議論ができなくてすぐ発狂するからキライ
253デフォルトの名無しさん:2011/06/20(月) 17:27:54.35
で、タプルがキーでリストが値の辞書の
どこが複雑だったんだ?w
254デフォルトの名無しさん:2011/06/20(月) 17:28:10.43
お相撲さんはすぐはっけよいするから好き
255デフォルトの名無しさん:2011/06/20(月) 17:42:05.37
簡単、というのには違和感があるな。
言語としての実装のしやすさ、わかり易さの議論をしていているのに、
俺はこんなの簡単だ、と荒らし出す奴がでてくるともう不毛なののしり合いだね。
それが狙いなんだろうケド。
256デフォルトの名無しさん:2011/06/20(月) 17:53:48.55
・辞書は存在しないキーを指定するとKeyErrorを返す
  KeyErrorを返さず値を取得するメソッドにsetdefaultやgetがある
・リストの末尾に要素を追加するにはappendを使う

これだけなんだが、これって難しいか?
煽りとかじゃなく、純粋な疑問なんだが
257デフォルトの名無しさん:2011/06/20(月) 17:58:34.69
はいはい簡単ですね。
258デフォルトの名無しさん:2011/06/20(月) 18:06:47.67
Perlなら

追加
push(@{list{'a'}{'b'}}, '111')

取り出し
$ref = $list{'a'}{'b'}
$ref->[0]

実に直感的でわかり易いな。
259デフォルトの名無しさん:2011/06/20(月) 18:11:31.61
Pythonを使えるのになおPerlのリファレンス構文を覚えている人は
尊敬に値すると思う
260デフォルトの名無しさん:2011/06/20(月) 18:13:37.23
Perlなら直感的にできることをわざわざ複雑にしているPythonはオワコン
261デフォルトの名無しさん:2011/06/20(月) 18:23:11.28
Rubyだと

追加
hash = Hash.new{|h,k| h[k] = Hash.new{|h2,k2| h2[k2]= []}}
hash['a']['b'].push('111')

取り出し
c = hash['a']['b']
c[0]

宣言がちょっとわかりづらいが、まあPythonよりはずっとマシだな。
素直に考えられる。
262デフォルトの名無しさん:2011/06/20(月) 18:23:18.27
スレ伸びてると思ったら、キチガヒが一匹迷い込んでいたのか、やれやれ。
次の方質問どうぞ。>>262
263デフォルトの名無しさん:2011/06/20(月) 18:25:07.17
おまいら記憶力がいいな
もういっそ、スクリプトはbashとlispしかない世界に移りたいわ
264デフォルトの名無しさん:2011/06/20(月) 18:28:34.58
もうPerl覚えてないけど、>>258
push(@{$list{'a'}{'b'}}, '111')
じゃないか?
265デフォルトの名無しさん:2011/06/20(月) 18:55:54.36
lispは近寄りたくないな
266デフォルトの名無しさん:2011/06/20(月) 18:56:50.95
Pythohで>>261を作ると

追加
hash = defaultdict(lambda:defaultdict(list))
hash['a']['b'].append('111')

取り出し
c = hash['a']['b']
c[0]

分かりやすさはrubyと同じくらいじゃね?
267デフォルトの名無しさん:2011/06/20(月) 19:13:42.76
Pythohで>>261を作ると

追加
hash = {'a': {'b': []}}
hash['a']['b'].append('111')

取り出し
c = hash['a']['b']
c[0]

分かりやすさは >>256
268デフォルトの名無しさん:2011/06/20(月) 19:19:26.44
>>267
それだと>>266と違って存在しないキーを入れるとKeyErrorが出る
それはそれで良いと思うけど、>>261と同じではない
269デフォルトの名無しさん:2011/06/20(月) 19:21:24.55
わざわざ辞書の辞書をつくらなくても>>239>>244でいいんだから
Python分かりやすいと思うんだけど
270デフォルトの名無しさん:2011/06/20(月) 19:24:59.62
>>269
それは言えてるけど、辞書の辞書が簡単に作れないと思われてもね
271デフォルトの名無しさん:2011/06/20(月) 19:38:34.87
どうしてもタプルの辞書よりも辞書の辞書がいいなら↓でいいじゃん。
hash = {}
hash.setdefault('a', {}).setdefault('b', []).append('111')
272デフォルトの名無しさん:2011/06/20(月) 19:50:46.69
>>271
それは冗長すぎるだろw
素直にdefaultdict使っとけ
273271:2011/06/20(月) 20:06:57.62
from collections import defaultdict

hash = defaultdict(lambda: defaultdict(list))
hash['a']['b'].append('111')

こうすんの?lambdaがプチキモスww
274デフォルトの名無しさん:2011/06/20(月) 20:23:36.73
で、がキーが2つで、リストが値の辞書のどこが複雑だったんだ?w
ほんとPython使いはレベル低いなww
275デフォルトの名無しさん:2011/06/20(月) 20:25:28.74
普通ならここでLISPならこう実装する(キリッ
って奴が現れるものだが、そういうレベルの奴もいないんだな。
276デフォルトの名無しさん:2011/06/20(月) 20:35:12.31
Javaならこうなる、とHashMapとArrayListで書いてみようと思ったけど、相当めんどくさくて
40分コースだな。やっぱ覚えることが少なくて、すぐ書き始めらえるPerlは偉大だわ。
277デフォルトの名無しさん:2011/06/20(月) 20:43:57.41
>>275
リファレンスの話なのか辞書のデフォルトの話なのか
どっちについて答えればいいのかわからないし
なんにせよ興味ないからレスしなくていいやって人が結構いそう
278デフォルトの名無しさん:2011/06/20(月) 21:02:42.44
荒れてるけど、こういう風にやりたいことがあって、具体的なコードを出して比較するのは宗教戦争
としては面白いと思った。

Perlの
push(@{$list{'a'}{'b'}}, '111')

この短さは即席プログラムを作る能力に特化しただけのことはあるなあと改めて感心した。余計な
キーワードは使わないし、いちばん短いし。
ただ、これを見てぱっと何をやっているのか理解するにはそれなりに時間がかかりそうだよね。

279デフォルトの名無しさん:2011/06/20(月) 21:06:05.09
>>261
そういやRubyはタプルが無いからハッシュ重ねるしかないんだよな。
ちょっと考えてみたけど、それ以上に簡単にできなさそう。
280デフォルトの名無しさん:2011/06/20(月) 21:10:24.02
Larryも、perlは毎日、perlでプログラムを書く人向けだって
リャマ本あたりに書かれてたぞ
道具として利用する分には、不便極まりないけど
281デフォルトの名無しさん:2011/06/20(月) 21:13:46.79
>>279
配列をキーにすればいいんじゃね
hash = Hash.new{|h, k| h[k] = []}
hash[[:a, :b]].push "111"
282デフォルトの名無しさん:2011/06/20(月) 21:14:41.61
>>274
レベル低いのは>>246>>255だけだろwww
283デフォルトの名無しさん:2011/06/20(月) 21:15:51.55
>>281
なるほど。そっちの方がわかりやすいですね。rubyはnewメソッド使うのががややこしい感じになるなあ。
284デフォルトの名無しさん:2011/06/20(月) 21:17:30.84
>>281
Pythonがタプルを用意している理由の一つに、リストは可変だから
辞書のキーにしたあとに値が書き換えられたらマズイっていうのが
あるんだけど、Rubyだとどうなるん?
285デフォルトの名無しさん:2011/06/20(月) 21:19:16.03
Perl覚えること少ないか?
マトモに使おうとすると、それこそウンザリするようなバッドノウハウが必要だぞ。

すぐに書き始められるのは同意するけど、すぐに何やっているのか判らなくなる。
286デフォルトの名無しさん:2011/06/20(月) 21:21:32.22
CとかC++、Javaでよく使う、構造体やクラスにいろいろメンバを入れて
作るデータ構造をリンクリストにする、みたいな使い方をする場合、
PerlとRubyとPythonではどれが最強なの?
287デフォルトの名無しさん:2011/06/20(月) 21:29:28.40
# Python
from collections import defaultdict
hash = defaultdict(lambda: defaultdict(list))
hash['a']['b'].append('111')

# Ruby
hash = Hash.new{|h,k| h[k] = Hash.new{|h2,k2| h2[k2]= []}}
hash['a']['b'].push('111')

# Perl
push(@{$list{'a'}{'b'}}, '111')

今まで上がった、辞書の辞書にリスト入れるケース。
Rubyそんなに分かりやすいか?追加、参照はPythonと完全に同レベルだけど、
宣言はPythonの方が分かりやすいと思うが。
importが多くなりがちというPythonの欠点を無視すれば、だが。
Perlの即席麺っぷりは別格。
288デフォルトの名無しさん:2011/06/20(月) 21:35:17.50
>>284
a = [:a, :b]
hash = { a=>"test" }
a.push :new
hash #=> { [:a, :b, :new] => "test" } ごらんの有様だよ!
289デフォルトの名無しさん:2011/06/20(月) 21:39:09.82
>>282
悪いが上のPerlとRubyの実装書いたのは246だ。
ほんとレベルが低い煽りしかできねえんだな。
290デフォルトの名無しさん:2011/06/20(月) 21:40:44.25
Perlは初期化なしにいきなり書けるのは利点だけど、複雑な構造を扱うと結構分かりにくい
Ruby、Pythonはちょっと考え方や要素が違うだけで似たようなことが似たような感じに扱えると思う
タプルをキーにするようなのはPythonが素直だね

…というか、ここ何の勉強をするスレだっけか
291デフォルトの名無しさん:2011/06/20(月) 21:41:52.36
>>266書いたの俺だけど、お前はアホだと思うよ
292デフォルトの名無しさん:2011/06/20(月) 21:41:58.10
>>290
LLバトルロワイヤルスレになりました。
293デフォルトの名無しさん:2011/06/20(月) 21:46:17.71
d = defaultdict(list)

d = dict(default=list)
で書ければいいのにと思った。
省略(あるいはdefault=None)のときは、今までのdictと同じ動作で。
294デフォルトの名無しさん:2011/06/20(月) 21:48:09.43
PerlとかRubyの話は、よそのスレでやってくれ。
295デフォルトの名無しさん:2011/06/20(月) 21:48:51.93
>>289
>>246
>で、がキーが2つで、リストが値の辞書のどこが複雑だったんだ?w

Pythonのそれが複雑だって言ってたのお前だけだろwww
296デフォルトの名無しさん:2011/06/20(月) 21:49:39.49
LLバトルロイヤルスレってなくなったよね。
誰か立ててこの問題書き込んできて。
297デフォルトの名無しさん:2011/06/20(月) 21:52:03.02
>>293
dict(default=list) は {'default': <type 'list'>} を返すから
そういう関数を定義するのは互換性からいって難しい
298デフォルトの名無しさん:2011/06/20(月) 21:53:00.31
>>295
お前はほんとうに度し難いバカだな。「複雑さ」というのが自分が理解できるかどうかで
しか判断できない。
ある程度込み入ったデータ構造を表現するにはどの言語が適しているか、という話だろう。
具体的な内容について触れてるならまだ聞いてやらんこともないが、どこが複雑なの、どこが
複雑なの、と低レベルなあおりを書くだけで実装一つできない(理解してんじゃなかったの?)
まあいくら馬鹿でも匿名掲示板で「ぼくはばかです」と宣伝しなくてもいいんだぞ(笑)
299デフォルトの名無しさん:2011/06/20(月) 21:53:43.52
そういえばくだスレも見当たらないね
300デフォルトの名無しさん:2011/06/20(月) 21:54:25.07
>>294
> PerlとかRubyの話は、よそのスレでやってくれ。

他の言語ではどうやっているのだろう? という疑問は知見を広める意味で重要。
301293:2011/06/20(月) 21:55:34.98
>>297
ほんとだ・・・しらんかった・・・
def dict(**kwd):
    return kwd
みたいな動作するのね・・・
つーかイマイチな仕様だな・・・3.xで捨てちゃえば良かったのに。
302デフォルトの名無しさん:2011/06/20(月) 21:57:19.42
hash = defaultdict(lambda: defaultdict(list))
hash = Hash.new{|h,k| h[k] = Hash.new{|h2,k2| h2[k2]= []}}

これはPythonの方がわかりやすいと思うがなあ。
単純に記述の複雑さ、カッコの入れ子具合で。rubyはいかにも「解読」
という感じになってしまう。

Perlは無名配列(だっけ?)を知らないと悩むよな。あんまり知らなかったの
で実際迷った(w
303デフォルトの名無しさん:2011/06/20(月) 21:57:19.87
>>298
> ある程度込み入ったデータ構造を表現するにはどの言語が適しているか、という話だろう。

違うよ。
込み入ってるかどうかは知らないけど、データ構造をPythonでどう表現するか、という話だよ。
304デフォルトの名無しさん:2011/06/20(月) 21:58:18.97
pass
305デフォルトの名無しさん:2011/06/20(月) 21:59:52.07
>>300
やるなと言ってるんじゃない。よそでやれと言っている。
政治ニュースを追いかけることは知見を広めるために必要だが、このスレでやることではないだろう。
306デフォルトの名無しさん:2011/06/20(月) 21:59:53.95
>>298
だから>>266でPythonの場合を書いてやったろ?
それのどこが複雑だったんだよ
しかも>>269の言うように本来なら辞書の辞書なんて使う必要無いのに、
アホのお前に合わせてやったろ?何か不満か?

もう一度聞くぞ?>>239>>266のどこが複雑なの?
307デフォルトの名無しさん:2011/06/20(月) 22:01:36.69
>しかも>>269の言うように本来なら辞書の辞書なんて使う必要無いのに、
まぁそれは言い過ぎなんじゃない?
ループで中身を走査するときに、一個目のキーが変化するたびにチョメチョメしたいときなんか、辞書の辞書の方が便利。
308デフォルトの名無しさん:2011/06/20(月) 22:01:40.49
>>305
>政治ニュースを追いかけることは知見を広めるために必要だが

ぜんぜん違うだろ。
お前本当にバカじゃねえの?
309デフォルトの名無しさん:2011/06/20(月) 22:04:46.17
>>307
それもそうだね。確かに言い過ぎた
310デフォルトの名無しさん:2011/06/20(月) 22:04:48.76
None
311デフォルトの名無しさん:2011/06/20(月) 22:04:58.71
>>308
PythonとRubyも全然違うだろ。
312デフォルトの名無しさん:2011/06/20(月) 22:05:31.12
>>306

> もう一度聞くぞ?>>239>>266のどこが複雑なの?

だからさあ、「複雑」ってのはお前のオツムが理解できるかどうかが基準じゃないんだって。
「ある程度込み入ったデータを表現する」方法について書いたわけで。文脈から自明だろ。
「複雑」という言葉を聞いたとたんに頭がオーバーヒートしちゃうのかな、このおバカさんは。

ちゃんと実装例だしてやっただろ。十分理解したうえで書いてる。

質問!
あなたは知恵おくれかなんかですか?

313デフォルトの名無しさん:2011/06/20(月) 22:06:51.02
pass
314デフォルトの名無しさん:2011/06/20(月) 22:07:30.36
前スレか、くだすれか、どっかで見た
def nesteddict():
 return defaultdict(nesteddict)

d = nesteddict()
d[0][1][2][3][4] = 5
は、なかなか面白かった。
315デフォルトの名無しさん:2011/06/20(月) 22:07:40.13
悪かったよ。
確かにPythonもそんな複雑じゃない。
早まって暴言を吐いてしまった。すまない。
316デフォルトの名無しさん:2011/06/20(月) 22:09:18.96
None
317デフォルトの名無しさん:2011/06/20(月) 22:09:38.99
>>312
>>266見て複雑だって言ってるのお前だけだよ?
少数派なんだから、何で複雑だと思ったのかくらい
言ってもいいだろうに

それとも、Pythonは複雑だと連呼すれば理由を言わなくても
納得してもらえるとでも?
それとも、ただの独り言を掲示板に書いてたの?
318デフォルトの名無しさん:2011/06/20(月) 22:10:33.36
>>315
確かにこっちも言い過ぎた
ぶっちゃけPerlが一番シンプル
319315:2011/06/20(月) 22:11:45.52
まぁ複雑発言したの俺じゃないけどなw
これで収まったなら、終りにしてくれww
320デフォルトの名無しさん:2011/06/20(月) 22:12:30.00
>>319
うん。終わりにしようwww
321デフォルトの名無しさん:2011/06/20(月) 22:13:15.26
要約すると、複雑かどうかは>>312が「ある程度込み入った」と思うかどうかで決まるので、
知恵遅れでおバカさんの>>306は自己判断せずに>>312にお伺いをたてましょう、と。

ところで、天才の俺は、
car = lambda xs: xs[0]
cdr = lambda xs: xs[1]
cons = lambda x, xs: [x, xs]
nil = []

eval_([int.__add__, [1, [2, [3, [4, []]]]]])
ってデータ構造を思いついたのだが、これは複雑?
322315:2011/06/20(月) 22:14:10.02
>>321
空気読めよ
323デフォルトの名無しさん:2011/06/20(月) 22:14:47.97
pass
324321:2011/06/20(月) 22:16:18.05
流れ早すぎだヴォケ

>>321
書き込む前にリロードしろバカ
325デフォルトの名無しさん:2011/06/20(月) 22:17:14.22
>>317
> 少数派なんだから、何で複雑だと思ったのかくらい

デフォルトのデータ型(リストやハッシュ)を単純と呼んで、それを組み合わせたのを複雑、と呼ぶぐらい
なら納得がいくんじゃない?

上のようなタプルがキーのハッシュのリストに要素を追加する、って複雑と言っても構わんと思うけど。

逆に聞きたいが、あなたのいう複雑ってのはどのレベルのをさすの?

けっきょくあなたは複雑って言葉に反応して、そんなの複雑じゃない、とガキの喧嘩してるだけだよねっと。
326321:2011/06/20(月) 22:22:59.18
>>325
空気読めよ
327デフォルトの名無しさん:2011/06/20(月) 22:24:37.52
>>326
頭つかえよ。
328デフォルトの名無しさん:2011/06/20(月) 22:31:05.64
>>327
使いすぎてもうなくなったわ。
329デフォルトの名無しさん:2011/06/20(月) 22:32:12.32
pass
330デフォルトの名無しさん:2011/06/20(月) 22:32:22.85
最初からなかったんだろ。
331デフォルトの名無しさん:2011/06/20(月) 22:33:13.42
None
332デフォルトの名無しさん:2011/06/20(月) 23:33:09.82
つまんね
333デフォルトの名無しさん:2011/06/20(月) 23:34:07.56
多い日も安心
334デフォルトの名無しさん:2011/06/20(月) 23:42:57.61
で、がキーが2つで、リストが値の辞書のどこが複雑だったんだ?w
335デフォルトの名無しさん:2011/06/21(火) 00:16:19.20
スレタイ的にいえば、みんなはどうだから知らないが、俺は結構勉強になった気がする。
今日の騒動。dictの戻り値とか。
336デフォルトの名無しさん:2011/06/21(火) 00:20:00.58
私もROM専で勉強させてもらってます
337デフォルトの名無しさん:2011/06/21(火) 00:40:35.01
マルチすんなぼけ
338デフォルトの名無しさん:2011/06/21(火) 01:40:26.89
豆知識。キーが全部文字列の辞書を作るときは、dictの名前付き引数記法を使うと
クォートの入力の手間が減って便利。
>>> dict(host='example.com', port=7743)
{'host': 'example.com', 'port': 7743}

ただし、Pythonは関数の引数の数が255個までだから注意。
339デフォルトの名無しさん:2011/06/21(火) 07:07:36.56
>>238 >>240
ありがとう。ようするに、a = b という代入は、それまでbという名前で呼んで
いたモノをaという名前で呼べるようにするということで、mutate()でやった
ことは、mutate()のスコープの中ではselfという名前でBar()のインスタンス
を参照できるよ、というだけなんですね。
340デフォルトの名無しさん:2011/06/21(火) 07:53:10.99
>>339
そういうこと。
Pythonでは代入は名前の付け替えみたいなもので、値そのものの変更(list.appendとか)とは別のもの。
FooをBarに変えたいのなら、Bar.fromFoo(self, foo)とかBar.__init__(self, foo=None)とかそんな感じの作るのがいいと思う。
341デフォルトの名無しさん:2011/06/22(水) 15:44:32.22
>>339
あまりお勧めはしないけど、こんな事もできるよ的な例なら、

  def mutate(self):
    self.__class__ = Bar

インスタンスの置き換えではなく、クラスの置き換え。
Bar.__init__が呼ばれないのが期待通りではないかもしれない点は注意。

>辞書の辞書
一連の話題からは外れるけど、高階関数にしておくと便利

def nth_chained_dict(n, type_):
  return reduce(lambda nested,_: lambda: defaultdict(nested), xrange(n), type_)()

a = nth_chained_dict(2, list)
a[1][2].append('111')

b = nth_chained_dict(3, list)
b[1][2][3].append('222')

>>321
データ構造的にはそれって連結リスト
リストではなく、2値のタプルがよく使われるよ。
342341:2011/06/22(水) 15:51:12.03
> 高階関数にしておくと便利

自己レス、関数返してないので高階関数ではなかったです。
何て言うんだろう、こういうファンクタっぽいの
343デフォルトの名無しさん:2011/06/22(水) 15:57:15.18
で、がキーが2つで、リストが値の辞書のどこが複雑だったんだ?w
344デフォルトの名無しさん:2011/06/22(水) 16:38:38.75
        /''⌒\
       ,,..' -‐==''"フ  /
__     (n´・ω・)η <  Pythonのあほー
    ̄ "  ̄(   ノ.  \ 、_
 " ""    (_)_)"""  "  ,ヽ       ミ〜ロ〜/~~\ ⊂⊃
       "", ,,, ,,  , ,, ,,,"_wノ|     ミ〜ロ〜/    .\
""""     v,,, _,_,,, ,,/l ::::... |  .....,,,,傘傘傘::::::::傘傘傘...............
    ,.-r '"l\,,j  /  |/  L,,/:: i 森
,    ,/|,/\,/ _,|\_,i_,,,/ /::./森
    _V\ ,,/\,|  i,:::Y: :: :i/:: | 森
345デフォルトの名無しさん:2011/06/22(水) 17:35:47.06
なんでPythonにはタプルがあるのに、Rubyはタプルがないん?
必要ないって考えや根拠がきっとあったんだよね。
346デフォルトの名無しさん:2011/06/22(水) 17:47:02.25
いや、Pythonにtupleが存在する理由を考えた方が良いと思う。
歴史的な流れによるんだけど。
347デフォルトの名無しさん:2011/06/22(水) 19:30:27.68
不変と可変をある程度分けることで、辞書のキーが可変になるケースを無くしたかったんだろ。
frozenset なんてものもあるし。
RubyはHashのキーにArrayを突っ込めるんかな?
348デフォルトの名無しさん:2011/06/22(水) 22:03:47.65
>>347
internalになるけど、辞書も不変なタイプの dictproxy (types.DictProxyType) があるしね。

>RubyはHashのキーにArrayを突っ込めるんかな?

そのままキーとして使うのはあまり向いてなさそうだけど、出来るよ。
不変にするんだったら、Object#freeze呼んで不変にしてキーに使う。

標準添付のライブラリ Rinda に Tuple実装があるけど、
ただしHashのキーとして、このTupleを使うのは向いてない。
(可変・不変の問題ではなく、ハッシュ値の計算が対応してないから)
349デフォルトの名無しさん:2011/06/22(水) 23:04:02.81
タプルはリストの不変なものと考えるより(実装はその通りなんだけど)
実際の用途として使い分けを考えるなら namedtupleの様な利用 Cで言う構造体の様な利用を意識した方わかりやすいよ。
350デフォルトの名無しさん:2011/06/22(水) 23:11:30.88
リストには同じ型のものを入れる
タプルには適当に夢詰め込める
351デフォルトの名無しさん:2011/06/23(木) 03:35:43.96
Haskellなんかはそういう使い分けだね
リストは型を統一、タプルはその必要がないっていう
352デフォルトの名無しさん:2011/06/23(木) 07:11:16.81
>>338
キーのクォートは確かに手間で、シンボル表記出来たらなと思うことはあるけど
ライフサイクルの短いスクリプト向けのイデオムかな。

注意事項として補足

・識別子名に使える文字しかキーにできない
 ・記号や空白文字を含むことができない
 ・予約語はキーに出来ない
=> これらの名前のキーを追加したい場合、リテラル表記への変更が手間に。

・ビルトイン関数呼び出しの為、リテラル表記に比べて遅い
=> 繰り返し内での利用等では、オーバーヘッドが増。


dict(**kw) が使える場面は、フィールドがある程度固定でキーが識別子のみに収まる範囲だと思うので、
同条件では、namedtuple を使えばキーの記述自体を省略出来る。そのままタプルとしても使えるし辞書へも変換可。
353デフォルトの名無しさん:2011/06/23(木) 11:46:02.83
>>352
**kwd引数を、キーの字面の意味とは無関係に全てユーザーデータとして解釈する例って、組み込み+標準ライブラリでdict意外に存在する?
354デフォルトの名無しさん:2011/06/23(木) 12:04:30.19
string.Templateとか
355352:2011/06/23(木) 22:02:33.76
>>353
字面の意味と無関係ってのがちょっとわからないので、外してるかもしれないけど
キーワード引数がユーザデータと解釈されるのって例えば functools.partial や distutils.core.setup?

標準外だとO/R mapperでそういうキーがユーザデータと解釈されるの
利便性のために提供してるとかありそうだけど...
(調べてないけど、 table.where(name='foo').update(value='bar') みたいなコードを仮定)

ユーザデータ(辞書)が必要な場合は、キーワードではなく辞書オブジェクトで受け取ってるはずだよ(e.g urllib.urlencode)
でないと、キーの名前に制限を受ける上に >>297の示すように、キーワード固有の引数を追加したい場合問題になる。
356デフォルトの名無しさん:2011/06/24(金) 11:33:38.69
別のイテレータからアイテムをn個ずつペアにして取り出してくれるイテレータみたいなものって標準ライブラリにありますか?

理想としては、
for a in hoge(xrange(100),5):
     print a
とすると、
[0,1,2,3,4]
[5,6,7,8,9]
[10,11,12,13,14]
みたいに出力できるもの。

簡単に作れるんですが、既にあるならば教えてくださいませ。
357デフォルトの名無しさん:2011/06/24(金) 11:47:18.33
ないんじゃないか?
時々話題に上るけど、そういう解はなかったはず。

itertoolsあたりに含まれていても
おかしくはない機能だが。
358デフォルトの名無しさん:2011/06/24(金) 11:50:14.35
itertoolsのレシピ集にあった
def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)
359デフォルトの名無しさん:2011/06/24(金) 12:07:39.49
>>> def count(max):
... for i in xrange(max):
... yield i
...
>>> def npairs(it, num):
... try:
... while True:
... yield [it.next() for _ in xrange(num)]
... except:
... pass
...
>>> for a in npairs(count(20), 5):
... print a
...
[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]
[10, 11, 12, 13, 14]
[15, 16, 17, 18, 19]
>>>
360デフォルトの名無しさん:2011/06/24(金) 13:26:28.11
for a in zip(*([iter(range(100))]*5)):
    print(a)

まぁ、これでいいのか・・・
(3.xなんで、zipもrangeもイテレータ返しってことで)
361デフォルトの名無しさん:2011/06/24(金) 18:01:19.87
汎用ではないけど、I/O なんかだと

# 5文字ずつ読む
>>> iter(lambda: stream.read(5), '')
362デフォルトの名無しさん:2011/06/24(金) 18:15:23.72
nの値が大きい時は、
可能ならスライス取る方が効率良さそう
363 忍法帖【Lv=1,xxxP】 :2011/06/25(土) 15:44:20.83
現在C拡張を書いているんですが、その中で詰まってるので質問させて下さい。

0, /* tp_setattr */
...
PyObject_GenericSetAttr, /* tp_setattro */

fooでは上記のような設定をしているのですが、
Foo_new(), Foo_init(), を呼び出した後のobjectで、
364デフォルトの名無しさん:2011/06/25(土) 15:47:32.43
value = Py_BuildValue("i", xy);
ret = PyObject_SetAttrString(self, "xy", value);

という風にして、xy attribute の設定をしたいのですが、
上記の箇所で以下のようなerrorが発生してしまいます。

AttributeError: '_foo' object has no attribute 'xy'

どんなおまじないが必要なのか分からず困っています。
他にどんな手順が必要なんでしょうか?
365352:2011/06/25(土) 18:45:35.39
>>364
スロットか__dict__どちらかを設定されるようにする

どんなおまじないが必要かはcase by case
@see tp_members, tp_dictoffset

366363:2011/06/26(日) 06:05:43.25
tp_members を使うことで思い通りのことができました。
また今度tp_dictの方を使ってみたいと思います。
>>365さん、ありがとうございました。
367365:2011/06/26(日) 07:12:45.48
>>366
どう致しまして

念の為に説明しておくと tp_dictって名前のフィールドも別にあって、
そっちはインスタンスの辞書ではなく型オブジェクト自身の辞書(クラス変数等の格納場所)なので混同しないように注意です。

詳しくは ドキュメント C/API の 型オブジェクト の tp_dictoffset の項を参考に
368デフォルトの名無しさん:2011/06/27(月) 03:56:08.54
['fugaBc', 'deF', 'Ghijk']
から
'bfg'
を得たいのですが

入力はアルファベットのみからなる文字列(長さは不定、必ず一文字のみ大文字)のリスト
出力は各文字列の大文字部分のみを小文字にして連結
369デフォルトの名無しさん:2011/06/27(月) 04:05:56.59
''.join(map(lambda s: filter(lambda c: c != c.lower(), s).lower(), ['fugaBc', 'deF', 'Ghijk']))
370デフォルトの名無しさん:2011/06/27(月) 04:15:38.97
できました
ありがとうございました
371365:2011/06/27(月) 04:44:16.88
大文字の判別は filter(str.isupper, xs)

あと、連結してからまとめて小文字にした方が若干早くなる
372デフォルトの名無しさん:2011/06/27(月) 05:00:55.72
>>371
ありがとうございました!
''.join(map(lambda s: filter(str.isupper, s), ['fugaBc', 'deF', 'Ghijk'])).lower()
373デフォルトの名無しさん:2011/06/27(月) 12:27:49.35
たまにこうして出る、何に使うか分からない質問を自分も考えてみるけど、答えてる人頭いいなぁと感心するし勉強になります。
374デフォルトの名無しさん:2011/06/27(月) 13:53:45.04
from itertools import chain
a = ['fugaBc', 'deF', 'Ghijk']
b = ''.join(filter(str.isupper, chain(*a)))

a がやたらデカいデータだった時も配慮すれば、itertools.chain を使うのが一番効率がいいかな。

>>373
>何に使うか分からない質問
往々にして問題設定が不適切なこともありますね・・・
375デフォルトの名無しさん:2011/06/27(月) 17:19:32.13
世界制服プログラムの一部に組み込まれるのですよ
376365:2011/06/27(月) 18:13:17.85
効率無視でとにかく短く書きたい場合は、これでも一応条件は通るね(2.x/データの規模が小さい/使い捨てスクリプト向)
>>> filter(str.isupper,''.join(xs)).lower()

2.x では filter で文字列が対象のときは文字列が返るけど
3.x では イテレータが返るので、双方で互換性のあるコードにする場合は、少し冗長になるけどこんな感じかな

>>> ''.join(next(c for c in s if c.isupper()) for s in xs).lower()

>>347
filterはイテレータ版にするメリットあるけど、 # 大文字が見つかった後の文字は評価の必要ない
mapの方は後で連結 ''.join するので、計算量オーダは一緒じゃないかな?
(mapの要素毎の関数呼び出しを減らしてる点においては確かに効率良だけど、全ての文字をisupperで評価する事になるという点で)
377365:2011/06/27(月) 18:20:25.07
アンカミス、>>376 =~ s/>>347/>>374/
378デフォルトの名無しさん:2011/06/27(月) 20:44:53.47
>>376
strオブジェクトを無駄に作らないという意味での効率だと思ったけど。
379365:2011/06/27(月) 21:24:21.02
>>378
どの時点で作られるオブジェクトの事を言ってるの?
380デフォルトの名無しさん:2011/06/27(月) 23:58:30.47
>>379
map(lambda s: filter(str.isupper, s), ['fugaBc', 'deF', 'Ghijk'])
あと、lambdaで定義した関数呼び出すより、組み込み関数呼び出した方が高速ってのも効いてくるね。
381380:2011/06/28(火) 00:09:38.28
ん?
chainで文字列繋いでも文字列にはならんから、strオブジェクトはどうせいっぱいつくられるのか。
382デフォルトの名無しさん:2011/06/28(火) 00:16:44.45
自演乙
383デフォルトの名無しさん:2011/06/28(火) 00:25:29.46
http://ideone.com/5T6v8
chain使っても、たいして速くないな。

''.join(map(lambda s: filter(str.isupper, s), ['fugaBc', 'deF', 'Ghijk'])).lower()
0.0819640159607
''.join(filter(str.isupper, chain(*['fugaBc', 'deF', 'Ghijk'])))
0.117002010345

a = ['fugaBc'*100, 'deF'*100, 'Ghijk'*100]*100
''.join(map(lambda s: filter(str.isupper, s), a)).lower()
0.347837924957
''.join(filter(str.isupper, chain(*a)))
0.320625066757
384デフォルトの名無しさん:2011/06/28(火) 00:36:11.79
>>382
どれのことを言ってるのか知らんが、>>376以降、このスレには登場人物は多くても3人しかいない。
385デフォルトの名無しさん:2011/06/28(火) 00:55:44.56
386379:2011/06/28(火) 02:18:32.65
>>380
ちょっと期待してた答えと違う
その式のうち、mapの時点で作られるオブジェクトなのか filter もしくは ''.join で作られるオブジェクトなのか
どの時点で無駄なstrオブジェクト作ってる?って疑問でした。

> lambdaで定義した関数呼び出すより、組み込み関数呼び出した方が高速ってのも効いてくるね。

>>374のコードは、予めリストをフラットに連結(chain(*a))することでmap自体を省いてるので、
mapでlambdaか組み込み関数かというのとは少し状況・意味合が異なるよ。


>>383
データの内容と規模次第によって変わってくるはずだけど、
とりあえず、下の *100 したコードは、複数の大文字が入ってるので >>368 「必ず一文字のみ大文字」の条件外ですね。

実際にベンチマークは取ってないので、どの程度の効率化が期待できるのかわからないけど。推測では、おおよそ
'xxxxX' (実際はもっと長い文字列) みたいなデータが多くて巨大なリストだとmapを省くメリットが増。
'Xxxxx' なデータが多いとイテレータ版のfilter と next を使うメリットが増。
但し、map内でfilterに掛ける方法は、ワーストケースではmapを省く方法(事前にchain)より遅くなる。
387379:2011/06/28(火) 10:36:41.47
他のコードも測ってみた

http://ideone.com/seWkM

(lower() は省略。ideone上なので大きなデータでのテストは記述してません。)

chainを使ったコードが遅くなる原因は調べてみたところ、filterの引数にイテレータを渡している点。
CPython 2.xの組み込みのfilterでは、第二引数が文字列やタプルの場合、
それぞれ文字列・タプルを返す為に専用のヘルパー関数に渡され、型毎に効率の良い方法で反復処理されてるようです。
388デフォルトの名無しさん:2011/06/28(火) 10:46:46.84
python最強
389デフォルトの名無しさん:2011/06/28(火) 12:09:08.35

任意の関数を、グローバル辞書を指定して実行できませんか?
たとえば
def f(): print x
globals = {"x": "hoge"}
exec(f, globals)

hoge
が出力されるような感じで。
390デフォルトの名無しさん:2011/06/28(火) 12:34:00.90
>>389
f()の内容を弄れるならいくらでもやりようはあるんだが…
391デフォルトの名無しさん:2011/06/28(火) 12:39:13.49
f.func_code
392デフォルトの名無しさん:2011/06/28(火) 14:58:58.56
>>390
じゃあglobalsを一時的に切り替えるまたはすり替えるようなことはできますか。
393デフォルトの名無しさん:2011/06/28(火) 15:14:19.56
なんか、根本的に設計が誤っている気がする。
あるいは根本的に設計が誤っているライブラリを使わざるを得ない状況にあるか。
394デフォルトの名無しさん:2011/06/28(火) 17:24:44.14
根本的に設計が間違っているのでそもそも何がしたいのかを聞きたいけど、、、、

import types
def call_with_globals(func, globals):
    f = types.FunctionType(func.func_code, globals)
    return f()
def f(): print x
call_with_globals(f, {'x': 'hoge'})
395379:2011/06/28(火) 21:53:01.84
exec(f.func_code, {'x':"hoge"})

クロージャやデフォルト引数に対応するなら、
>>394の方法で func_defaults,func_closure等、残りの属性も引渡。
396デフォルトの名無しさん:2011/06/28(火) 22:36:24.16
なんでいちいち名前欄に変なの付けてんだよ
自己主張したいならコテでもつけてろ
397デフォルトの名無しさん:2011/06/29(水) 00:26:36.27
IDの最初がa~z、A~Z揃ったらゴキブリ青椒肉絲食う
http://hibari.2ch.net/test/read.cgi/news4vip/1309272121/
>>1 を追い込むために作ったんですが、何か改良点等ってあったりしますか?
import re
count = 0
ids = set()
d = {}
for l in open('/tmp/vip.txt'):
if not 'ID:' in l:
continue
sp = l.split()
for s in sp:
if 'ID:' in s:
break
sp0 = sp[0]
s3 = s[3]
# print('s3 =', s3)
if s3.isalpha():
# print(sp0, s3)
ids |= set(s3)
d[s3] = sp0
count += 1

for k0, k1 in zip('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'):
print('>>{} {}, >>{} {}'.format(d[k0], k0, d[k1], k1))
398デフォルトの名無しさん:2011/06/29(水) 11:07:42.27
ちょっと質問です。
あるPythonスクリプトを書いて、シェルで24時間稼働させようかと思っているのですが
(while True:みたいなループを書いて、内部でos.sleepという感じです)
Pythonでこのようなスクリプトを書いても大丈夫でしょうか?
399デフォルトの名無しさん:2011/06/29(水) 11:56:55.24
>>397
正規表現を使え
無意味に一時変数を使うな
set.addを使え
仕様をdoctestで書け
400デフォルトの名無しさん:2011/06/29(水) 12:01:44.57
>>398
んー?ちょっと分からない
書くだけなら、まず大丈夫という答えをするんだけど、
そういう答えを欲しいんじゃないよね?

メモリリークなんかはないと思うぞよ
401デフォルトの名無しさん:2011/06/29(水) 12:09:39.74
>>398
それ自体は構わないけど
cronも使えないような共有のレン鯖に置くと大抵怒られるよ
402デフォルトの名無しさん:2011/06/29(水) 12:22:05.31
>>400
ええ、http通信のライブラリとかを使うので、メモリ・リソースリークなどを怖がっていました。

>>401
1回の実行が1分〜60分くらいのスパンで、定期実行が難しいんです。
自分自身が終了する際に数分後に自分自身を呼び出すようにしたいんですが、
いい方法ありますか?
403デフォルトの名無しさん:2011/06/29(水) 12:29:06.64
>>402
今後は、具体的な情報を自分から進んで書こうな。
坊や

自分自身が終了ってのは、プロセスの終了のことを指すんだよな?

スクリプトを2つ組にして、主スクリプトが眠る前に副スクリプトを起こして、
数分後に副スクリプトが主スクリプトを起こすとかかな?

プロセスの連続実行時間により、サーバとして利用している。
って判断する鯖もあるから2つ組のスクリプト構成を勧めておく。
404403:2011/06/29(水) 12:31:37.17
サーバとして利用しているとかわけわかんね
プロセスの連続実行時間をチェックして、
規定時間以上起動しているプロセスは強制的に殺してくる鯖もあるから、
注意ねってことを言いたかったんじゃ
405397:2011/06/29(水) 12:53:09.82
>>399
こんなもんでっしゃろか?
import re
''' >>1 を追い込む。
ID の先頭にアルファベットが含まれていた場合、
ids set変数にそのアルファベットを保存していく。
解析終了後に>>1 を追い込める場合、
>>数字 アルファベットの大文字, >>数字 アルファベットの小文字
という形式で >> 1 を追い込めることを証明する。
>>1 を追い込めない場合、
アルファベット が出ていません。
と、足りないアルファベットを表示する。
'''
406397:2011/06/29(水) 12:54:28.58
ids = set()
d = {}
for l in open('/tmp/vip.txt'):
if not re.search('ID:', l):
continue
sp = l.split()
for s in sp:
if re.search('ID:', s):
break
if s[3].isalpha():
ids.add(s[3])
d[s[3]] = sp[0]
if len(ids) == 52:
break
alphabet_big = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
alphabet_small = 'abcdefghijklmnopqrstuvwxyz'

if len(ids) == 52:
print('>>1 を追い込めます。')
print()
for k0, k1 in zip(alphabet_big, alphabet_small):
print('>>{:3d} {}, >>{:3d} {}'.format(int(d[k0]), k0, int(d[k1]), k1))
else:
print('>>1 を追い込めません。')
for alpha in (set(alphabet_big) | set(alphabet_small)) - ids:
print('{} が出ていません。'.format(alpha))
407デフォルトの名無しさん:2011/06/29(水) 15:58:13.70
>>405
まず以下の関数をつくる。
入力:一行分の文字列
出力:レス番、IDのタプル
ただし、ID行でないか先頭がアルファベットでない場合はNone
正規表現を使えばシンプルに書ける。

上の関数を使ってID一文字目をキーにした辞書を返す関数を作る。
入力:複数行の文字列
出力:辞書
set()は辞書で兼用出来るので不要

アルファベットをキーにした辞書を整形して表示する関数を作る。
入力:辞書
出力:整形後文字列
アルファベットを表す定数としてstringモジュールにascii_uppercaseとかある。

後は上の関数を組み合わせる。
doctestは関数毎に書く。
408デフォルトの名無しさん:2011/06/29(水) 18:09:58.48
python wafってなんですか虐めですか
409デフォルトの名無しさん:2011/06/30(木) 06:11:15.02
python最強
410379:2011/06/30(木) 06:52:39.84
>>402
> 自分自身が終了する際に数分後に自分自身を呼び出すようにしたいんですが、

そのまま再帰で関数を呼び出すと、関数呼び出しのスタックが深くなっていき、
sys.getrecursionlimit()回で制限で止まってしまうので、

イベント・キューで処理するようにする。標準ライブラリだと sched
411デフォルトの名無しさん:2011/07/01(金) 17:09:03.60
Rubyの文字コード関係がよくわからないのですが
Pythonだと文字コード関係は簡単ですか?
412デフォルトの名無しさん:2011/07/01(金) 17:29:27.08
「sys.setdefaultencoding('utf-8') で一発OK」
とか書くとフルボッコにされるから気をつけろよ
413デフォルトの名無しさん:2011/07/01(金) 19:03:48.15
>>411
少なくとも、LinuxでPython3.x使っている分には超簡単。
414デフォルトの名無しさん:2011/07/01(金) 19:12:16.75
>>412
ぼくもPython3.2です
何故ですか?
415天使 ◆uL5esZLBSE :2011/07/01(金) 20:24:41.28
Rubyバカにしてる子ってさ
変数に$ついてる言語触ってるって事だよね

いちいちSHIFT+4キーおして $ 打ちまくってる感触はどう?
416デフォルトの名無しさん:2011/07/01(金) 20:31:18.18
誤爆?
417デフォルトの名無しさん:2011/07/01(金) 20:36:21.48
マルチだから無視しろ
418デフォルトの名無しさん:2011/07/02(土) 02:21:46.99
PHPとPerlディスってんの?
419デフォルトの名無しさん:2011/07/02(土) 11:35:34.50
PythonでWebアプリでも作成してみるかとFlaskのお勉強をしてます。
簡単に使用できる良いフレームワークですね。

で、公式チュートリアルに沿って「Flaskr」っていうミニブログを作成してみたのですが
うまく動作してくれません。

なにやら「teardown_request」ってやつを認識してくれないようです(T_T)
AttributeError: 'Flask' object has no attribute 'teardown_request'


参考にしているサイトはここ(flask公式)
http://flask.pocoo.org/docs/tutorial/dbcon/#tutorial-dbcon
420デフォルトの名無しさん:2011/07/02(土) 11:38:12.53
421デフォルトの名無しさん:2011/07/02(土) 11:50:29.98
>>420
サンクスです。
動作するようになりました。\(^o^)/

Flaskのバージョン0.6.1なのが原因だったようです。
422デフォルトの名無しさん:2011/07/02(土) 13:54:12.97
PythonでDjangoのAdminサイト機能みたいなデータベースメンテナンスWeb画面を
手っ取り早く作成できるフレームワークやモジュールはないでしょうか?
423デフォルトの名無しさん:2011/07/03(日) 03:48:50.14
GAE
424デフォルトの名無しさん:2011/07/03(日) 04:49:17.36
list型ってなんだよ・・・

前後へのポインタついてて、ポインタたどるのがリストじゃねえのか?
インデックスで直接アクセスできるとか、それ配列じゃん・・・
425デフォルトの名無しさん:2011/07/03(日) 05:01:52.57
perlにもリストはあるね
>>424 が言ってるのは linked list だろ
426デフォルトの名無しさん:2011/07/03(日) 08:17:01.25
>>424
仮に内部がリンクリストの実装だったとしても、インデックスで直接アクセスするメソッドが付くかと
427デフォルトの名無しさん:2011/07/05(火) 16:22:13.66
単なるマップやリスト、連想配列使っているだけならすごく楽なんだけど、こういうちょっと凝った
データ構造使うと一気に見通しが悪くなってパズル状態になるよなPythonは。
あのレベルの質問に間違った回答がいっぱいつくのはC++やJavaではありえない。

テンプレートやコレクションクラスは、それだけを使うとPythonよりも面倒だが、組み合わせても
急に難しくなったりはしない。
428デフォルトの名無しさん:2011/07/05(火) 16:28:56.07
>>246 == >>427
燃料投下されましたが、どうしましょう?>ALL
429デフォルトの名無しさん:2011/07/05(火) 17:03:53.03
import this
430デフォルトの名無しさん:2011/07/05(火) 17:08:44.92
>>428
あきらかに頭の悪そうな奴は無視
時間の無駄だから
431デフォルトの名無しさん:2011/07/05(火) 17:09:54.54
Python超初心者スレは何処へ?
432 忍法帖【Lv=8,xxxP】 :2011/07/05(火) 17:32:48.98
立てたいけど
433デフォルトの名無しさん:2011/07/05(火) 17:58:31.82
Pythonは2011年イケメン言語になるって聞いたんで最近Python使ってるんですが、まだ鍛錬が足りないせいか、イケメンになれた実感がありません。
皆さんはイケメンになれましたか?
434デフォルトの名無しさん:2011/07/05(火) 18:00:02.81
既に婦女子が恥ずかしがって目を合わせれないほどイケメン
435デフォルトの名無しさん:2011/07/05(火) 18:00:15.80
イクメンにはなれたが
436デフォルトの名無しさん:2011/07/05(火) 18:20:40.90
元からイケメンなので特に効果はありませんでした。
437デフォルトの名無しさん:2011/07/05(火) 18:23:06.43
イケウィメンだったのですが、Python始めたらイケメンになりました。
へんなのが生えてきてきもいです。
438デフォルトの名無しさん:2011/07/05(火) 19:38:18.39
ど忘れして困っているのですが、
===
これは普通のテキスト
>>> print("Hello")
これも普通のテキスト
===
みたいなファイルを作って、実行する方法ってありませんでしたっけ?
439デフォルトの名無しさん:2011/07/05(火) 19:52:49.73
行の先頭に
>>>
があったらPythonの構文だと解釈して実行してくれるってこと?
440デフォルトの名無しさん:2011/07/05(火) 19:57:19.11
>>439
Yes
441デフォルトの名無しさん:2011/07/05(火) 20:31:01.91
sed -ne 's/^>>> //p'  filename | python
でおーけー。
442デフォルトの名無しさん:2011/07/05(火) 20:35:51.38
>>441
Nooo
by built in commandline option
443デフォルトの名無しさん:2011/07/05(火) 20:58:22.91
python -m docstring
だけど、 >>> の行の次の行から空行が出るまでの間はアウトプットだと判断されるんで、
>>438 はそのままは実行できないな。
444デフォルトの名無しさん:2011/07/05(火) 21:16:18.63
>>443
I thought it might be another language, but that's it.
Thank you so much!
445439:2011/07/05(火) 21:41:04.32
なんか英語で書かれてむかついたので
教えないことにしました。
446デフォルトの名無しさん:2011/07/06(水) 00:54:14.01
自演乙
447デフォルトの名無しさん:2011/07/06(水) 01:17:33.53
448デフォルトの名無しさん:2011/07/06(水) 01:28:17.31
>>444
Haskell...
Haskell?
Haskell!!
449デフォルトの名無しさん:2011/07/07(木) 01:44:46.14
windowsでpython2.7を使用していますが
pythonスクリプトからシステム環境変数を恒久的に変更する
(再起動しても維持される)方法はどうすれば良いでしょうか?
450デフォルトの名無しさん:2011/07/07(木) 02:02:28.99
>>449
Python実行環境だけ設定できればいいならsite.pyなどに書いとく。
OS自体に環境変数を変えたければWin32COM経由で操作する。とか?
451デフォルトの名無しさん:2011/07/07(木) 02:49:09.94
>>449
import _winreg
key_hklm = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
key_sysenv = _winreg.OpenKey(key_hklm, ur'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 0, _winreg.KEY_WRITE)
_winreg.SetValueEx(key_sysenv, ur'てすと', 0, _winreg.REG_SZ, ur'漢字表示'.encode('cp932'))
_winreg.CloseKey(key_sysenv)
_winreg.CloseKey(key_hklm)
452 忍法帖【Lv=9,xxxP】 :2011/07/07(木) 03:26:37.43
test
453449:2011/07/07(木) 04:25:12.52
できました!
ありがとうございます!!
>>451 はエラーになりましたが
治したら動きました!!!
454 忍法帖【Lv=3,xxxP】 :2011/07/07(木) 04:36:59.51
test
455 忍法帖【Lv=3,xxxP】 !tanabata:2011/07/07(木) 04:38:49.94
test
456デフォルトの名無しさん:2011/07/08(金) 03:53:17.77
_winreg って結構昔から標準であったんか
457デフォルトの名無しさん:2011/07/08(金) 11:10:33.37
458デフォルトの名無しさん:2011/07/09(土) 13:03:23.06
def __init__(self, x, y):
self.x = x
self.y = y

とした後に、self.x, self.yの値を書き換え禁止にしたいのですが、
どうしたら良いんでしょうか?

property(fget=None, fset=None, fdel=None, doc=None)
@point.setattr
def x(self, value): self._x = value

を使えばできそうなのかな?とは思いますが、
読み取り属性を設定する方法があれば教えて下さい。

readonly(obj, attrname)

みたいなのを探しましたが見つかりませんでした。
459デフォルトの名無しさん:2011/07/09(土) 13:48:51.28
getterのみにする
x = property(lambda self: self._x)
460デフォルトの名無しさん:2011/07/09(土) 20:20:40.16
perlのYAPE::regexみたいに正規表現を分解、解析できるモジュールはありますか?
461デフォルトの名無しさん:2011/07/11(月) 12:08:51.60
Python2.6で出来て、Python2.7で出来ないことって何かありますか?
462デフォルトの名無しさん:2011/07/11(月) 15:34:25.57
Python 3.2.1 リリース記念age
463デフォルトの名無しさん:2011/07/11(月) 17:25:34.89
Pythonのリストで2つの要素を削除したいときはどうしたら良いですか?
要素数で指定すると2つ目の要素がズレちゃうので
464デフォルトの名無しさん:2011/07/11(月) 17:42:46.19
>>463
インデックス指定で消したいってこと?
消したいインデックスを別のリストに入れて、 .sort(reverse=True) してから、
for i in index_for_delete:
    del L[i]
かな。
465デフォルトの名無しさん:2011/07/11(月) 18:26:34.23
>>464
おーそういうことでした。
解決しましたどうもありがとう。
466デフォルトの名無しさん:2011/07/12(火) 01:36:55.18
Cythonとmultiprocessingって両方使えないんですか?
Cythonで作ったクラスを、multiprocessingで並列処理させたいです
467デフォルトの名無しさん:2011/07/12(火) 08:34:32.87
Pythonの勉強をしてみたいのですが
ttp://www.amazon.co.jp/dp/4798026557/
これはどうですか?
468 ◆AY.9L.NDUI :2011/07/12(火) 10:14:51.60
>>467
僕もあんま読み入ったわけでもないけど、どんなモジュールが在るか知っておくのは大きいし、目を通しておく価値はあると思う。
ウェブリファレンス歩き回るよりはずっと効率がよさそう。
469デフォルトの名無しさん:2011/07/12(火) 15:27:58.40
>>467
http://www.python.jp/doc/release/tutorial/index.html
http://diveintopython3-ja.rdy.jp/
ハッキリ言って入門は↑これで十分。
余った金で東北の地酒でも買ってやってくれ。
470デフォルトの名無しさん:2011/07/12(火) 17:22:36.42
>>469
完全に同意できる
余った金でエアコンガンガンつけろ
471デフォルトの名無しさん:2011/07/12(火) 23:37:36.03
>>469-470
サンクス。
余った金で家を買いました。
472デフォルトの名無しさん:2011/07/13(水) 09:35:51.76
何冊買うつもりだったんだよ・・・
473デフォルトの名無しさん:2011/07/13(水) 10:16:05.56
>>471
素直に笑ったw
474デフォルトの名無しさん:2011/07/13(水) 11:17:55.21
Cythonでインスタンスを複製する方法ってないですか?
copy.copyやcopy.deepcopyだと、self.aやself.Aの値がコピーされず、空になるのですが
通常のPythonのままならうまくいきます

#abc.pyx
cdef class abc:
 cdef:
  public int a
  public list A

 def __init__(self,a):
  self.a = a
  self.A = [a]

 def Add(self,b):
  self.A.append(b)

from abc import *
i=abc(1)
i.A # [1]
j = copy.deepcopy(i)
j.A #
i.Add(2)
i.A # [1,2]
j.A #
j.Add(3)#AttributeError 'NoneType' object has on attribute 'append'
475デフォルトの名無しさん:2011/07/13(水) 12:40:27.77
oh! 変数の名前がわかりにくい
i, j なんて使って質問するなよ。
foo, baa に変えて質問し直し
476デフォルトの名無しさん:2011/07/13(水) 12:49:56.19
Cython
これなんて読むの?
477デフォルトの名無しさん:2011/07/13(水) 12:53:33.72
さいそん
478デフォルトの名無しさん:2011/07/13(水) 12:57:21.94
Cythonでインスタンスを複製する方法ってないですか?
copy.copyやcopy.deepcopyだと、self.fooやself.barの値がコピーされず、空になるのですが
通常のPythonのままならうまくいきます

#hoge.pyx
cdef class hoge:
 cdef:
  public int foo
  public list bar

 def __init__(self,qux):
  self.foo = qux
  self.bar = [qux]

 def Add(self,quux):
  self.bar.append(quux)

from hoge import *
corge=hoge(1)
corge.bar # [1]
grault = copy.deepcopy(corge)
grault.bar #
corge.Add(2)
corge.bar # [1,2]
grault.bar #
grault.Add(3)#AttributeError 'NoneType' object has on attribute 'append'
479デフォルトの名無しさん:2011/07/13(水) 13:05:21.94
仕方ないので今は、
def copy(self,):
 tmp = hoge(0)
 tmp.foo = self.for
 tmp.bar = copy.deepcopy(self.bar)
 return tmp
を追加してこれを利用しています
今のところ問題は出ていないのですが、何か気持ち悪いので出来れば正しい方法を利用したいです

Python 3.1.3
Cython-0.14.1
です
480デフォルトの名無しさん:2011/07/13(水) 13:48:49.62
学生さんは昼間暇かもしれないけど
仕事のあるおじちゃんは夜にならないと帰れないの
夜の10時頃にはレス来てると思うよ。
気長に待って
481デフォルトの名無しさん:2011/07/13(水) 14:12:19.43
__copy__, __deepcopy__ の実装?
482デフォルトの名無しさん:2011/07/13(水) 15:40:24.52
2回目のループでどうやらstderrに余計なことをしていて、中断してしまうのですが、
Python2.7で、似たようなシンタックスで標準エラーに吐くにはどうすればいいですか?
===
import sys

for i in range(10):
sys.stderr.write(str(i))

for i in range(10):
with sys.stderr as log:
log.write(str(i))
483デフォルトの名無しさん:2011/07/13(水) 15:44:40.93
sys.stderrはオープン済みのストリームだから
単にsys.stderr.write(s)すればOK
484デフォルトの名無しさん:2011/07/13(水) 15:50:35.17
Python3.2対応を気にしていて、
print("fuga",file=sys.stderr)
が2.7で使えないのをどうしたものか・・・
と思っているところなのです。
あと、改行入れてくれないとか、引数一つしか受け付けないとかも不満で。
あきらめるしかないですかねぇ。
485デフォルトの名無しさん:2011/07/13(水) 16:07:18.02
from __future__ import print_function
486デフォルトの名無しさん:2011/07/13(水) 16:16:52.75
>>485
おぉっ!
これで仲良く暮らせます。助かりました。
487デフォルトの名無しさん:2011/07/15(金) 17:03:33.81
http://python.rdy.jp/wiki.cgi?page=%CC%E4%C2%EA%BD%B8#p25
をやってみたいんですが
windowsでcryptを使うにはfcryptっていうのを導入しなきゃいけないって言うところまでは
分かったんですけど
その後そういうpython標準に付いてないのを追加するには
コマンドみたいなもので検索して自動でインストール(?)させるようなのが
あった気がするんですが
どういうコマンドを書けばよかったんでしたっけ???
基本的な質問ですいません

超久しぶりにpython構ったのでどわすれしてしまい
プログラムをいじる前の段階で躓いてしまいました
すみませんお助け下さい
488デフォルトの名無しさん:2011/07/15(金) 17:16:11.44
すいませんでした
easy_install
でしたごめんなさいOTL
489デフォルトの名無しさん:2011/07/15(金) 19:51:01.40
djangoのサンプルコードに
p = Poll(question="What's up?", pub_date=datetime.datetime.now())
って部分があります。

ですが、通常pythonでクラスからインスタンスを作る際、
引数を持たせようとするとエラーが出てしまいます。

上のサンプルはdjango特有の書きかたなのでしょうか?
490デフォルトの名無しさん:2011/07/15(金) 19:55:19.72
ちゃんと __init__ は定義したか?
491デフォルトの名無しさん:2011/07/15(金) 20:39:43.25
>>490
そっか、解決できました!有難うございます
492デフォルトの名無しさん:2011/07/15(金) 23:30:06.61
blogとかのネット上のデータを直接取ってきて処理したいんですけど
そういった技術について書かれたpythonの本ってありますか?
493デフォルトの名無しさん:2011/07/15(金) 23:37:41.18
その手の処理ってもう散々公開されてるじゃん
494デフォルトの名無しさん:2011/07/15(金) 23:58:23.32
公開されているっていうなら
言いやつ紹介してやれよ
495デフォルトの名無しさん:2011/07/16(土) 01:39:27.80
sphinxで画像表示はrstファイルに「.. image:: hoge.jpg」と記載すると
「_images」フォルダにファイルがコピーされて問題なく動作するのですが、
ファイル(pdfファイル等)へのリンクを作成してもうまく動作してくれないですね。

<チャレンジしてみた内容>
#1
`ファイル <hoge.pdf>`_ へのリンク
#2
:download: `ほげPDF <hoge.pdf>`_

⇒どちらもリンク表示はOK ファイルはコピーされない。
「_download」フォルダも作成されない。

#1の書き方でリンク先の記載をして、ファイルは手動で
_buildフォルダにコピーしてるのですが良い方法ないですか?
496デフォルトの名無しさん:2011/07/16(土) 08:13:31.39
>>492
urllib2.urlopen(url)
497デフォルトの名無しさん:2011/07/16(土) 15:04:44.65
>>495
スペースと_が余計みたい。
:download:`ほげPDF <hoge.pdf>`
498デフォルトの名無しさん:2011/07/16(土) 20:01:13.76
難解な質問に事も無げにさっと答えてくれるプログラマってひざがカクカクするほどかっこいいよね。
499デフォルトの名無しさん:2011/07/16(土) 20:16:32.76
運動不足過ぎ。毎日ジョギングすること。
500デフォルトの名無しさん:2011/07/16(土) 21:36:57.43
さっき寝た姿勢から起き上がるときの腕の角度について解説されてて参考になった
501デフォルトの名無しさん:2011/07/16(土) 22:22:21.57
>>497
うまくできました。ありがとうございます。
「:download:」は、後ろに半角スペースが入ると動作しないのですね。

もう1点悩んでいるのがTODOリストの利用です。
「conf.py」に以下を追加しても「AttributeError: type object 'Babel' has no attribute '_ISO639_TO_BABEL'」っていうエラーがでて動作してくれません。

extensions = ['sphinx.ext.todo' ]

[extensions]
todo_include_todos = True

ここまでできればsphinxは、メモツールとしてかなり最強に近いのですが・・・
502デフォルトの名無しさん:2011/07/17(日) 17:42:40.09
下のようなことをやって、自分で定義したattrname, funcnameを
取得できることはできたのですが、私のやったことをするために、
専用のmethodが用意されていないでしょうか?

import re

class Foo:
def __init__(self):
self.n = 100

def func(self):
return 200

foo = Foo()

attrnames = []
funcnames = []

print('class', 'call')

for name in dir(foo):
_get = getattr(foo, name)
has__class__ = hasattr(_get, '__class__')
has__call__ = hasattr(_get, '__call__')
print(has__class__, has__call__, 'name =', name)
if not has__call__ and not re.search('^__\w*__$', name):
attrnames.append(name)
if has__call__ and not re.search('^__\w*__$', name):
funcnames.append(name)

print('attrnames =', attrnames)
print('funcnames =', funcnames)
503デフォルトの名無しさん:2011/07/17(日) 22:01:20.47
has__call__は、callable()使えばいいんじゃね?

has__class__は、それをやって何がしたいのかわからん。
hasattr(open("/dev/zero").name, '__class__')はTrueだと思うけど、
それって自分が定義したものじゃないよね
504デフォルトの名無しさん:2011/07/17(日) 23:02:19.64
has__class__ は特に必要のないものです。
>>502 を作る時の試行錯誤の痕です。
>>504のこれが最終版です。ありがとうございました。

import re

def get_names(obj):
attrnames = []
funcnames = []
for name in dir(obj):
_callable = callable(getattr(obj, name))
if not re.search('^__\w+__$', name):
if _callable:
funcnames.append(name)
else:
attrnames.append(name)
return funcnames, attrnames

class foo:
def __init__(self):
self.n = 100

def func(self):
return 200

foo = foo()
funcnames, attrnames = get_names(foo)

print('attrnames =', attrnames, 'funcnames =', funcnames)
505デフォルトの名無しさん:2011/07/17(日) 23:05:52.33
・゚・(つД`)・゚・ ウェ―ン

_callable = callable(getattr(obj, name))
は意味のない行だよー。・゚・(つД`)・゚・

(つд∩) ウエーン (つд∩) ウエーン (つд・ ) チラ (つд∩) ウエーン

if _callable:

if callable(getattr(obj, name)):
と入れ替えで。
506デフォルトの名無しさん:2011/07/18(月) 00:34:49.22
          __、--..、、
       _<⌒ヽミヽ ヾ !'⌒≧_
        ,Z´r;=-‐- 、ヾ 〃′≦
      7,"/   __‐ 、`ー-'⌒ヾ.7
       ! l ー‐- 、ヽ._`ー'´, u !     r'⌒
       .l !!L、u __\  ̄ 〆"T   (  制
      l.r‐、ヽ 、‐。‐-、V/∠==、|    ) 裁
     ,' |.l´! | u`ミ≡7@ )゚=彡 !   (  っ
     /,' l.l_|⊥%ニニソ(@ *; )ー-*|    ) :
    ,/〃',ゝ|/>rーrーrゞr<二二フ  ∠、 !
  ∠ -:/ ト ヒ'土土土十┼┼ヲ;!     `ー-‐'´
 ̄:::l:::::::|、  !lヽ~U ~  __ ̄ ̄.ノl
::::::::l:::::::| \. ヽ.ll ヽ、 ___'/l/`iー-  今
::::::::l::::::::ト、. \ \. ll  ll  ll ll /:::::l:::::::  「最終版です。」と
:::::::::l::::::::| \ \ `ヽ、 ll ll/!:::::::!::::::  言ったおまえ………
::::::::::l::::::::|   \ \  /`ヽ'  |:::::::l::::::::  制裁……!
:::::::::::l::::::::|     \. `/  /   |:::::::l::::::::
507デフォルトの名無しさん:2011/07/19(火) 22:35:25.24
PyObject* PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)

のバッキャろーーーーーーーーーーーーーーーーーーーー
新しいobject生成して返してんじゃねー
何が o1 += o2だこの野郎。時間返せ。
508デフォルトの名無しさん:2011/07/20(水) 15:16:49.25
>>507
o1がmutableなら、o1を変更して返す。
o1がimmutableなら、o1+o2を返す。
Pythonの o1 += o2 と同じだよ。
509デフォルトの名無しさん:2011/07/20(水) 15:49:49.79
Pythonで

>>> o1 = 1
>>> o2 = 2
>>> id(o1)
136222656
>>> o1 += o2
>>> o1
3
>>> id(o1)
136222688

とやってもid()値は変わらないと思ってたけどそうじゃないのね。
listでは変わらないくせに。くっそー

>>> L1 = []
>>> id(L1)
3071704652
>>> L1 += [0]
>>> id(L1)
3071704652
>>> L1
[0]
510 ◆AY.9L.NDUI :2011/07/20(水) 17:46:53.44
なるほどなぁ。やっぱ変数はそういう実装の方が速度は出るのかな。

僕も試したけどリストはちょっと意外な結果が出た。
appendの際、等価なものは同じアドレスを割り当ててる?みたい。

>>> L1=[0,1,1]
>>> id(L1[0])
19640820
>>> id(L1[1])
19640808
>>> id(L1[2])
19640808

>>> L1+=[1]
>>> id(L1[3])
19640808
511デフォルトの名無しさん:2011/07/20(水) 18:16:02.46
それは小さい数は使い回されるようになってるんだよ

/* References to small integers are saved in this array so that they
can be shared.
The integers that are saved are those in the range
-NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
*/
static PyIntObject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
512デフォルトの名無しさん:2011/07/20(水) 18:47:19.39
>>510
immutable なオブジェクト (int, str など) については、同値のときに
勝手にインスタンスが使いまわされて同一になるケースがあるから、
何かの結果が同じオブジェクトであるかどうかは規定されていない。
CPythonがそうなっていてもPyPyやJythonやIronPythonではそうならないかもしれない。

mutableなオブジェクト(リストなど)については、同値でもインスタンス
使い回したらあとから変更したときに副作用があるから、自動的な使い回しは
されない。
513デフォルトの名無しさん:2011/07/20(水) 18:49:19.09
あと、 id() で同一性を判別できるのは、同時に存在しているオブジェクトだけ。
>>> id([])
140046211984128
>>> id([])
140046211984128
最初の id([]) が実行されたあとその空のリストが解放され、新しい空のリストが
生成されているけど、id()の結果は一緒
514デフォルトの名無しさん:2011/07/20(水) 20:34:33.98
ここは勉強になるインターネッツでつね
515デフォルトの名無しさん:2011/07/21(木) 10:41:10.39
pygameを使ったゲームプログラミングの本が出たね
516デフォルトの名無しさん:2011/07/21(木) 10:55:51.39
>>511
ほんとだ。
(2.xでいうところの)long型じゃなく、int型で収まる範囲でも、
-NSMALLNEGINTS (inclusive) to NSMALLPOSINTS
の範囲の外にあるものはID違うんだな。

a.append(9999998)
id(a[-1])
# ==> 150265860

id(9999998)
# ==> 150265524

で、immutableだから変更したら別IDになる。
a[-1] = 9999999
id(a[-1])
# ==> 150653868

これって(CPythonでは)内部的にはメモリ確保しなおしてるってことでいいの?
今まで、intは内部では同じアドレス使って変更してるんだと思ってた……
517デフォルトの名無しさん:2011/07/21(木) 23:02:57.50
基本的な事が分からない、というかググれないのですが、

class A():

class A(object):
の違いは何?
518デフォルトの名無しさん:2011/07/21(木) 23:17:31.86
下では基底クラスを継承することを明示している。
上では明示していない。

class A:
も同じ意味
519デフォルトの名無しさん:2011/07/21(木) 23:42:18.05
>>517
new-style classか、新スタイルクラスでググるとよろし。
520デフォルトの名無しさん:2011/07/22(金) 00:13:21.40
>>518
イミフw
521デフォルトの名無しさん:2011/07/22(金) 00:26:20.38
Python2.xなら(x>=2)
>>> class A:
... pass
>>> type(A)
<type 'classobj'>
>>> class B():
... pass
>>> type(B)
<type 'classobj'>
>>> class C(object):
... pass
>>> type(C)
<type 'type'>
でA、Bがクラシッククラス、Cは新スタイルクラス
Python3.xなら
>>> class A:
... pass
>>> type(A)
<class 'type'>
でAが新スタイルクラス

ただし、初心者ならば当面はクラシッククラスと
新スタイルクラスの違いを気にする必要がない。
522デフォルトの名無しさん:2011/07/22(金) 01:30:20.16
ていうか、何が違うの?
523デフォルトの名無しさん:2011/07/22(金) 01:32:53.24
属性が違うんじゃね?
524デフォルトの名無しさん:2011/07/22(金) 02:02:16.98
import urllib2
url = 'http://translate.google.com/#en|ja|This%%20is%%20a%%20pen.'
print urllib2.urlopen(url).read()
を実行しても
urllib2.HTTPError: HTTP Error 403: Forbidden
になってしまいます
どうしたら正常に動作しますか?
525デフォルトの名無しさん:2011/07/22(金) 03:07:30.80
自己解決です
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-Agent', 'love love python')]
req = urllib2.Request('http://translate.google.com/translate_a/t',
urllib.urlencode({'text': u'I love python.'.encode('utf-8'), 'client': 't', 'hl': 'ja', 'sl': 'en', 'tl': 'ja'}),
{'Referer': ''})
st = opener.open(req).read().decode('cp932')
print st
とりあえずこれで期待する結果は得られたのですが
取得されたレスポンスが cp932 になってるようで
これを utf-8 固定にしたいのですけど
どうすればよろしいでしょうか?
526デフォルトの名無しさん:2011/07/22(金) 05:30:28.14
>>522
違いは継承関係から属性を探すときの優先順位だったような
それ以外は基本的に新スタイルクラスのが直感的なことが多く、かつ多機能なので
旧スタイルを使う理由はもはや互換性くらいだと思う
新規に書く基本的なクラスなら(object)を書く癖を付けたほうが良さげ
527デフォルトの名無しさん:2011/07/22(金) 06:21:20.03
>>525
?oe=utf-8
528517:2011/07/22(金) 07:22:29.63
>>518-
レスありがとうございます。記法の違いであれば新スタイルで行こうと思います。

>>522
class B(A):
    def method(self):
        super(B, self).methd()
といった基底クラスのメソッド呼び出しが、
python-2.6でclass Aを旧スタイル定義したところ出来ず、質問となりました。
529デフォルトの名無しさん:2011/07/22(金) 14:08:56.16
>>527
thx !!!
530デフォルトの名無しさん:2011/07/22(金) 15:31:12.64
>>522
はじパイのコード
>>> class A: attr = 1
>>> class B(A): pass
>>> class C(A): attr = 2
>>> class D(B,C): pass
>>> x = D()
>>> x.attr
1
>>> class A(object): attr = 1
>>> class B(A): pass
>>> class C(A): attr = 2
>>> class D(B,C): pass
>>> x = D()
>>> x.attr
2
継承関係はともに、以下の図のようになる。
A
|
-----
| |
B C
| |
-----
|
D
クラシッククラスでは、
下から上への遷移が、左から右への遷移よりも優先する。
よって、D=>B=>A=>Cの順に値が検索される。
他方、新スタイルクラスでは、
左から右への遷移が、下から上への遷移よりも優先する。
よって、D=>B=>C=>Aの順に値が検索される。
531デフォルトの名無しさん:2011/07/22(金) 15:33:09.70
すまん、図がおかしくなった。
適当に脳内修正してくれorz
532デフォルトの名無しさん:2011/07/22(金) 15:54:33.49
クラシックスタイル
A→↓
↑ ↓
B  C

D

新スタイル
A

 \
B→C

 ↑
  D
533デフォルトの名無しさん:2011/07/22(金) 23:01:14.14
クロージャ意味わかんねえ
どこでどういうときに使うべきなんだ
534デフォルトの名無しさん:2011/07/23(土) 00:26:42.31
関数を返す関数
535デフォルトの名無しさん:2011/07/23(土) 00:29:09.53
・mapとかに渡すとき
・デコレータ書くとき
536デフォルトの名無しさん:2011/07/23(土) 05:24:01.80
>>532
具体的にどんな場面で役に立つんだろう
537デフォルトの名無しさん:2011/07/23(土) 08:49:15.29
mixin
538デフォルトの名無しさん:2011/07/23(土) 15:14:09.27
__eq__とか__gt__を使えばインスタンスの比較演算を制御できるけど
クラスオブジェクトの比較演算って制御できないのか
class Foo:
  pass
「Foo == 2」とか「Foo <= 45」とか書けると捗るのだが
539デフォルトの名無しさん:2011/07/23(土) 15:22:06.07
メタクラス
540デフォルトの名無しさん:2011/07/24(日) 17:21:05.90
>>536
何かの役に立つというより、
値解決の順番がより直感的になったことで
それにまつわるバグが発見しやすくなった。
まあダイアモンド継承するコードなんて滅多に書かないはずだから、
大抵の人には無縁の話ではあると思う。
541デフォルトの名無しさん:2011/07/24(日) 18:03:29.11
text="hoge hage huge hege"

text.scan(/(h.ge)/){|re|
puts re
}

微妙にスレ違いかもしれないけど、rubyでやるようなこういうコードってpythonだとどう書けばいいのか知りませんか?
542デフォルトの名無しさん:2011/07/24(日) 18:11:08.43
text = "hoge hage huge hege"
for mo in re.finditer(r'h.ge', text):
print mo.group(0)
543デフォルトの名無しさん:2011/07/24(日) 18:14:21.69
>>542
thx
544デフォルトの名無しさん:2011/07/24(日) 18:31:07.01
import re
545デフォルトの名無しさん:2011/07/24(日) 19:12:53.82
>>538
# meta_test.py
class MetaKlass(type):
  def __cmp__(self, other):
  return cmp(self.value, other)

class Klass(object):
  __metaclass__ = MetaKlass
  value = 50
  def __init__(self):
    self.value = 100
  def __cmp__(self, other):
    return cmp(self.value, other)

print Klass == 50, Klass != 50
klass = Klass()
print klass > 100, klass < 101

$ python meta_test.py
True False
False True
546デフォルトの名無しさん:2011/07/25(月) 23:23:55.81
ここでKeyhacっていうキーカスタマイズソフトの質問するのは板違い?
547デフォルトの名無しさん:2011/07/26(火) 01:27:24.02
pythonでやるなら
548デフォルトの名無しさん:2011/07/26(火) 13:38:05.51
プログラミング経験ゼロからPythonを勉強しています。
特に作りたいアプリがあるわけではないのですが、
学習用にいいという評判と、Google Appsで使えるということでPythonにしました。

先週Pythonスタートブックを読み終え、内容は理解しました。
で、2冊目としてみんなのPythonを読んでいるのですが、
「こういうことができるよ」の箇条書きが辛いので、練習問題を解きながら上達したいと思っています。

練習問題が多く載っていて、「手を動かしてPythonを覚える」
というようなコンセプトの本をご存じでしたら教えて頂きたいです。

よろしくお願いします。
549デフォルトの名無しさん:2011/07/26(火) 13:49:57.41
githubでコードよみまくればよくね
550デフォルトの名無しさん:2011/07/26(火) 13:57:01.26
>>549
githubについて全く知りませんでした。
使い方勉強しながら、色んな人のコードを読んでみます。

ありがとうございました。
551デフォルトの名無しさん:2011/07/26(火) 17:56:04.58
>>548
集合知プログラミング
入門自然言語処理
552デフォルトの名無しさん:2011/07/26(火) 18:22:29.45
>>548
『初めてのPython』
http://amazon.co.jp/dp/4873113938/
章末に問題がついている。極めたいならこれ。

以下は、問題がついているわけではないがお勧め

Dive Into Python 3 日本語版
http://diveintopython3-ja.rdy.jp/
先にも紹介されている。

Invent Your Own Computer Games with Python
http://inventwithpython.com/chapters/
小学生でも理解できる内容とのこと。英語だけど

とはいえ、どのみち何を作りたいかを早めに決めたほうがいい。
勉強する分野は次第に枝分かれせざるを得ないし、
やる気の持続も大事だ。
553デフォルトの名無しさん:2011/07/26(火) 19:06:30.00
Pythonゲームプログラミング
554デフォルトの名無しさん:2011/07/26(火) 21:03:07.93
『初めてのPython』 は日本語(unicode/string)の扱い方がいい加減だと思う
555デフォルトの名無しさん:2011/07/27(水) 00:59:57.70
>>> int(1.9999999999999998889776975375)
2
>>> int(1.9999999999999998889776975374)
1
556デフォルトの名無しさん:2011/07/27(水) 15:55:38.40
548です。お勧め本たくさん教えて頂き、ありがとうございます。
難しそうなのも多そうですが、これから図書館と本屋に行くので全部見てきます。
557デフォルトの名無しさん:2011/07/27(水) 20:07:29.96
>>553
買ったけど、かなり難しそう。
本の題名でググッたら打ち上げの様子が出て来て和んだ。
558デフォルトの名無しさん:2011/07/28(木) 01:31:39.24
>>546
いいんじゃねえの?
559デフォルトの名無しさん:2011/07/28(木) 04:15:44.97
>>> int(1.9999999999999998889776975375)
1
>>> int(1.9999999999999998889776975374)
1
560デフォルトの名無しさん:2011/07/28(木) 10:28:35.09
Python3.2.1
>>> int(1.9999999999999998889776975375)
2
>>> int(1.9999999999999998889776975374)
1
Python3.1.4
>>> int(1.9999999999999998889776975375)
2
>>> int(1.9999999999999998889776975374)
1
Python2.7
>>> int(1.9999999999999998889776975375)
2
>>> int(1.9999999999999998889776975374)
1
Python2.6
>>> int(1.9999999999999998889991)
2
>>> int(1.999999999999999888999099999999999999999)
1
561デフォルトの名無しさん:2011/07/28(木) 10:43:48.20
>>> 1.99999999999999988897769753748434595763683319091796875
2.0
>>> 1.99999999999999988897769753748434595763683319091796874999999999
1.9999999999999998
562デフォルトの名無しさん:2011/07/28(木) 12:26:30.73
>>> 1.99999999999999988897769753748434595763683319091796875
1.9999999999999998
>>> 1.99999999999999988897769753748434595763683319091796874999999999
1.9999999999999998
563デフォルトの名無しさん:2011/07/28(木) 16:32:35.61
Python2.6以前とは扱いが違うのね
564デフォルトの名無しさん:2011/07/28(木) 19:48:58.09
境目調べるのすげえな
565デフォルトの名無しさん:2011/07/28(木) 21:12:51.20
一桁ずつ増やして値が変わったら二分岐法で絞り込んでんじゃね?
566デフォルトの名無しさん:2011/07/28(木) 21:14:43.91
境目調べるのすけべえな
567デフォルトの名無しさん:2011/07/28(木) 21:40:14.07
1.999999.... と 2.0 の境目の話じゃなくて
バージョンの境目の話じゃね?
568デフォルトの名無しさん:2011/07/28(木) 23:09:20.53
一般人がこれを気にする必要が出ることが今後あるのだろうか
569デフォルトの名無しさん:2011/07/29(金) 09:59:34.54
2.0にはならないこと前提に
array[int(x)]
したとき、IndexErrorが出るかもしれない。
570デフォルトの名無しさん:2011/07/29(金) 19:28:21.98
math.ceilを使わない簡単な切り上げが出来ない
>>>x=1.0
>>>int(x+0.99999999999999999999999999999999999999999999999999999)
2
………あれ?
xに入る値が未知の時出来る限り精度をあげるために、0.99999と9を大量に打っとけば大丈夫だろうと考え上記のようにしていた場合
全ての値が1大きくなってしまう
通常利用していてxに、1.9999999……というような値が代入される機会は少ないが、
人間が深く考えもせず上記のような値をいれる場合は容易にありえる

>>561
打ち間違えてる。
…99999998じゃなく、…99999999だな
571デフォルトの名無しさん:2011/07/29(金) 19:38:37.20
>>570
打ち間違えてなかった
9998になってたのは出力か
携帯の専ブラだと、改行されていなくて見間違えた
572デフォルトの名無しさん:2011/07/30(土) 02:42:19.02
>>570
基地外乙
573デフォルトの名無しさん:2011/07/31(日) 03:54:57.67
xlrd xlwt xlutils は、2.7では使えないのでしょうか?
3系か2系か迷って2ヶ月、2系に決めたところ、今度は2.6か2.7か・・・。
いっそ枯れた2.5か・・・。しかし速度はバージョンが上の方が有利?
初心者以前なので、スレ違いなら誘導願います。
574デフォルトの名無しさん:2011/07/31(日) 05:20:09.60
>>573
これのこと?
ttp://pypi.python.org/pypi/xlrd
このページのことなら、python2.6までをサポートってあるね。
たぶん2.7でも動くと思うけど、心配なら2.6を使うのがいい。

>いっそ枯れた2.5か・・・。しかし速度はバージョンが上の方が有利?
2.6も十分枯れているし2.5よりおおむね速いので、2.6を選べるなら2.5を選ぶ必要はない。
575デフォルトの名無しさん:2011/07/31(日) 05:28:20.72
>>573
速度は2.6より2.7のほうがちょっとだけ速いけど、初心者に
違いがわかるほどの差なんてない。
2.7は、3.xの新機能が数多く取り込まれているけど、そのぶん
枯れてない印象がある。
現時点で3.xへの移行を考えているなら2.7のほうがいいけど、
そうでなければ、枯れているのは2.6だから2.6を使うといい。
576デフォルトの名無しさん:2011/07/31(日) 05:38:29.87
俺の大学は一年で最初にJavaを使って教えてたんだけど、
今年からついにプログラミングの基礎はPython使って教えることになった。
577デフォルトの名無しさん:2011/07/31(日) 05:59:15.77
>>573
>xlrd xlwt xlutils は、2.7では使えないのでしょうか?
質問する時には、xlrdやxlwtが何なのか書いていた方がいいよ。
578デフォルトの名無しさん:2011/07/31(日) 06:05:30.52
573です。
>>574
>>575
ありがとうございます。外部ライブラリに安定感がありそうなので
2.6をインストールします。
579デフォルトの名無しさん:2011/07/31(日) 06:10:33.19
573です。
>>577
すいません。pythonスレではそのままで通じるかと省略してしまいました。
Excelファイルを直接pythonで操作する外部ライブラリです。
580デフォルトの名無しさん:2011/07/31(日) 10:52:11.59
>>576
わかります
581デフォルトの名無しさん:2011/07/31(日) 10:58:00.93
>>579
知らなくても名前で容易に想像つくから気にするな
582デフォルトの名無しさん:2011/07/31(日) 11:44:07.06
Python3の勉強に良い本かサイトってありますか?
583デフォルトの名無しさん:2011/07/31(日) 12:20:14.83
584デフォルトの名無しさん:2011/07/31(日) 12:46:08.84
>>583
おーありがとう!
585デフォルトの名無しさん:2011/07/31(日) 13:24:27.59
意訳がキモイなw
586デフォルトの名無しさん:2011/07/31(日) 14:29:11.89
意訳か?
直訳じゃない?
587デフォルトの名無しさん:2011/07/31(日) 14:33:06.14
ドメイン名がキモイ
588デフォルトの名無しさん:2011/07/31(日) 14:55:18.20
Pythonのsqlからの値はUnicodeなん
589デフォルトの名無しさん:2011/07/31(日) 15:20:09.33
>>588
sqliteの場合は。sqlite内部ではUTF-8
そこらへんの変換はライブラリがやってくれるので気にしなくて良い。

他のDBはどうだか分からない。使ったことないから。
590デフォルトの名無しさん:2011/07/31(日) 16:04:06.41
defaultの文字コードでinsert/update/selectするDBもあれば
文字コード無視で入出力出来てしまうDBもある
既存のプロジェクトで文字コード気にしないで作られたのは
メンテする気にならない
591デフォルトの名無しさん:2011/07/31(日) 16:29:45.22
>>589-590
DBの文字コード気にせずに作ってUnicodeDecodeEroorで詰んだ。。
やっぱりPythonは難しい
592デフォルトの名無しさん:2011/07/31(日) 19:20:23.79
それはエンコード気にせずDBにアクセスする方が悪いんであって
Pythonのせいではないな
593デフォルトの名無しさん:2011/07/31(日) 19:48:55.26
思うに 2.x で str と unicode を連結しようとしたら
警告を発するオプションがあってもよかったな。
594デフォルトの名無しさん:2011/07/31(日) 20:34:42.44
エラーって出ないんだっけ?
昔、strとunicode分別しないコーディングして痛い目にあった覚えがあるが
595デフォルトの名無しさん:2011/07/31(日) 20:41:09.40
使う側のねらーですらシフトJISとかシリア語ブラクラとか気にするのに作る側がこの有様。
596デフォルトの名無しさん:2011/07/31(日) 20:57:31.51
>>594
なにも考えずにstrとunicodeを連結(エンコ情報省略)すると
defaultencodingで変換されて変換できない時だけ例外が出るんじゃなかったかな
それででsetdefaultencodingしろとか言うとまた色々突っ込まれるんだよな
597デフォルトの名無しさん:2011/07/31(日) 20:58:58.03
最近エンコード関係でハマったのは、BeautifulSoupでHTML内のリンクを抽出したら
URLがUnicode文字列で返ってきていて、それをそのままurllib.unquote_plus()に渡したら
おかしなことになったw
598デフォルトの名無しさん:2011/07/31(日) 21:16:40.24
wxPythonのドキュメントって英語しかないですか?
599デフォルトの名無しさん:2011/07/31(日) 21:38:03.69
>>596
あー、そんな感じだったな
Win上とLinux上で平行試作してたらテキストのエンコードも違って泣きそうになったw
600デフォルトの名無しさん:2011/07/31(日) 22:54:01.95
馬鹿自慢大会になってるな
601デフォルトの名無しさん:2011/07/31(日) 23:31:50.69
>>600
良いことだよ。単なる成功例よりも失敗をこうやって克服したって報告の方が
より役に立つ。

602デフォルトの名無しさん:2011/08/01(月) 21:20:48.80
>>> 0.1 + 0.1 + 0.1
0.30000000000000004

何故このような結果になるんでしょうか?
python3.2.1です。
603デフォルトの名無しさん:2011/08/01(月) 21:32:09.57
>>> import decimal
>>> decimal.Decimal('0.1') + decimal.Decimal('0.1') + decimal.Decimal('0.1')
Decimal('0.3')

コンピーターは2進数で浮動小数を扱っているけれど、
>>602の計算は10進数によるものだから。
計算機科学の基礎なんだけど、>>602は今何歳?
604デフォルトの名無しさん:2011/08/01(月) 21:43:13.04
>>603
ありがとうございます。
18です。 無知ですみません。。
605デフォルトの名無しさん:2011/08/01(月) 21:59:34.18
606デフォルトの名無しさん:2011/08/01(月) 22:02:39.29
別に無知でいいし、無知が普通なんだけど。
ただ、Pythonを触る前に計算機科学の入門書を読んでおいた方がいいと思う。

・・・と思って>>604に図書を紹介しようと思ったけど、
↓からよさげな本が見つからなかった。

推薦図書/必読書のためのスレッド 63
http://hibari.2ch.net/test/read.cgi/tech/1308413698/

もうちょっと詳しく>>604について教えて
大学生?情報科の生徒?プログラムの授業取ってる?
C言語とかアセンブラとか使ったことある?
プログラムはPython3.Xが初めて?
>>304が使おうとしているOSは何?CentOS?Ubuntu?Windows?Mac?

誰かあとはよろしく
607デフォルトの名無しさん:2011/08/01(月) 22:08:59.84
BCDくらいは知ってた方が良いな
608デフォルトの名無しさん:2011/08/01(月) 22:17:35.64
>>606
情報系の専門学生です。
初めて触ったのはCで、独学で1年ちょっと勉強したくらいです。
今は学校でjavaやってます。
2進数と10進数の誤差については知ってたんですが、どんな計算(?)でこの結果になるのか
気になったので質問しました。
609デフォルトの名無しさん:2011/08/01(月) 23:53:51.52
floatをstr()するときに、たしか小数点以下第?桁で四捨五入してたような気がするけど、
どうやって桁数を設定するんだっけ?
610デフォルトの名無しさん:2011/08/01(月) 23:59:57.01
>>> a = 123.456789
>>> '{:1.4}'.format(a)
'123.5'
>>> '{:1.4}'.format(a)
611デフォルトの名無しさん:2011/08/02(火) 00:05:07.77
>>> "%.3g" % 20.35
'20.4'
>>> "%g" % round(11.1012, 3)
'11.101'

formatメソッドが使えるならそっちのほうがいいけどね。
612デフォルトの名無しさん:2011/08/02(火) 06:45:38.09
>>598
今使ってるけど、ほとんど英語だけだね。侍本をリファレンスとして使ってるけど役立つ。あと附属のデモ集も。細かいところは英語で検索すれば海外の掲示板で大抵回答されてる。
613デフォルトの名無しさん:2011/08/03(水) 13:42:32.66
./src/{a,b,c}から./dst/へ特定のディレクトリだけをコピーしたいのですが、
for obj in ["a", "c"]:
 shutil.copytree(os.path.join("src", obj), "dst");
では、二周目以降にdstが存在するので例外を吐きます。

obj下をglobして、それぞれディレクトリかファイルかを判別、
ディレクトリならcopystatしてファイルならcopy2する、といった泥臭い方法以外に、
なにかうまいやり方はありませんか?
614デフォルトの名無しさん:2011/08/03(水) 17:03:38.55
for obj in ["a", "c"]:
try:
 shutil.copytree(os.path.join("src", obj), "dst")
except:
pass
615デフォルトの名無しさん:2011/08/03(水) 17:53:40.99
ファイルの場所を尋ねるにはどうすればいいですか?
簡単に言うとインストール先を、尋ねるときに出るあれを出したいです。

用途は opencvで画像を読み込むために使います。
616デフォルトの名無しさん:2011/08/03(水) 20:07:25.86
tkFileDialog の askopenfilename, askdirectory とか
617デフォルトの名無しさん:2011/08/03(水) 21:16:19.85
>>616
それだとファイルの指定ってよりディレクトリの指定になっちゃうんだけど
618デフォルトの名無しさん:2011/08/03(水) 21:18:25.58
インストール先の指定を例に出すんだからディレクトリの指定で合ってんじゃね?
619デフォルトの名無しさん:2011/08/03(水) 21:45:42.30
>>618
マジだスマソ 
アレを出したいだけで用途は画像そのものを指定したいです。
620デフォルトの名無しさん:2011/08/03(水) 21:52:18.17
askopenfilename の方はファイル指定だよ
621デフォルトの名無しさん:2011/08/03(水) 22:03:49.32
>>620
おぉ出来た!ありがと また何かあったらよろしくです
622デフォルトの名無しさん:2011/08/03(水) 22:03:59.94
ありがとう
623デフォルトの名無しさん:2011/08/04(木) 08:02:21.89
>>602
大抵の言語こんなだよな
624デフォルトの名無しさん:2011/08/04(木) 10:58:23.92
おまえら基本情報受けろ
625デフォルトの名無しさん:2011/08/04(木) 11:01:42.68
626デフォルトの名無しさん:2011/08/04(木) 11:12:46.70
>>623
そろそろ有理数が組み込みなLLが出てきそうな予感。
627デフォルトの名無しさん:2011/08/04(木) 13:35:02.70
Pythonは10進数も有理数も標準ライブラリにあるけどな。
In [2]: from decimal import *
In [3]: Decimal('0.1')+Decimal('0.1')+Decimal('0.1')
Out[3]: Decimal('0.3')
In [5]: from fractions import *
In [6]: Fraction(1, 6)+Fraction(1, 6)
Out[6]: Fraction(1, 3)
628デフォルトの名無しさん:2011/08/04(木) 14:31:35.45
標準ライブラリと組み込みか否かは随分と違うと思うぞ
組み込みになると普通に書いた式も、組み込み関数や演算子が返す値も有理数扱いになるだろうからね

…math.sqrt(2)やmath.piが実数でなく√2やπをそのまま返すようになるがw
629デフォルトの名無しさん:2011/08/04(木) 14:32:57.15
って…無理数を例にしてしまった
まあ、突き詰めれば無理数もそうなるか
630デフォルトの名無しさん:2011/08/04(木) 14:38:57.42
有理数リテラルがあると「あ、組み込んでるな」って感じる
631デフォルトの名無しさん:2011/08/04(木) 17:03:59.00
まぁ複素数が組み込みなんだから有理数や10進数もっていう気持ちは分かるが、
Pythonぽくなくてヤダ。
複素数も組み込みから外して良いんじゃないか?
632デフォルトの名無しさん:2011/08/05(金) 17:15:14.73
初心者です。スクリプトファイル内でのimportは、どこで行うのが普通なのでしょうか。
必要になった時点でimport?
必要になると解かったら、ファイル先頭の方でimportしておく(羅列しておく)?
633デフォルトの名無しさん:2011/08/05(金) 17:23:12.86
ファイルの先頭に書きましょう。
Pythonのコーディング規約があったはず、そこに色々書いてあるよ
634デフォルトの名無しさん:2011/08/05(金) 17:23:41.70
局所的に必要なものなら
(そのスコープの有効な範囲のみで使えればよいなら)
そこだけでimportした方が良い場合もあるだろうし
どこでも使うなら頭でimportした方が良い場合もある
635デフォルトの名無しさん:2011/08/05(金) 17:24:22.22
それより
from A import *
ってどうなん?
636デフォルトの名無しさん:2011/08/05(金) 17:35:00.39
Python2.7に対応したOpenCv2.3って無いんですかね。OpenCV2.2までなのでしょうか?
637632:2011/08/05(金) 17:43:34.57
>>633
>>634
ありがとうございます。

>Pythonのコーディング規約

検索したら、それらしい日本語訳(PEP8)が見つかったので読んでみます。
638デフォルトの名無しさん:2011/08/05(金) 20:02:57.39
>>635
駄目
639デフォルトの名無しさん:2011/08/05(金) 20:33:18.46
>>637
pep8.py がどっかにあるから
%python pep8.py チェックしたいファイル.py
で規約違反が標準出力に出てくるよ
640デフォルトの名無しさん:2011/08/06(土) 17:54:28.92
>>637
OS書いてないけどどうせWindowsだろうから
"opencv 2.3 win32 py2.7"でググれ
641637:2011/08/06(土) 18:28:27.19
>>639 ありがとうございます。見つけました。
>>637 見つけましたが・・・intelとか画像処理とか出てきて・・・意味が・・・
642デフォルトの名無しさん:2011/08/06(土) 21:03:38.31
windowsXP、python2.7.2 で 試し中です。
検索で、下記の様な高速化セオリーのようなものを見つけました。他にどの様なものがあるでしょうか?
pypyとかはナシで、標準ライブラリで出来る範囲で教えてください。

 + より、join、append、extend の方が早い
 while より for の方が早い
 内包表記の方が早い(意味解かってません)
 リストよりタプルの方が早い
643デフォルトの名無しさん:2011/08/06(土) 22:16:07.13
>>642
a_list = [x for x in xs]

# @表現が冗長なのでインタプリタの解釈することが増える。
# Aまた、ループごとにappendを呼び出している。
a_list = []
append = a_list.append
for element in a_list:
 append(x)

# B更に、ループごとにa_listからappendを取り出す。
a_list = []
for element in a_list:
 a_list.append(x)

@、A、Bの余計なコストがかかる。

×早い
○速い
644デフォルトの名無しさん:2011/08/06(土) 22:24:14.96
オペレータよりメソッドのほうが速いってのはなんで?
645デフォルトの名無しさん:2011/08/06(土) 23:59:18.50
なんで等価じゃない例を出すんだろ
646デフォルトの名無しさん:2011/08/07(日) 00:36:22.47
>>645
すまん、間違えた。等価じゃなどころか・・・TT
for element in a_listじゃなくてfor x in xs

オペレータよりメソッドが速いというのは知らないが、
>>642
の「+ より、join、append、extend の方が」というリストの話題を受けてる?
それについてなら答えられる限り書いておく。(extendについては知らん)

まず、+演算子と+=演算子は全く別物なので区別する。

+演算子
>>> id(a_list)
45150408L
>>> a_list = a_list + ["piyo"]
>>> id(a_list)
45141128L
のように+演算子は新しいa_listを生成しているから、メモリ確保のコストが大きい。

+=演算子
a_list += ["piyo"]

a_list.append("piyo")
はどちらもa_listを直接変更している。
しかし、前者は
a_list += ["piyo", "hoge"]
のような処理もできるように、内部でイテレートないしそれに代わる処理をせざるを得ないから、その分コストがかかる。

計測すると確かにパフォーマンスの違いがある。
http://stackoverflow.com/questions/725782/python-list-concatenation-what-is-difference-in-append-and
647デフォルトの名無しさん:2011/08/07(日) 00:56:33.50
u"日本語" と r"raw string" を同時に指定したい場合はどうすればいいですか。
648デフォルトの名無しさん:2011/08/07(日) 00:59:12.51
>>647
>>> print ur"ぴよ\n"
ぴよ\n
649デフォルトの名無しさん:2011/08/07(日) 01:49:18.41
>>648
ありゃ、同時使用できたんですね。ありがとうございます。
650デフォルトの名無しさん:2011/08/07(日) 03:21:15.07
>>640
Windowsではなく,Macです.
651デフォルトの名無しさん:2011/08/07(日) 03:25:03.70
>>640
OSはMac OS X10.7 Lionです.(OS関係ないと思いますが,指摘があったので正確に答えさせていただきます)

動かせるならOpenCV2.3を使いたいのですが,
どうも自分ではわからないので,ここで尋ねさせていただきました.
652デフォルトの名無しさん:2011/08/07(日) 15:57:08.74
pythonで書かれたトリップ生成プログラムを教えて下さい
10ケタ用のは見つけたんですけど12ケタのなかなか見つかりません
653 ◆OE/NFgqzszF0 :2011/08/07(日) 17:31:01.64
>>> import hashlib,base64
>>> base64.b64encode(hashlib.sha1("aaaaaaaaaaaa").digest())[:12]
'OE/NFgqzszF0'
654 ◆OE/NFgqzszF0 :2011/08/07(日) 19:19:42.44
"aaaaaaaaaaaa"
どれどれ
655デフォルトの名無しさん:2011/08/07(日) 19:24:51.97
python3.xだとこうな

import hashlib
import base64

trip = base64.b64encode(hashlib.sha1(b"aaaaaaaaaaaa").digest())[:12]
print('trip =', trip)
print('trip is', trip == b"OE/NFgqzszF0")
656デフォルトの名無しさん:2011/08/08(月) 11:37:35.19
Cのscanf的な事ってどうやんの
657デフォルトの名無しさん:2011/08/08(月) 11:52:51.91
Is there a scanf() or sscanf() equivalent?

Not as such.

For simple input parsing, the easiest approach is usually to split the
line into whitespace-delimited words using the split() method of string
objects and then convert decimal strings to numeric values using
int() or float(). split() supports an optional “sep” parameter which
is useful if the line uses something other than whitespace as a separator.

For more complicated input parsing, regular expressions are more
powerful than C’s sscanf() and better suited for the task.
658デフォルトの名無しさん:2011/08/08(月) 11:58:09.49
これからpython学ぼうと思うんだが今から2.xはもう遅い?
3.xやったほうがいいかな
659デフォルトの名無しさん:2011/08/08(月) 12:58:42.92
>>656
一応要約すると、
#1 split()とint(), float()を使う
#2 正規表現を使う
http://docs.python.org/library/re.html#simulating-scanf
http://effbot.org/pyfaq/is-there-a-scanf-or-sscanf-equivalent.htm

>>658
現状、多くのライブラリが3.xに非対応で、2.xが幅を利かせているから2.xでも問題ない。
他方、3.xのほうが文法も標準ライブラリも洗練されている。
また、後方互換性を少しばかり損なってしまったが、それほど大きく変わったわけではない。
だから、どちらでもいいと思うぞ。
ただし、マイナーバージョンは大きいほうがいい.
660 ◆rsXHinq0E2Ae :2011/08/08(月) 13:34:59.09
>>652です
有難うございます!
こんなに短く出来るなんて・・・!
661デフォルトの名無しさん:2011/08/08(月) 14:14:44.45
001
002
003
・・・
012
013
・・・
099
100
101
・・・
と言うように数字の頭にゼロを付けて
決まった桁数にするにはどうしたらいいですか?
662デフォルトの名無しさん:2011/08/08(月) 14:21:08.26
>>> "{0:03}".format(1)
'001'
>>> format(1, "03")
'001'
>>> "%03d" % (1,)
'001'
>>> str(1).zfill(3)
'001'
663デフォルトの名無しさん:2011/08/08(月) 14:21:44.81
>>661
>>> for i in range(150):
...   print "%03d" % i
...
000
001
002
003
...
020
021
022
023
...
147
148
149

664661:2011/08/08(月) 15:13:40.47
有難うございます
助かりました!
665658:2011/08/08(月) 16:16:20.26
>>659
返答ありがとうございます。
では2.xの方から学んでいこうと思います。
666デフォルトの名無しさん:2011/08/08(月) 16:25:13.44
いずれ3に移行していくんだからこれから始めるなら3.xを選択したほうがいいと思うけどなぁ
667デフォルトの名無しさん:2011/08/08(月) 16:42:23.32
自分でしこしこ組むなら 3.x でいいし、いろんなオープンソースの
ソフトいじって勉強するなら 2.x の方がいいと思う。
668デフォルトの名無しさん:2011/08/08(月) 17:04:36.46
Python 3.xから入った俺はどうなんの?
別に不自由していないけど
669デフォルトの名無しさん:2011/08/08(月) 17:10:11.99
そりゃ僥倖。そのまま行け。
670デフォルトの名無しさん:2011/08/08(月) 17:10:40.26
どっちかをある程度使えれば問題なくね
C読めればなんとなく別の言語のコード読めるだろ
671デフォルトの名無しさん:2011/08/08(月) 17:54:55.27
時間のかかるループを作ってしまったので
何秒ごとに進捗具合を出力したいのですが
何秒ごとになにかさせるにはどうしたらいいですか?

ループ中にifで何個やったら出力させる様にしてみたんですが
時間のかかるループでさらに毎回ifで判断させるのは
どうかと思ったので・・・
672デフォルトの名無しさん:2011/08/08(月) 18:11:56.99
別のスレッドつくってループ内で使ってる変数なりを短い周期で出力させるようにするとかどうかな
673デフォルトの名無しさん:2011/08/08(月) 18:18:40.03
>>671
# -*- coding: utf-8 -*-
# Thread test
import thread
import time

# 進捗
progress = 0

def timeit():
 global progress
 while True:
  time.sleep(1)
  print progress

args = ()
thread.start_new_thread(timeit, args)

while True:
 progress += 1
分かりやすく書くとこういう風になる。

進捗状況の表示には
progressbar がおすすめ。
http://pypi.python.org/pypi/progressbar
674デフォルトの名無しさん:2011/08/08(月) 18:44:17.67
progressbar 超面白いですね!
有難うございます!
675デフォルトの名無しさん:2011/08/09(火) 00:47:09.91
CSVモジュールを使用してCSVファイルを読み込み。
読み込んだファイル全体を指定フィールドでソートする方法を教えてください。
csvfile = csv.reader(f)
csvfile.sort()
のような書き方をしたら、_csvredaerにそんなメソッドはない、的なエラーです。
また、sortのkeyの書き方がよく解かりません。
リスト(ファイル全体)の中のリスト(行)の中のリストのインデックス指定でソート
すればOKのような気がするのですが、書き方が不明です。よろしくお願いします。
676デフォルトの名無しさん:2011/08/09(火) 05:25:24.63
>>675

>>> import csv
>>> reader = csv.reader(open("a.csv"))
>>> data = [ x for x in reader ]
>>> data
[['7', '8', '9'], ['4', '5', '6'], ['1', '2', '3']]
>>> sorted( data, lambda x,y: cmp( x[1],y[1] ))
[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
677675:2011/08/09(火) 07:36:28.19
>>676
readerで1行づづ読み取り、dataというリストを作成(内包表記)。
そのリストの中のリストの指定インデックスの値で比較しソートにかける、ということですね。

ありがとうございました。
678デフォルトの名無しさん:2011/08/09(火) 15:02:28.71
for i in range(100):
のrangeをものすごいでかい値にすると、
リストの限界なのか受け付けてくれません
whileにすれば問題ないのですが
rangeを使えないぐらいの凄いでかい連番を使いたい時は
whileにする以外何か方法はありますか?
i=0
while i!=100:
 i+=1
679デフォルトの名無しさん:2011/08/09(火) 15:05:34.21
xrange
680デフォルトの名無しさん:2011/08/09(火) 15:12:36.16
xrangeですか・・・知らなかったOTL
有難うございます
681デフォルトの名無しさん:2011/08/09(火) 15:22:01.14
xrangeでやったら
OverflowError: long int too lange to convert to int
になりましたOTL
値がでかすぎるとどうしようもないのでしょうか?
682デフォルトの名無しさん:2011/08/09(火) 15:44:06.52
>>681
itertools.count
あるいは
yieldを使ってrange/xrangeもどきを書くか。
http://stackoverflow.com/questions/2187135/python-range-and-xrange-for-13-digit-numbers
683デフォルトの名無しさん:2011/08/09(火) 15:49:40.80
もどきだとこんなんだね。遅いけど

def myrange(stop, start=0, step=1):
    n = start
    while n < stop:
        yield n
        n += 1
684682:2011/08/09(火) 16:06:19.81
じゃあ漏れはcountの方を書いてみる。

>>> BIG = 10000000000

# BIGから10ずつカウントしていく

xrange(BIG, BIG + 100, 10)
>>> xrange(BIG)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long
>>> itertools.count(BIG, 10)
count(10000000000L, 10)

ちなみにitertoolsは順列や組み合わせが簡単に作れて面白い。
685デフォルトの名無しさん:2011/08/09(火) 16:47:13.37
itertools.countつかったら
whileより少し早くなりました
有難うございます。
itertools調べてみましたが面白いですね。
itertools.combinationsが確率の問題っぽくて面白いです
import itertools
print( [i for i in itertools.combinations(["a","b","c","d"], 3)])

>[('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd')]
('a', 'c', 'b')みたいに並びが違うものは重複と見なされて、でないですね
並び順も含めて全ての組み合わせを出してくれるものなんてあるのでしょうか?
686685:2011/08/09(火) 16:55:03.67
すいません自己解決
itertools.permutations
でした。
面白いです!
687デフォルトの名無しさん:2011/08/09(火) 19:35:01.34
高校の数学を思い出すなw > nCm, nPm
688デフォルトの名無しさん:2011/08/09(火) 21:25:09.71
すっごい下らない質問で申し訳ないですが
コマンドプロンプトで.pyを実行したけど暴走して止まらない時や
何かキーを押したらそこで処理を言ったん止めてセーブ(?)したい場合は
どうすればいいですか?

キーボードのPauseとBreak両方が書いてあるキーを押してみたけど
Breakしない・・・
689デフォルトの名無しさん:2011/08/09(火) 21:34:22.46
>>688
ctrl+Cはどう?
690デフォルトの名無しさん:2011/08/09(火) 21:34:43.50
python2.xと3ではやっぱり3の方が早いですか?
691デフォルトの名無しさん:2011/08/09(火) 21:38:14.62
ctrl+Cで止まりました
有難うございます
何かキーをおして一旦処理を止めてセーブしたい場合は
どうすればいいですか?
692デフォルトの名無しさん:2011/08/09(火) 22:16:08.00
Python の処理系自体にはそんな機能はないんじゃないかな。

アプリケーションレベルなら、自分でそう言う機能を実装すればいい。

もしくは、Vitrual-PC でも入れて OS ごと保存するとかかな。
693デフォルトの名無しさん:2011/08/09(火) 22:24:03.92
>>692
有難うございます
適当な間隔で処理内容をメモ帳かなんかに定期的に書き込んでみます
694デフォルトの名無しさん:2011/08/09(火) 22:27:54.81
>>691
すぐに思いつくのは・・・
#1 KeyboardInterruptを検出、後に復帰処理(面倒)
#2 プログラムをデバッガの制御下に置いて中断
#3 キーイベント監視 + フラグによる中断
695デフォルトの名無しさん:2011/08/09(火) 23:35:55.85
>>691
セーブって動作がどういうものかよく分からん。
pythonインタプリタ自体を止めたいって話だったら以下のスクリプトは
使えないけど、実行中のログを吐き出させていて、ある時に一時的に実行を
止めたいのであれば↓を使ってくれ

import time
import threading

class Foo:
def __init__(self):
self.key_event = threading.Event()

def do_something(self):
print("run...")

def running(self):
while self.key_event.wait():
self.do_something()
time.sleep(1)

def detect_key_input(self):
while True:
self.key_event.clear()
input('now python script is stopping.....')
self.key_event.set()
input('now python script is running.....')
foo = Foo()
thread = threading.Thread(target=foo.running)
thread.start()
foo.detect_key_input()
696デフォルトの名無しさん:2011/08/10(水) 00:04:47.12
多分Ctrl-Zでサスペンドするのが望みの動作だろうけど
Windowsのコマンドプロンプトでは出来ないかも
697デフォルトの名無しさん:2011/08/10(水) 00:14:38.74
コマンドプロンプトのCtrl+ZはUnix系で言うところのCtrl+Dだからねぇ
698デフォルトの名無しさん:2011/08/10(水) 19:24:53.82
ver2.6.6、windowXPです。
ソースファイルのエンコード設定を自分自身で取得する方法を
教えてください。言い換えますと、
cp932で記述されているa.pyがあります。
そのa.pyの中に、cp932である事を取得(表示)するコードを書きたい、
という事です。
699デフォルトの名無しさん:2011/08/10(水) 22:07:01.70
>698
こんな感じ?(1 or 2行目に定義してあるエンコーディングを取得)

# -*- coding: cp932 -*-
import re
with open(__file__) as f:
 for line in f.readlines()[:2]:
  m = re.match("^#.*coding[:=]\s*(\S+)", line)
  if m:
   print(m.groups()[0])
   break
700698:2011/08/10(水) 22:54:27.79
>>699
コピペで動作確認できました。
正規表現の様ですが、そこまで学習が進んでいない
初心者ですので、これから学習していきます。
ありがとうございました。
701デフォルトの名無しさん:2011/08/11(木) 10:25:02.11
python最強
702デフォルトの名無しさん:2011/08/11(木) 11:02:24.17
pass
703デフォルトの名無しさん:2011/08/11(木) 11:41:10.85
def a():
try
 b():
 c():
 d():
except Exception:
 self.massage.append("DataPutError:line" + str(self.l) + " elements" + str(self.e) + ":" + str(sys.exc_info()[0]))
 continue

とやっても処理を抜けてしまいます。b():でエラーが出たときc():に戻すことはできませんか?
こまめにtryするしかないですか?
704デフォルトの名無しさん:2011/08/11(木) 11:49:42.46
>>703
b()がエラー起きても問題ないようなものならb()内で例外処理しちゃえば?
705デフォルトの名無しさん:2011/08/11(木) 12:06:44.13
>>703
>こまめにtryするしかないですか?

はい、がんばってください。
706デフォルトの名無しさん:2011/08/11(木) 12:15:03.45
>>704
なるほど!
>>705
ありがとうございます
707デフォルトの名無しさん:2011/08/11(木) 12:40:44.05
>>703
b, c, dをリストに入れて
ループ内でpopしていけばいいんじゃない?

flis = [d, c, b]
while flis:
try:
flis.pop()()
except Exception:
print "error" # エラー時処理
708デフォルトの名無しさん:2011/08/11(木) 12:42:45.79
>>706
l(小文字のエル)一文字は使わないのがpython流
Lを使おう
709デフォルトの名無しさん:2011/08/11(木) 12:52:32.75
ほかの言語でもあんまl1文字の変数つかわなくね
710デフォルトの名無しさん:2011/08/11(木) 14:28:36.47
Python 2.7.1+ (Ubuntu 11.04)

sqlite3のSQL文実行を __init__() の中で使うと正しく結果を返さない事がある。
いきなりEOFが返る。エラーにはならない。
通常のメソッド内ならちゃんと結果を返してきている。

......コンストラクタの中で execute() しちゃダメなのかしらん。
711デフォルトの名無しさん:2011/08/11(木) 15:32:29.94
>>707
エラーが出てもループ抜けないのですか?勉強になりました

>>708
lineに変えときました
712デフォルトの名無しさん:2011/08/11(木) 16:25:00.71
>>711
そう、例外発生時はexceptブロックに飛ぶだけで
外側のループから抜けたりはしない。

# 以下、インデントを全角にして書き直しただけ。
def b():
 print "b"

def c():
 raise Exception("error c")

def d():
 print "d"

flis = [d, c, b]
while flis:
 try:
  flis.pop()()
 except Exception, e:
  print e

$ python test.py
b
error c
d
713691:2011/08/11(木) 17:05:16.48
いろいろアドバイス有難うございます
やってみます
714デフォルトの名無しさん:2011/08/11(木) 19:30:43.40
オライリーのpython本ってどうなの?
初心者向けにしては、分厚くて、難しすぎじゃない?
715デフォルトの名無しさん:2011/08/11(木) 20:15:25.50
>>714
はじパイのこと?
少し厚いが難しくはない。
1日50ページくらい読めば2週間ほどで読みきれる。プログラミング経験も不要。
ただし、飽きっぽい人は別の薄い本から入ってもいいかもね。
まあPythonと長く付き合っていくなら、はじパイは読んだほうがいいと思うぞ。

クックブック(和訳)はちょっと古い。
原著を読めるなら、10月に新しい版が出るのでそれを待て。
716デフォルトの名無しさん:2011/08/11(木) 20:21:15.08
初めてのPythonをはじパイと書くなと/Fさんがあれほど
717デフォルトの名無しさん:2011/08/12(金) 00:03:34.11
>>712
ああ なるほど 理解できました。

ご丁寧にありがとうございました。
718デフォルトの名無しさん:2011/08/12(金) 18:14:28.44
>>703
> self.massage.append("DataPutError:line" + str(self.l) + " elements" + str(self.e) + ":" + str(sys.exc_info()[0]))

この書き方はしない方が良い
719デフォルトの名無しさん:2011/08/12(金) 18:18:54.89
>>716
はじpyは

「初py」

「恥py」

の二種類あるから要注意
720デフォルトの名無しさん:2011/08/12(金) 18:42:33.05
>>718
理由と共に正解を書こうよ

文字列の連結を + でやるとO(n^2)の計算量がかかってしまう
join()で連結する方法だとO(n)の計算量で済む。
だから↓の方法でやった方がいい
msg = "".join(["DataPutError:line", str(self.l), " elements", str(self.e), ":", str(sys.exc_info()[0])]
self.massage.append(msg)
721デフォルトの名無しさん:2011/08/12(金) 18:46:47.27
状況によるけど、ちょっとした計算量のためにわざわざわかりにくい方法で
書くのはやめたほうがいいと思うよ。
722デフォルトの名無しさん:2011/08/12(金) 18:48:07.45
import cv
import tkFileDialog
import Tkinter

root = Tkinter.Tk()
root.withdraw()

cv.CaptureFromFile(tkFileDialog.askopenfilename(parent=root))

http://kougaku-navi.net/cv2010results/image/kaomoji.avi
こんな感じで読み込んだ動画ファイルを処理してまた書きこむにはどうればいいですかね?
ご指南よろしくお願いします
723デフォルトの名無しさん:2011/08/12(金) 18:51:22.58
俺は.join()の話じゃなくて、.format()の方がいいってことかと思った。
724デフォルトの名無しさん:2011/08/12(金) 19:09:08.13
こうけ?
msg = 'DataPutError:line {} elements {}: {}'.format(str(self.l), str(self.e), str(sys.exc_info()[0])])
self.massage.append(msg)
725デフォルトの名無しさん:2011/08/12(金) 19:12:52.77
>>720
よくjoinをつかった連結をみるけどそういった訳だったのか!なるほどなるほど
726デフォルトの名無しさん:2011/08/12(金) 19:44:39.73
>>724
わざわざstrかけなくてもよくね
727デフォルトの名無しさん:2011/08/12(金) 19:57:27.46
msg = 'DataPutError:line {} elements {}: {}'.format(self.l, self.e, sys.exc_info()[0])
self.massage.append(msg)
728デフォルトの名無しさん:2011/08/12(金) 20:00:12.33
>>722
びびったので教えません
729デフォルトの名無しさん:2011/08/12(金) 22:34:00.17
こわがりすぎー;-)
730デフォルトの名無しさん:2011/08/13(土) 09:07:48.43
>>728
ビビらないで教えてくれよ

フレーム事に配列で保存して一枚一枚処理かけるでいいの?
フレームの連結ってどうやんの?
731デフォルトの名無しさん:2011/08/13(土) 09:57:57.67
hashlib.sha1( "nanikakeyosi" ).hexdigest() についてですが
他のスレで
>hashlib そのまんま使ってるんだろう
って言われたんですけどなんか他の書き方ってあるんですか?
732デフォルトの名無しさん:2011/08/13(土) 10:15:10.17
hashlib.sha1を自分で実装しろってことじゃないか
その指摘がまっとうかはスレによる
733デフォルトの名無しさん:2011/08/13(土) 14:13:57.34
734デフォルトの名無しさん:2011/08/13(土) 19:34:56.53
>>730
そうだよ
save()を調べれ
735デフォルトの名無しさん:2011/08/14(日) 03:05:11.86
>>> arys = [1, 2, 3]
>>> 1 not in arys
False
>>> not 1 in arys
False
>>> 0 not in arys
True
>>> not 0 in arys
True

Python的にどっちかを推奨してたりしますか?
736デフォルトの名無しさん:2011/08/14(日) 07:21:25.50
あえてnot inというsyntax sugarを用意しているわけだから、
そちらを使ってほしいのではないかな。
737デフォルトの名無しさん:2011/08/14(日) 07:29:54.50
notかわいいよnot
738731:2011/08/14(日) 08:22:19.75
>733
そうです
それです
自分で実装?!
どういう事なんでしょう?!
739デフォルトの名無しさん:2011/08/14(日) 08:35:29.99
>>738
MMXやSSE、GPUなどを使うコードを自前で書いたほうが
標準ライブラリより速いって話でしょ
740デフォルトの名無しさん:2011/08/14(日) 20:56:50.36
classがよく解かりません。listやdictを使った関数(def)で済んでしまう
ように思えてしまいます。検索や本を読んだりしましたが、所謂作り方だけが
多く、なぜclassを使うのかがピンときません。作り方ではなくそれ以前の知識
を探しています。classでもdefでもどっちでも出来るケース、classでなければ
出来ないケース等の「比較・実用例・使い道・利点」を教えてください。
これが参考になるというURLや本でもいいです。お願いします。
741デフォルトの名無しさん:2011/08/14(日) 21:34:36.99
>>740
分からないなら無理に使う必要はないんじゃないか?
742デフォルトの名無しさん:2011/08/14(日) 21:35:00.13
「オブジェクト指向」でググる。

正直、必要ないなら無理に使わなくてもいいと思う。
743デフォルトの名無しさん:2011/08/14(日) 22:16:16.59
>>740
クラスを使うことでより再利用しやすいコードを書くことができる。
例えば、func(x) のような関数があった場合、xはどんな値をとるだろうか。
整数?文字列?リスト?そして初期値は?
そういう煩わしいことを気にしなければならないというのは煩わしい。
本当はxには整数が入り、初期値は1を望んでいる。ならば
class Klass:
 def __init__(self):
  self.x = 0
 def func(self):
  self.x *= 2
こうすれば、このコードを利用する側では、
klass = Klass()
klass.func()
のようにかけばいい。引数のことを気にする必要はない。
ところが、単なる関数だと
func(1)のように呼び出さなければならない。
もし知らずに
func(0)、あるいはfunc("spam")などと呼び出してしまったら、望んでいた動作をしない。
続く・・・
744743:2011/08/14(日) 22:19:10.00
例えば、あなたが適当なRPGを作っているとしよう。
クラスを使わないと
# 説明のため変数名はローマ字にしている(許して)
def mahou(character):
 # chieを基にダメージを計算(敵の能力は考慮しない)
 return damage
def kougeki(character):
 # kougekiを基にダメージを計算
 return damage
mahoutsukai = {'kougeki': 10, 'chie': 20} 
・・・以下同様にyusha, senshiを定義する。
攻撃は誰でも使えるが、
魔法を使えるのは、勇者、魔法使いだけ。
なので、mahou(senshi)のような呼び出しは、予期しない動作をする。
更に、レベル1のキャラクターをもう一人作成しようとしする場合、
def init_mahoutsukai():
 return params # パラメータ
のように別に関数を定義するか、
あるいは直接、辞書オブジェクトを作成するか。
どちらにせよ、そういうやり方はスマートではない。
745743:2011/08/14(日) 22:21:51.38
こういった問題を避けるために、クラスを使う。
class Character:
 def __init__(self):
  # パラメータの初期化
  self.kougeki = 1
  self.mahou = 1
 def kougeki(self):
  # 攻撃は誰でもできるよ。
class MahouCharacter(Character): # 魔法を使えるキャラクター
 def __init__(self):
  # パラメータの初期化
 def mahou(self):
  # 魔法は特定の職業に就かないと使えない。
class Senshi(Character):
 # Characterを継承しているから、攻撃のメソッドを定義しなくていい。
 def __init__(self):
  # パラメータの初期化
class Mahou(MahouCharacter):
 # MahouCharacterを継承しているから、攻撃、魔法のメソッドを定義しなくていい。
 def __init__(self):
  # hoge hoge
class Yusha(Character):
 # 魔法使いと同様
 def __init__(self):
  # hogehoge
 # 勇者だけが奇跡を起こせる。何でもあり。
 def make_miracle(self):
  # spam spam
746743:2011/08/14(日) 22:24:29.99
もしクラスを使わなかったら変数と関数が散在し、訳のわからないことになる。
更に、職業を増やしていった場合、どうなるか考えてほしい。

こういったことはクラスを使うメリットのほんの一部にすぎない。
だから、オブジェクト指向、デザインパターンなどのキーワードを頼りに
いろいろ勉強してみてくれ。

連投と長文スマソ
747743:2011/08/14(日) 22:26:30.06
>>743
間違えますた。
? self.x = 0
○ self.x = 1
748デフォルトの名無しさん:2011/08/14(日) 22:41:23.33
ドラクエの転職みたいなのはどうやるん?
749743:2011/08/14(日) 22:44:47.05
>>745
class Mahou → class Mahoutsukai
750743:2011/08/14(日) 22:54:22.30
>>748
ドラクエの転職システムをよく覚えてないんだが、
例えば職業をキャラクターから分離して

class Character:
 def __init__(self, job):
  # コンポジション
  self.job = job
 def change_job(self, job):
  # 転職
  self.job = job

class Job:
 # 職業

class Senshi(Job):
 # 戦士

class Mahoutsukai(Job):
 # 魔法使い

# キャラクターの生成
character = Character(Senshi())
# 転職
character.change_job(Mahoutsukai())
751デフォルトの名無しさん:2011/08/14(日) 23:01:18.22
オブジェクト、すなわちモノを作るならクラスを定義すべし。
752デフォルトの名無しさん:2011/08/14(日) 23:02:33.37
つまりclassはRPGのためのものなのだね…
753デフォルトの名無しさん:2011/08/14(日) 23:44:26.12
えっ
754デフォルトの名無しさん:2011/08/14(日) 23:53:22.98
あまりうまみはないと思いますがpythonにCのtypedefにあたるものはありますか
755743:2011/08/15(月) 00:04:34.63
追記
http://www.tiobe.com/content/paperinfo/tpci/index.html
によると、Web検索の頻度から推定される言語のシェア10位は
Java →OO
C →not OO
C++ → OO
PHP → not OO
C# → OO
Objective-C → OO
(Visual) Basic → not OO
Python → OO
Perl → OO(5.0から)
JavaScript → OO
※ OOはオブジェクト指向言語、not OOはそうでない言語
という具合であり、このことからオブジェクト指向が現代のメインストリームだということがはっきりとわかる。
そこから、なんとなく勉強する価値のあるものと思ってくれれば幸い。
おすすめの本は
『オブジェクト指向における再利用のためのデザインパターン』
『Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本』
『リファクタリング―プログラムの体質改善テクニック』
『Java言語で学ぶデザインパターン入門』
などなど。いずれもPython以外の言語で書かれている。
残念ながら、Pythonでオブジェクト指向についてきちんと説明している本を知らない。

>>754
>>> class SuperMan:
... pass
>>> SMan = SuperMan
>>> SMan
<class __main__.SuperMan at 0x0000000002A37B88>
>>752
たまたまゲームしてる時にスレを開いただけ・・・
756デフォルトの名無しさん:2011/08/15(月) 02:10:08.62
乙。参考になります。
757デフォルトの名無しさん:2011/08/15(月) 05:45:20.86
これからPythonを勉強していこうと思っています。
一応2.7で考えております。そこで、
Pythonを使うにあたりオススメのIDEを教えていただきたいです。
できるならば、VisualStudio C++のような補完機能のついたものであると尚助かります。

よろしくお願いします。
758デフォルトの名無しさん:2011/08/15(月) 09:09:23.37
>>744
>>745
パラメータとメソッド・関数で名前が重複していたorz
パラメータの方は
kougeki→chikara

Pythonでプログラミングをはじめた人がOOを学ぶにはどうしたらいいんだろう。
洋書でそれっぽいのはあるけど・・・(目次で判断しただけ)
http://amazon.com/dp/1849511268/
ポリモーフィズムとカプセル化みたいな基本的なことくらいは
説明してみようかな。


>>757
PyDevというEclipseのプラグインがメジャー。
導入方法は
http://masaya.w32.jp/?p=637
が新しい。
コード補完もしてくれる。
ただし、MSの作ってるVisual Studioに比べたら
ショボいのでがっかりしないように。
もしIronPython(PythonのC#実装)を使うなら、
IronPython Studioという選択肢もある。
これならVisual Studioで開発できる。
ただし、使ったことはないのでどういうことができるかは知らない。
あと、
PyScripterとかいうのもあったな。
759754:2011/08/15(月) 09:16:24.11
>>755
サンクス
typedefとして使うって意味はなさそうですな
760デフォルトの名無しさん:2011/08/15(月) 09:31:50.21
昨日からプログラムの勉強を始めたんだけど昨日まではコマンドプロントで「pyson」と打てばちゃんとpythonが起動してたんだけど
特に何か設定を変えた覚えもないのに「内部コマンドまたは外部コマンド 認識されていません〜」とエラーがでるようになった

Pathを確認しても間違ってないし他に何か確認するべき所があるのか教えて欲しい
761デフォルトの名無しさん:2011/08/15(月) 09:33:39.79
sonなー
762デフォルトの名無しさん:2011/08/15(月) 09:46:46.80
pysonでなくpythonと打って実行できればそれでおk
できなければpython.exeのあるディレクトリを環境変数PATHに追加する
環境変数PATHの中身はコマンドプロンプトでpathと打てば確認できる
763デフォルトの名無しさん:2011/08/15(月) 09:55:38.20
早い返答ありがとうpysonは打ち間違えです
環境変数PATHの最後に;c:\Python27を足してコマンドプロンプトでpathと入力して確認すると認識されていないみたいです
ちなみにPyton27自体はc:の下層にあることは確認しました何を言ってるのかわからないかもしれませんがおれも何が起きてるのかわからない・・・
昨日まではちゃんと起動できてたんです
764デフォルトの名無しさん:2011/08/15(月) 09:56:44.06
>>759
まあ全くないわけではない。
例えば、非常に大きなライブラリの場合、
名前の衝突を避けるためにクラス名が長くなりがち。
だから、呼び出し元で使うことはある。
>>755
は単なる代入だから
typedefと同様にスコープ内でのみ有効。
例えば、特定スコープ内で
mod.TooLongNameClass(1)
mod.TooLongNameClass(2) # それぞれif文の分岐によって呼び出され方が違う。
mod.TooLongNameClass(3)
とするより
TL = mod.TooLongNameClass
TL(1) # スコープ内だけで有効。そのため、後で名前の衝突を気にする必要はない。
・・・
としたほうがいいかもしれない。
しかし、そもそもクラス名が長くなるということがほとんどない。
なぜなら、Pythonの名前空間システムが優れているから。
(C++ではnamespaceを一々自分で書いていたもんなあ。
任意だから書かない人もいて困ったもんだ。)

>>760
WindowsのPathの設定はコマンドプロンプトを起動し直さないと反映されないので注意。
何か、別のアプリケーションをインストールした際に、勝手にPathを変更されたのかも。
とりあえず、もう一度よく見てくれ。
765デフォルトの名無しさん:2011/08/15(月) 10:01:09.99
>WindowsのPathの設定はコマンドプロンプトを起動し直さないと反映されないので注意。
マジごめんなさいPath書き直したあと起動し直すとちゃんとpythonの起動ができました半年ほど放置してたWindows Updateを昨日したのが原因なのかもありがとうございました
766デフォルトの名無しさん:2011/08/15(月) 10:52:24.20
>>739
有難うございます!
しらべてみます
767デフォルトの名無しさん:2011/08/15(月) 10:56:56.08
例えUnix系でもPATHとかを設定し直したなら
シェル起動し直すのに越したことはない
768740です:2011/08/15(月) 11:12:23.95
>>741 >>742 >無理して使う必要はない
そう思った事もあります。ですがどの初心者用入門書でもclassは出てくるし、
pythonを使いこなすにはclassの理解が必須・・・的な解説もよく見かけるので。
>>743
丁寧な解説ありがとうございます。一気には解からないので、コピペして
読んでみます。
769デフォルトの名無しさん:2011/08/15(月) 12:50:32.49
>>768
使い「こなす」なら知ってたいが
使うだけならクラス自作しなくてもそこそこ使えるのがPythonよ
770デフォルトの名無しさん:2011/08/15(月) 13:10:01.75
必要に迫られるまで、自前クラスなんて手を出さなくていいと思うけどね。
Pythonは言語組み込みの機能でも標準ライブラリでもクラスは当たり前のように
使われているから、意識せずとも自然とクラスに触れることになる。
771デフォルトの名無しさん:2011/08/15(月) 19:25:13.41
グローバルに使えて、書き換え(代入)が不可な定数って、どう書けばいいですか?
Cのconstみたいなイメージなんですが。
772デフォルトの名無しさん:2011/08/15(月) 19:58:01.82
pythonにそんなのないよ
773デフォルトの名無しさん:2011/08/15(月) 20:48:23.79
>>> True = False
>>> True
False
>>> True == False
True
774デフォルトの名無しさん:2011/08/15(月) 21:02:39.16
floatの
130050.023
→130,050.023
130050
→130,050
こんな変換がしたいのですが・・・・

よろしくお願いします。
775デフォルトの名無しさん:2011/08/15(月) 21:19:50.65
python は2.5です ><
776デフォルトの名無しさん:2011/08/15(月) 21:33:56.93
>>771
python 定数 でググルよろし
777デフォルトの名無しさん:2011/08/15(月) 22:22:49.14
>>774-775
2.5でもそう変わらないはず
http://d.hatena.ne.jp/itasuke/20090209

import locale
locale.setlocale(locale.LC_ALL, "")
print locale.format("%d", 130050, grouping=True)
print locale.format("%.3f", 130050.023, grouping=True)
778デフォルトの名無しさん:2011/08/15(月) 22:42:43.07
>>777
これでした!! ありがとうござしました!
779デフォルトの名無しさん:2011/08/16(火) 01:11:56.47
初心者です。
Pythonで作ったプログラムを動かすにはtxtファイルの拡張子を.pyに変えてコマンドプロントで起動だけでよいのでしょうか?
それともCみたいにvisual stadioとかソフトがいるのでしょうか?
780デフォルトの名無しさん:2011/08/16(火) 01:31:08.43
Python 3.0 から

>>> True = False
File "<stdin>", line 1
SyntaxError: assignment to keyword
781デフォルトの名無しさん:2011/08/16(火) 01:54:06.68
>>779
.txtから拡張子変えるだけでおk
というか付属のIDLE使ったらどう?
782デフォルトの名無しさん:2011/08/16(火) 23:29:01.51
djangoでできている有名なwebアプリってあります?
783デフォルトの名無しさん:2011/08/16(火) 23:38:34.73
PHPあきたからPythonでもやってみるかといろいろ調べたけど
もしかしてPythonってWebアプリあんまり力入れてないの?

なんか本見てもおまけ扱いっぽいし検索してもあんまり出てこないし
784デフォルトの名無しさん:2011/08/16(火) 23:48:58.41
PythonでWebアプリは変態扱いされるよ。
おとなしくPHP+MySQLにすべし
785デフォルトの名無しさん:2011/08/17(水) 00:00:48.72
>>783
腐るほど情報あるだろうが。
大体英語ドキュメントでなんとかなる人間が多いから、
日本語の情報が増えない。

まぁこれはこれで問題なんだろうけどな。日本のpythonユーザは排他的なんで。
786デフォルトの名無しさん:2011/08/17(水) 02:06:53.58
GoogleAppEngineなんぞはJavaかPythonなわけだが。
787デフォルトの名無しさん:2011/08/17(水) 02:33:55.87
GoogleAppEngineは大幅値上げでオワコン
しかも作ったアプリは他じゃ動かせないから悲惨
788デフォルトの名無しさん:2011/08/17(水) 02:53:11.45
ジェネレータつかって継続ベースで書けるWebアプリ環境ってある?
そういうのなら使ってみたい。
Zope2/ZODBの初期のころは感動していろいろいじってたのが懐かしい。
789デフォルトの名無しさん:2011/08/17(水) 04:09:35.85
まだまだPerl健在ですね
790デフォルトの名無しさん:2011/08/17(水) 13:49:23.16
791デフォルトの名無しさん:2011/08/17(水) 13:58:44.96
>>790
>>> html = lxml.html.fromstring(urllib.urlopen("http://www.asahi.com/paper/column.html").read())
>>> html.body
<Element body at 0x2f3ca98>
そんなことないようだけど・・・
792デフォルトの名無しさん:2011/08/17(水) 14:17:08.15
parserが警告を出してるけど
どういうこっちゃ。

>>> import lxml.html
>>> doc = lxml.html.parse('http://www.asahi.com/paper/column.html')
>>> doc.parser.error_log
http://www.asahi.com/paper/column.html:5:21:ERROR:HTML:ERR_INVALID_ENCODING: Input is not proper UTF-8, indicate encoding !
<string>:0:0:FATAL:I18N:I18N_CONV_FAILED: input conversion failed due to input error, bytes 0xAB 0xC6 0xFC 0xBF
<string>:0:0:FATAL:I18N:I18N_CONV_FAILED: input conversion failed due to input error, bytes 0xAB 0xC6 0xFC 0xBF
<string>:0:0:ERROR:IO:IO_ENCODER: encoder error
793デフォルトの名無しさん:2011/08/17(水) 14:48:28.69
>>792
エンコードがおかしいって言ってる。
http://lxml.de/parsing.html#parser-options

>>> parser = lxml.html.HTMLParser(encoding="euc-jp")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python\Python27\lib\site-packages\lxml-2.3-py2.7-win-amd64.egg\lxml\h
tml\__init__.py", line 1534, in __init__
super(HTMLParser, self).__init__(**kwargs)
File "parser.pxi", line 1418, in lxml.etree.HTMLParser.__init__ (src/lxml/lxml
.etree.c:78533)
File "parser.pxi", line 738, in lxml.etree._BaseParser.__init__ (src/lxml/lxml
.etree.c:73404)
LookupError: unknown encoding: 'euc-jp'

どうやらeuc-jpはダメみたいだね。
パーサに渡す前に文字コードの処理は自分でしておく必要がありそう。
794デフォルトの名無しさん:2011/08/17(水) 15:20:28.66
UTF-8でURIエンコードした文字列をもとの文字列に戻すのはどんな感じで行えばいいのでしょうか?
795デフォルトの名無しさん:2011/08/17(水) 15:28:25.29
>>794
>>> quoted = urllib.quote(u"ほげ".encode("utf-8"))
>>> print quoted
%E3%81%BB%E3%81%92
>>> unquoted = urllib.unquote(quoted)
>>> unquoted
'\xe3\x81\xbb\xe3\x81\x92'
>>> print unquoted.decode("utf-8")
ほげ
796デフォルトの名無しさん:2011/08/17(水) 15:31:12.52
>>795
ありがとうございます!
797デフォルトの名無しさん:2011/08/17(水) 18:16:13.64
失礼します。
webapp.RequestHandlerを継承したクラスAがあります。
このクラスはwebapp.RequestHandlerの継承と変数の初期化__init__だけがあります。
from google.appengine.ext import webapp

class A(webapp.RequestHandler):

  def __init__(self):
    self.tmpl_val = {}
    self.tmpl_val['error_msg'] = ''
    self.auth = False
    self.tmpl_val['name'] = self.request.get('name')

クラスAを継承したクラスBを定義します。

class B(A):
  def get(self):
    self.any=self.request.get("aney")

このクラスBでself.request.get("***")を呼び出すと
'B' object has no attribute 'request'と言われます。
Bの中でAと同じ__init__を書くとなぜかself.request.get("***")が呼び出せます。
そもそも初期化関数を上書きしたら継承の目的が達せられません。
どうしたらいいのでしょうか?
798デフォルトの名無しさん:2011/08/17(水) 18:19:08.61
×このクラスBでself.request.get("***")を呼び出すと
◯このクラスBでself..get()を呼び出すと

×Bの中でAと同じ__init__を書くとなぜかself.request.get("***")が呼び出せます。
◯Bの中でAと同じ__init__を書くとなぜかself.get("***")が呼び出せます。
799デフォルトの名無しさん:2011/08/17(水) 18:40:11.82
>>797
>そもそも初期化関数を上書きしたら継承の目的が達せられません。
そんなことはない。
継承先の初期化メソッド内で継承元の初期化メソッドを呼べばいい。

>>> class A(object):
...  def __init__(self):
...    print "init A"
>>> A()
init A
>>> class B(A):
...  def __init__(self):
...    super(B, self).__init__()
...    print "init B"
>>> B()
init A
init B

ただし、GAE固有の問題については知らない。
800デフォルトの名無しさん:2011/08/17(水) 18:59:01.50
>>797-798
RequestHandlerに__init__は存在しない
__init__が実行された時点ではself.requestは存在しないので
(インスタンスが作成された後にRequestHandler.initializeが呼び出されて
self.requestとself.responseが初期化される)
ほかの方法を考えろ
801デフォルトの名無しさん:2011/08/17(水) 22:03:54.65
>>799
ごもっともです。

>>800
そういうことですか。
簡単ではなさそうなので継承を使うのはやめます。

ありがとうございました。
802デフォルトの名無しさん:2011/08/18(木) 03:37:23.40
python標準のsqliteで最近のfirefoxのクッキーとかのファイル読み込めないな。
バージョン何使ってるんだろ
803デフォルトの名無しさん:2011/08/18(木) 11:22:56.77
Error: file is encrypted or is not a database

バージョンの違いじゃなくて暗号化されてるからだな
804デフォルトの名無しさん:2011/08/18(木) 12:08:50.10
>>792
どうもContent-Typeがないのが原因らしい
content-typeだけだと駄目っぽい

http://www.asahi.com/paper/editorial20110813.html
Content-Typeがある方は取れた

805デフォルトの名無しさん:2011/08/18(木) 12:14:24.48
>>802-803
Python 3.2.1 の sqlite3 なら読める。
試しに Python 2.7.2 同梱の sqlite3.dll を最新にしてみたら読めるようになったから
やっぱりバージョンの違いなんじゃないか。
806804:2011/08/18(木) 12:17:37.83
勘違いしてた
Content-Typeの方はEUC-JPだから問題がなかった。
○EUC-JP
☓euc-jp
pythonだとどっちでもOKなんだけどなんでeuc-jpだと駄目なんだろうか?

807デフォルトの名無しさん:2011/08/18(木) 12:21:14.62
lxmlのFAQにそんなこと書いてあったような
808デフォルトの名無しさん:2011/08/18(木) 12:32:51.88
>>802
重要なのはsqlite3のバージョンでしょ
まあ、Pythonのバージョンが違えばsqlite3のバージョンも違うだろうから、
Pythonのバージョンが重要でも間違いではないと思うけどさ。

sqlite3のバージョンを色々変えて試してみれば?
809デフォルトの名無しさん:2011/08/18(木) 13:07:43.44
>>791
lxmlのバージョンいくつ?
euc-jpがNGなんでエラーが起きない原因はバージョン違いしか考えられないんだけど
810デフォルトの名無しさん:2011/08/18(木) 13:28:59.63
>>805
なるほどありがとう
同じFirefoxでも別のurlclassifier3.sqliteとかなら読めたんだけどね
811デフォルトの名無しさん:2011/08/18(木) 14:16:44.32
>>810
これじゃまいか
http://trac.edgewall.org/wiki/PySqlite#DatabaseError:fileisencryptedorisnotadatabase

urlclassfier3.sqliteはWALを使ってないからsqliteが古くても読みこめたとか
sqlite3.sqlite_versionの値はいくつ?
812デフォルトの名無しさん:2011/08/18(木) 17:25:36.35
codecs.open のモードで Python 2.5 までは 'U' が使えたけれど、2.6 からバイナリのみになった?

2.6 以上で改行を自動判別するには codecs.open(fname, 'U', 'utf-8') が使えないので
codecs.getreader('utf-8')(open(fname, 'U')) とする必要がある(読みづらい……)?

それとももっと簡単な方法があるんでしょうか。

813デフォルトの名無しさん:2011/08/18(木) 19:47:31.31
どうみても後者の方が簡単です
ほんとうにありがとうございました
814デフォルトの名無しさん:2011/08/19(金) 15:43:42.72
文字を除去する時、下記のような書き方をしています。
趣旨は、1つの文字列から複数種の不要文字を一度に除去する、です。
なんかかっこ悪いので、スマート&パイソンらしい書き方を教えてください。

strings = '「2011年・8月」'
remove1 = '「'
remove2 = '」'
remove3 = '・'
newstrings = strings.replace(remove1, '').replace(remove2, '').replace(remove3, '')
815デフォルトの名無しさん:2011/08/19(金) 16:02:30.03
「除去」じゃなくてもいいんじゃないの?

import re
title = '「2011年・8月」'
removes = ('「' , '」' , '・')
string = title
for remove in removes:
newstring = string.replace(remove, '')
string = newstring
print('newstring =', newstring)

year_month = re.findall(r'([0-9]+年).*([0-9]+月)', title)[0]
print(''.join(year_month))
816デフォルトの名無しさん:2011/08/19(金) 16:03:36.28
>>814
正規表現でsubすれば?
817デフォルトの名無しさん:2011/08/19(金) 16:08:28.56
re.sub('[「」・]', '', s) か
818デフォルトの名無しさん:2011/08/19(金) 16:12:31.11
試してないけど、

'「2011年・8月」'.strip('「・」')

でどうか。

もしくは、正規表現かな。
819デフォルトの名無しさん:2011/08/19(金) 16:18:04.51
「除去」版
import re
title = '「2011年・8月」'
print(re.sub(r'[「・」]', r'', title))
820814:2011/08/19(金) 16:48:52.64
>>815 >>816 >>817 >>819
まだ「正規表現」までいっていない初心者なので見ても?な状態ですが、
「正規表現」を使いなさい、と言われている事は判りました。
今後の書き直し時の参考させていただきます。
ありがとうございました。
821818:2011/08/19(金) 17:00:14.05
俺は、無視かよ… orz
822デフォルトの名無しさん:2011/08/19(金) 17:26:08.30
試せばわかるよ
823814 820:2011/08/19(金) 17:32:55.27
>>818 >>821
無視じゃなくて単純な書き抜けです。正規表現というヒントをいただいています。
すいませんでした。
824818:2011/08/19(金) 17:47:33.61
いや、どちらかというと strip( ) の方がいいと思うが、いま試せないのが残念。
825デフォルトの名無しさん:2011/08/19(金) 20:29:04.13
pythonで書かれたXBMC.radiko 0.0.4公開です。radikoを聞きながらツイッターができます。
また画面上のQRコードで携帯からツイートすることも可能です。
http://xbmc.inpane.com/main/heavy_user/script.php#radiko

もっといろいろできそうですが、みなさんもXBMCとpythonで何か作ってみませんか?


826デフォルトの名無しさん:2011/08/19(金) 20:31:08.37
お断りします
827デフォルトの名無しさん:2011/08/19(金) 20:33:39.06
さびしいのぉ
828デフォルトの名無しさん:2011/08/19(金) 20:47:56.57
strings = '「2011年・8月」'
for c in '「・」':
  strings = strings.replace(c, '')
829デフォルトの名無しさん:2011/08/19(金) 21:00:37.59
>>814-819で計算量的に優れているのはどの方法なの?
removesが10個20個に増えた場合に計算量がどうなるのか知りたい
830デフォルトの名無しさん:2011/08/19(金) 21:24:09.54
>>825
すごいねこれ。
831デフォルトの名無しさん:2011/08/19(金) 21:48:31.01
>>> print u'「2011年・8月」'.translate(dict.fromkeys(map(ord, u"「」・")))
2011年8月
832デフォルトの名無しさん:2011/08/20(土) 05:11:32.35
ファイルの操作で,,next()の逆の操作ってできますか?
for文でファイルを一文一文回しているときに,一つ前の文に戻りたいのですが
833デフォルトの名無しさん:2011/08/20(土) 06:07:11.61
>>832
そういうコンテナはもうありそうだけど、
単純にnext()を乗っとって最後のだけ保存しとくようなクラスでくるめば?
834デフォルトの名無しさん:2011/08/20(土) 07:02:21.45
ひとつ戻るだけでいいのか?
835 忍法帖【Lv=40,xxxPT】 :2011/08/20(土) 13:00:21.56
>>832
seek
836デフォルトの名無しさん:2011/08/20(土) 13:45:35.50
下記の様な入れ子の辞書を使っています。
Dic = {}
Dic['KEY1'] = {'A':'01', 'B':'02', 'C':'03'}}
Dic['KEY2'] = {'A':'24', 'B':'25', 'C':'26'}}
num = Dic['KEY1']['A'] # num = '01'

{'KEY1':{'A':'01', 'B':'02', 'C':'03'}}
上記の様な構造になっていると思うのですが、
「Aの値」とか「Bの値」でソート(sorted)する
キーの書き方を教えてください。
837836:2011/08/20(土) 13:49:12.08
Dic['KEY1']、Dic['KEY2']の行の最後に、余計な } がついちゃってました。
838デフォルトの名無しさん:2011/08/20(土) 13:58:39.08
sorted(Dic.keys(), key=lambda k:Dic[k]['A'])
839デフォルトの名無しさん:2011/08/20(土) 14:15:39.11
sorted(Dic.values(), key=lambda x: x['A'])

こっちかな?
840デフォルトの名無しさん:2011/08/20(土) 14:44:25.07
**kwargsをOrderedDictかitemsで取り出せるととても嬉しい
841836:2011/08/20(土) 15:12:16.96
>>838
>>839
ありがとうございます。出掛ける時間なので、後で試してみます。
842デフォルトの名無しさん:2011/08/20(土) 22:46:47.90
listのlistを初期化するのに
a = [[] for i in xrange(n)]
とやってるのですが、無駄なiとか出てきてしまうので
もう少しかっこいい方法ってないでしょうか。
843デフォルトの名無しさん:2011/08/20(土) 23:50:02.92
[[]] * n
844デフォルトの名無しさん:2011/08/21(日) 00:04:08.27

-1  [[] for _ in xrange(n)]
845デフォルトの名無しさん:2011/08/21(日) 00:21:18.82
>>843
それは、全ての要素で同じ[]を参照するようになってしまい
独立に値を保持できないようです。
>>844
パターンマッチの捨て駒的"_"が使えるのですね。初めて知りました。
ありがとうございます。
846デフォルトの名無しさん:2011/08/21(日) 13:12:21.05
Python学ぼうと思って「みんなのPython」ってのを買ってパラパラ読んでたんだが
読んだ人います?
129Pの練習問題で「10から100までの最小公倍数をだせ」って問題があった。
この解答あきらかにおかしくない??
847デフォルトの名無しさん:2011/08/21(日) 13:30:10.74
面倒でも問題と回答引用したほうがいいと思うよ
848デフォルトの名無しさん:2011/08/21(日) 14:59:17.31
>>846
正誤表っての見つけた
ttp://yaplog.jp/python26/

129に怪し気なコメント
849デフォルトの名無しさん:2011/08/21(日) 16:42:00.56
http://coreblog.org/ats/minpy
※2009年4月11日より,内容を大幅に改訂して最新のPythonに準拠した「みんなのPython改訂版」が発売されています。
http://iiyu.asablo.jp/blog/2011/04/11/5799545

著者blog
http://coreblog.org/ats
http://coreblog.org/ats/the-4th-print-of-minpy-2nd

という訳で基地外乙
850デフォルトの名無しさん:2011/08/21(日) 17:02:14.12
自分のじゃない本棚の古いminpy引っ張りだして来て、
文句言うてたということでおけ
851デフォルトの名無しさん:2011/08/21(日) 17:48:27.09
古いminpy()には練習問題はついておりますん
852デフォルトの名無しさん:2011/08/21(日) 19:48:42.70
i = "1."
for l in range(309):
 n = 9
 while( str(float(i+str(n)+"e+308")) == "inf"):
  n -= 1
 i += str(n)
853デフォルトの名無しさん:2011/08/21(日) 20:00:05.58
>>852
キモいコードだな
854デフォルトの名無しさん:2011/08/23(火) 07:09:04.51
おはようございます

今python勉強してるんですが、ファイルブラウザを作りたいんですが
何を学んだらいいんでしょうか?pythonが初プログラミングです。



855デフォルトの名無しさん:2011/08/23(火) 08:08:55.20
osモジュールのマニュアルを読む
あとはインターフェイス次第
コマンドライン上のファイラなら、なんたらcurses系とか
GUIならtkとかwxとかね
856デフォルトの名無しさん:2011/08/23(火) 08:24:38.83
>>855
回答ありがとうございます。
GUIやりたいんですがGUIでググッたらGUIビルダなるものがあるって読んだ
んですがやっぱ皆さん使ってるものなんですか?

あとデーターベース(←それ自体良く判ってないですが)の知識っていうのは
必要でしょうか?
857デフォルトの名無しさん:2011/08/23(火) 10:42:38.61
>>842
かっこいいかどうかは分からないが
map(list,[[]]*3)
858デフォルトの名無しさん:2011/08/23(火) 11:49:18.67
>>856
基本的にはDBは要らんだろうとは思うが…
ファイルシステム全体の情報を蓄積するとかしたいなら別だけど

GUIビルダって、何処かのIDEを使うのか?
使っても構わんし、使わなくてもコードで書けるよ
と言うかコードでいっぺん書いてみたほうが理解出来るかと
859デフォルトの名無しさん:2011/08/23(火) 12:31:02.55
漢は黙ってpyQt4
860デフォルトの名無しさん:2011/08/23(火) 13:04:26.30
>>846
よくわからんがやってみたので添削おながいしまつ

from itertools import ifilter, count

def primes():
g = count(2)
while True:
p = g.next()
yield p
g = ifilter(lambda n, p=p: n % p, g)

def lcm(lst):
e = {}
for n in lst:
m = n
for p in primes():
c = 0
while True:
if m % p: break
else: m /= p; c += 1
if c > e.setdefault(p, 0): e[p] = c
if p ** 2 > n: break
print e
a = 1
for k in e: a *= (k ** e[k])
print a

if __name__ == '__main__':
lcm(xrange(10, 101))
861デフォルトの名無しさん:2011/08/23(火) 13:06:04.61
インデント治しました

from itertools import ifilter, count

def primes():
 g = count(2)
 while True:
  p = g.next()
  yield p
  g = ifilter(lambda n, p=p: n % p, g)

def lcm(lst):
 e = {}
 for n in lst:
  m = n
  for p in primes():
   c = 0
   while True:
    if m % p: break
    else: m /= p; c += 1
   if c > e.setdefault(p, 0): e[p] = c
   if p ** 2 > n: break
 print e
 a = 1
 for k in e: a *= (k ** e[k])
 print a

if __name__ == '__main__':
 lcm(xrange(10, 101))
862デフォルトの名無しさん:2011/08/23(火) 13:10:55.76
全然おかしいだろ
863デフォルトの名無しさん:2011/08/23(火) 13:54:49.67
>>858
今、wxPythonをつついてみました。ビルダてのが無くてもなんとかなりそうなんで
勉強してとりあえずガワから作ってみます。
>>859
ぐぐってみたら情報少なっ!だったんで軟派な自分はwxPythonで様子見ます。

ありがとうございました。

864デフォルトの名無しさん:2011/08/23(火) 15:13:41.79
>>501
site-packages/Sphinx(省略).egg/sphinx/writers/latex.py
にパッチを当てると幸せになれる予感

class ExtBabel(Babel):の以下の1行を
_ISO639_TO_BABEL = Babel._ISO639_TO_BABEL.copy()
  ↓
_ISO639_TO_BABEL = Babel.language_codes
と書き換えると幸運が訪れそう

ちなみに今日のあなたのラッキーカラーはビリジアン
865デフォルトの名無しさん:2011/08/23(火) 18:59:19.23
>>860-861
def lcm(lst):
  print lst
  e = {}
  for p in primes():
    s = 0
    for i in xrange(len(lst)):
      if lst[i] <= 1: s += 1
      if p > lst[i]: continue
      c = 0
      while True:
        if lst[i] % p: break
        else: lst[i] /= p; c += 1
      if c > e.setdefault(p, 0): e[p] = c
    if s >= len(lst): break
  print e
  a = 1
  for k in e: a *= (k ** e[k])
  print a

if __name__ == '__main__':
  lcm(list(xrange(10, 101)))
866デフォルトの名無しさん:2011/08/23(火) 19:03:24.42
pythonで画像生成して、パラパラ漫画っぽくウェブブラウザか何かに表示したい。
クライアント側でAJAX使わずに、サーバーサイドからpushするように作れるかしら?
867866:2011/08/23(火) 19:07:01.17
画像生成っていうか、CWDに落ちてる画像を(n秒ごとに)逐次表示していくようなhttp.serverができればいい。
具体的なコードじゃなくてもいいので、方針のヒントください。
868デフォルトの名無しさん:2011/08/23(火) 19:08:14.43
>ajax
869866:2011/08/23(火) 19:14:51.89
>>868
ajaxだと、クライアントコードをごたごた書かないといかんくせに、
CWDの情報をサーバから教えてあげないといけないのでスマートじゃないなぁと・・・・。

import webbrowser as web
web.open("http://localhost:8000/x.png")
が近いかなぁと思ったけど、macでテストしたときに同じウィンドウに表示してくれず、
新しいウィンドウが開くので断念。
あと、巨大画像なので、可能な限り高速に表示できる方法を求めています。
870866:2011/08/23(火) 19:16:02.32
必ずしもブラウザ表示ではなくても、どうせローカルで使うのでクロスプラットフォームならいいです。
871デフォルトの名無しさん:2011/08/23(火) 19:24:25.75
馬鹿には無理
872866:2011/08/23(火) 19:25:16.58
TKinterかなぁ・・・
そもそもの問題はmatplotlibのアニメーションが動かないことでして・・・。
873デフォルトの名無しさん:2011/08/23(火) 19:28:00.09
>>872
別スレッドでTkinter立てると動くよ
874866:2011/08/23(火) 19:38:15.50
>>873
kwsk
サンプルこれなんですが・・・
ttp://matplotlib.sourceforge.net/examples/animation/simple_anim_tkagg.html
これ自体は動くのですが、ax.plotじゃなくてax.quiverにしたい。
ところが、set_UVCというメソッドしか用意されてないので、(矢印の元位置を動かせないので)
いちど描いた情報をax.clearか何かで消して、再描画したい。
こんな方針でやっているのですが、どうもそのスレッド関連でうまくいかない、というところです。
875デフォルトの名無しさん:2011/08/23(火) 19:56:17.49
OSは何をお使いでございますれば?
876866:2011/08/23(火) 20:00:25.26
とりあえずlinuxとmacで同じコードが使えれば。
877デフォルトの名無しさん:2011/08/23(火) 20:05:20.60
それは残念
878デフォルトの名無しさん:2011/08/23(火) 20:13:35.66
久々にC++使ったんだが、メンバにアクセスするときに this->xxx って書くと妙に落ち着く。
879デフォルトの名無しさん:2011/08/23(火) 20:15:52.53
Python3.1で以下の結果になりますが、

>>> issubclass(type, object)
True
>>> isinstance(type, object)
True
>>> issubclass(object, type)
False
>>> isinstance(object, type)
True
>>>
issubclassの結果は納得なのですが、isinstanceの結果が分かりません。
objectを実体化したモノがtypeで、typeを実体化したモノがobject??
教えてください。
880デフォルトの名無しさん:2011/08/23(火) 20:40:21.06
>>879
isinstance()は直接の生成元に限らず継承構造を辿る。
例えば数値はオブジェクト型のインスタンスか、と問えば真を返す。
何故なら数値型はオブジェクト型を継承していて、数値はオブジェクトなんだ。

さて、各々のクラスは「クラス型」のインスタンス、という扱いになってる。
そしてクラス型はオブジェクト型を継承している。
クラスはオブジェクト型を継承したクラス型のインスタンス…ということは
クラス自身もまたオブジェクトなんだよ。
881デフォルトの名無しさん:2011/08/23(火) 20:44:27.03
objectとかtypeとか、他にもlistとかstrとかの「型そのもの」を表す変数に入ってるのは当然typeタイプのインスタンスだよね?
なのでisinstance(object, type)とかisinstance(type, type)とかisinstance(list, type)とかは当然True
一方でtypeタイプはobjectを継承してるわけでisinstance(object, object)とかisinstance(type, object)とかもTrueになる
882デフォルトの名無しさん:2011/08/23(火) 21:54:28.34
>>867
<meta http-equiv="refresh"
883デフォルトの名無しさん:2011/08/23(火) 22:32:59.46
いま東京の女子高生の間でPython使える男がカッコイイ!って話題騒然らしいね
884デフォルトの名無しさん:2011/08/23(火) 22:54:10.62
おれもそれ聞いたことある
知的でかっこいいんだって
885デフォルトの名無しさん:2011/08/23(火) 22:59:45.68
>>880>>881
回答ありがとうございました。以下のイメージなわけですね。


     instance   ┏━━━┓
     ┌─────→┃object┃
     │      ┗━━━┛
     │        △
     │        ┃
     │  ┏━━━━━╋━━━━┳━━━━━━┓
     │  ┃     ┃    ┃      ┃
     │┏━━━┓ ┏━━━┓┏━━━┓    ┃
     └┃type ┃ ┃list ┃┃str┃・・・全てのクラス
      ┗━━━┛ ┗━━━┛┗━━━┛    ↑
     (メタクラス)  ↑    ↑      │
        │     │    │      │
        └─────┴────┴──────┘
              instance
886デフォルトの名無しさん:2011/08/23(火) 23:00:27.07
まあ、rubyよりは語学力有る奴多そうではあるが。。。
887デフォルトの名無しさん:2011/08/24(水) 01:47:59.39
>>874
th = None

def start_animate():
  global th
  th = threading.Thread(target=animate)
  th.daemon = True
  th.start()

win = fig.canvas.manager.window
win.after(100, start_animate)
plt.show()
888デフォルトの名無しさん:2011/08/24(水) 02:00:21.99
>>880-881みたいな言語仕様覚えてて凄いなぁ・・・
クラスもろくに使わない自分じゃまだまだPythonは使いこなせてないなと実感
889デフォルトの名無しさん:2011/08/24(水) 04:02:19.07
おっぱいぱいぱいおっぱいそん
890デフォルトの名無しさん:2011/08/24(水) 21:06:02.49
2.7.1 windowsXP です。
windowsの場合、ロケールにja_JPとかjaが通用しないようで、Japanese_Japan.932
の様にになっていました。
pythonがサポートしているロケール全てが掲載されている本とかURLが
あったら教えてください。
891デフォルトの名無しさん:2011/08/24(水) 21:56:24.83
>>890
どこでどうやってロケールを使いたいのか具体的(ライブラリや関数・メソッド名等)にどうぞ
892890:2011/08/24(水) 22:32:47.27
>どこでどうやってロケールを使いたいのか
使いたい訳ではないのです。知識として知りたいのです。
公式リファレンスにも使用可能なロケール一覧(ロケール名)みたいな
ものが見あたらなかったので、どうやって知ればいいのかと。
数値3桁カンマ区切りを調べていたら、locale.setlocaleが出てきて
ja_JPとかjaも出てきたのですが、試してもうまくいかず。
空文字にしたら、Japanese_Japan.932が表示された次第でして・・・。
import locale
locale.setlocale(locale.LC_NUMERIC,'')
893デフォルトの名無しさん:2011/08/24(水) 23:23:02.10
locale.pyのなかをみてみればなんかかいてありそう
894デフォルトの名無しさん:2011/08/25(木) 14:27:11.40
895デフォルトの名無しさん:2011/08/26(金) 13:49:47.34
テスト
896デフォルトの名無しさん:2011/08/27(土) 04:27:07.45
WindowsとMacで動くGUIアプリを作るのに
Tkinter を使っています

Windows版はpy2exe
Mac版は.appフォルダにスクリプト本体を突っ込むことでOS内蔵のPythonを使って普通のソフトのように実行可能なのでそうしてます

ただ MacOS10.7Lion(Python 2.7.2?)で
tkFileDialogが上手く動いていないようです
Python 2.5から2.7の間で Tkinterまわりの変更はあったのでしょうか?
Lionの環境は手元にないですし、軽く調べた程度では分らなかったので
対策が分ればお願いしたいです

from tkFileDialog import *でインポートして
askopenfilename()で呼び出してます
897デフォルトの名無しさん:2011/08/27(土) 05:18:34.89
mechanizeを使ってyahooにログインしたいのですが
文字認証モードに移ってしまいうまく入れません

通常のブラウザで何度も間違えた場合と違う画面なので
おそらくIDやパスワードの入力ミスではないと思います

br = mechanize.Browser()

br.open(login_url)

#ログイン処理
br.select_form(nr = 0)
br['login'] = username
br['passwd'] = password
br.submit()

print br.title() #文字認証を行います。 - Yahoo! JAPAN
となってしまいます

この方法だと何か問題があるのでしょうか?
898デフォルトの名無しさん:2011/08/27(土) 05:43:49.73
>>897
>>> br = mechanize.Browser()
>>> br.addheaders
[('User-agent', 'Python-urllib/2.7')]

UAで弾かれているのでは?
899デフォルトの名無しさん:2011/08/27(土) 06:04:19.92
>>896
どんな風に上手く動いていないの?
900デフォルトの名無しさん:2011/08/27(土) 09:59:06.31
>>896
Python 2.5から2.7の間で Tkinterまわりの変更はあったのです
901デフォルトの名無しさん:2011/08/27(土) 12:32:50.43
>>898
すみません
br.addheaders = [('User-agent','Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1)Gecko/2008071615Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
で設定してみましたがダメでした
902898:2011/08/27(土) 12:57:52.06
>>901
fxで試してみたけど、
JavaScript切ってるとCAPCHAのページにリダイレクトされるみたい。

この辺が参考になるかも
http://pg-memo.blogspot.com/2011/06/yahoo_16.html
903896:2011/08/27(土) 13:14:52.56
>>899
ファイル選択ダイアログ自体が開いかないようです

エラーを確認したくても
ターミナル操作等は全くしないような一般ユーザーが相手なのと
機能を実現するためにPython/Tkinterを使ったものの プログラミングは素人みたいなものなので
まずは何か変わっていないか伺った次第です
904デフォルトの名無しさん:2011/08/27(土) 13:24:28.91
そもそもオリジナルのTcl/Tk自体が
Lionに対応してるの……?
905デフォルトの名無しさん:2011/08/27(土) 15:51:49.26
>>902
ありがとうございます!
ブログ大変参考になりました.

ところで,ここで設定する必要があるのは".albatross”の値だけですよね?

br[".albatross"] = ""

をread onlyじゃなくしてから,値を設定すればいいと思ったのですが
ここには”dD1kUkhXT0Imc2s9N3ZkOUtYalp2OUtZR2h5ai50OFFfMFN3ZE9rLQ==”が入っていて,
どのよな値を入れればいいのかがわからないです.
906デフォルトの名無しさん:2011/08/27(土) 19:46:15.40
クラス変数のみで構成されたクラスと、singoletonを実装したクラスは
外部から見た働きは基本的に等価とみなしていいのでしょうか?

また、違いがある場合このようなケースではどちらを利用するべきといった点はあるでしょうか?
907デフォルトの名無しさん:2011/08/27(土) 20:38:32.00
>>903
Lion持ってるので896のコード試してみたけどちゃんとダイアログでたよ。
バージョンは公式から入れた2.7.2です

Mac版は.appフォルダに〜ってのは正しいの?py2app使わないとダメな気がする
908デフォルトの名無しさん:2011/08/27(土) 20:45:54.76
>>673
progressbar で ETA() を widgets に入れてるときに
update() を一度も呼ばずに finish() すると
ETA() の部分に Time (経過時間) が表示されるのですが
一度でも update() を呼ぶと
ETA() の部分には文字通り ETA (残り時間) が表示されます
ここまではこれで良いのですが
finish() したときに Time 表示にならず ETA: 00:00:00 になってしまいます
出来れば途中は ETA 表示でも最後に Time 表示になって欲しいのですが
何か良い方法はありますか?
909デフォルトの名無しさん:2011/08/28(日) 16:22:03.21
リスト内包表記で[i for i in range(3) if i ==1] ってな表記はできるんですがelseの時の動作は定義できないんでしょうか?
910デフォルトの名無しさん:2011/08/28(日) 17:31:30.44
def do_something(x):
if x==1:
return x
else:
pass

[do_something(i) for i in range(3)]
911デフォルトの名無しさん:2011/08/28(日) 18:07:55.41
>>910
言われてみるとそんなやり方がありますねw
ありがとうございました
912デフォルトの名無しさん:2011/08/28(日) 19:27:00.21
>>> ['hoge' if x % 2 == 0 else 'fuga' for x in range(3)]
['hoge', 'fuga', 'hoge']
913デフォルトの名無しさん:2011/08/28(日) 21:00:31.70
>>912
こんなやり方があったんですね。
こちらのほうがスマートな感じで良いですね、どうもありがとうございました
914デフォルトの名無しさん:2011/08/29(月) 14:58:14.18
ubuntu11.04でPython2.7を使っています。デフォルトエンコーディングをsitecustomize.pyでutf-8に変えれたんですが
IDLEで使ってみると文字化けします。

>>> jum = u"鈴木"
>>> print jum
←ここで文字化けする
>>> jum = u"nhkてれび"
>>> len(jum)
12 ←これで合ってるのか?6じゃないのか

みんpyを見ながら進めています。よろしくお願いします。
915デフォルトの名無しさん:2011/08/29(月) 15:41:00.19
日本語でのdjango解説してるサイトなり本なりでオススメある?
916デフォルトの名無しさん:2011/08/29(月) 15:51:19.39
sitecustomize.py禁止
917デフォルトの名無しさん:2011/08/29(月) 15:53:53.39
>>914
reload(sys)でやると幸せになれるかも
918デフォルトの名無しさん:2011/08/29(月) 16:02:47.83
>>914
うちは 9 になった
919デフォルトの名無しさん:2011/08/29(月) 16:43:00.98
920デフォルトの名無しさん:2011/08/29(月) 17:38:49.06
Pythonでunixtime -> datetime の変換はどんな風にできるのでしょうか?
921デフォルトの名無しさん:2011/08/29(月) 17:52:34.81
>>920
そのくらい自分でググれよ
922914:2011/08/29(月) 18:03:19.03
>>917
reload(sys)でも変わらなかった
>>919
バグってこと?
バージョン3系を使うしかないのか。そっちで進めてみることにする。
みんなレスthx
923デフォルトの名無しさん:2011/08/29(月) 18:06:23.16
定時報告、pythonで書かれたXBMC.radiko 0.0.5公開です。
ttp://xbmc.inpane.com/main/heavy_user/script.php#radiko

今回はファンアート機能を搭載しました。
テレビでradiko聴きながら、twitterを眺めながら、ファンアートでインターフェイスが変わります。

以上、定時報告終了
924デフォルトの名無しさん:2011/08/29(月) 19:28:08.51
>>923
どの辺が「Pythonのお勉強」に関係あるんだ?
いい加減、他所でやれよ
925デフォルトの名無しさん:2011/08/29(月) 19:35:37.78
宣伝乙
926デフォルトの名無しさん:2011/08/29(月) 20:25:08.12
>>920
過去スレで見覚えがある
927デフォルトの名無しさん:2011/08/29(月) 23:50:17.37
すみません、PythonでtwitterのAPIを扱おうとしているんですが、
こちらで質問させて頂いてもよろしいでしょうか?
それとも、他にふさわしい板がありますか?
928デフォルトの名無しさん:2011/08/29(月) 23:53:37.60
あります
929デフォルトの名無しさん:2011/08/29(月) 23:56:39.36
>>928
レスありがとうございます。
もう一度探してみます。
失礼しました。
930デフォルトの名無しさん:2011/08/30(火) 00:06:51.00
>>927
python-twitterってライブラリが一番使いやすいと思うけど、
Perlみたく完成されてないからオーバーライドしないとマトモに使えないよ

いくつかライブラリあるけど、いじるならpython-twitterが簡単。
ただし元のAPIの仕様とJsonの知識は要る。簡単だけどね
931デフォルトの名無しさん:2011/08/30(火) 00:13:11.99
>>930
ライブラリはpython-twitterとtweepyのどちらにしようか迷って、
結局tweepyにしていました。
OAuth認証に対応しているというのが決め手でした。

tweepyも扱いは楽なのですが、なぜかうまく動いてくれない部分がありまして、
その質問をさせて頂こうと探しています。
932デフォルトの名無しさん:2011/08/30(火) 10:28:45.23
Python 3.? のドキュメントの和訳ってまだ無いですか?
リファレンスマニュアルとライブラリリファレンスくらいがあったらなあと思います。
無ければ本家の英語のを読みますが、読むスピードが遅くて・・・
933デフォルトの名無しさん:2011/08/30(火) 10:31:46.16
お求めのものとは異なるかも知れませんが
http://diveintopython3-ja.rdy.jp/
934デフォルトの名無しさん:2011/08/30(火) 17:52:35.62
Pythonで指数を文字列にして出力する時
print("%.5e" %value)
なんて書いたりするんですが、この指数部の桁数を
可変にすることってできませんか?
上では5桁固定にしていますが、例えば
実行時に与えた引数に応じて桁数を決めるような
ことがしたいと思っています。
935デフォルトの名無しさん:2011/08/30(火) 17:56:25.24
"%%.%de" % 5 % value
936デフォルトの名無しさん:2011/08/30(火) 17:57:10.35
print("%.*e" % (5, value))
937デフォルトの名無しさん:2011/08/30(火) 18:39:03.04
>>923
頑張ってますね
批判にめげずに発表していけー
せっかく作っても人に使ってもらってなんぼだからね
938デフォルトの名無しさん:2011/08/30(火) 19:25:35.84
>>923
批判してる連中は、口ばかりで自分では作れないやつらだから気にするな。
939デフォルトの名無しさん:2011/08/30(火) 19:28:43.42
オライリーのはじpy高すぎる
だからpythonチュートリアル(1500円)でもイインジャネーノ?って思うんだけどどうなんだよ
お前らちゃんとレビューしろよ
wikiにもちゃんと書けよバカ
940デフォルトの名無しさん:2011/08/30(火) 19:36:58.10
>>937-938
自演乙
941デフォルトの名無しさん:2011/08/30(火) 19:39:33.71
>>923
>>940みたいに罵倒「しか」できない奴はキニスンナ
942デフォルトの名無しさん:2011/08/30(火) 19:48:47.24
自演乙w
943デフォルトの名無しさん:2011/08/30(火) 19:49:23.41
>>923
削除依頼出してくる
944デフォルトの名無しさん:2011/08/30(火) 19:57:48.96
>>937-938
自演乙
945デフォルトの名無しさん:2011/08/30(火) 21:16:23.08
>>935
>>936
うわ超速レスthxです!!!
こんな記述方法全く想像付きませんでした。

936様のサンプルを流用して、思うような
出力が得られるようになりました。
本当はformat()とか使うべきなんでしょうが、
当座はこれで凌げそうです。
946デフォルトの名無しさん:2011/08/30(火) 23:34:43.82
ttp://pentan.info/doc/unicode_list.html
にあるような文字コードを文字列として取得したいのですがどうしたら
よいでしょう?環境はMacOS Lionなので文字コードはUTF8です。
対話モードで、
>> hoge = unicode('山', 'utf-8')
>> hoge.encode('utf-8')
'¥xe5¥xb1¥xb1'
という風にはできますが、普通のスクリプトで文字列として取得したいところです。
947デフォルトの名無しさん:2011/08/30(火) 23:45:37.39
>>946
たぶん自己解決しました
# -*- coding: utf-8 -*-
を付ければエラーにはならず、
str = repr(hoge.encode('utf-8'))
のようにすればよさそうです。
948デフォルトの名無しさん:2011/08/31(水) 00:11:26.94
デタラメを書くな
949デフォルトの名無しさん:2011/08/31(水) 01:20:55.39
>>948
>>> hoge = unicode('山','utf-8')
>>> hoge.encode('utf-8')
'¥xe5¥xb1¥xb1'
>>> print hoge

>>> print (hoge.encode('utf-8'))

>>> print repr(hoge.encode('utf-8'))
'¥xe5¥xb1¥xb1'
>>> str = repr(hoge.encode('utf-8'))
>>> print str
'¥xe5¥xb1¥xb1'
>>> print str.replace('¥¥x','')
'e5b1b1'

なんか壮大な勘違いしてるのかな?

950デフォルトの名無しさん:2011/08/31(水) 20:44:55.69
すいません。
可変長引数の*args **kwdsがどうしてもわかりません。何かいいイメージがあれば教えてください。
951デフォルトの名無しさん:2011/08/31(水) 20:56:15.69
>>950
なにがわからないの?

>>> def f(*args, **kwds):
... print args, kwds
...
>>> f(1, 2, a=1, b=2)
(1, 2) {'a': 1, 'b': 2}
952デフォルトの名無しさん:2011/08/31(水) 20:57:30.70
>>950
具体的な使い方としてBunchパターンというのがあるから
参考に
http://ruslanspivak.com/2011/06/12/the-bunch-pattern/
953デフォルトの名無しさん:2011/09/01(木) 15:59:42.57
スッキリうんこでました
954デフォルトの名無しさん:2011/09/01(木) 19:26:54.69
Python Tools for Visual StudioやRSenseみたいに、型推論による補完出来るVimもしくはEmacs向けプラグインってありますか?

955デフォルトの名無しさん:2011/09/01(木) 19:49:23.20
ありますん
956デフォルトの名無しさん:2011/09/01(木) 21:47:30.11
>>954
ちょうどこんなのがでてた。
http://pedrokroger.com/2010/07/configuring-emacs-as-a-python-ide-2/
ここに載ってた。
http://rope.sourceforge.net/
http://rope.sourceforge.net/ropemacs.html
http://www.saltycrane.com/blog/2010/05/my-emacs-python-environment/
ためしてないから使い方とかはしらん。

あー、型推論は無理だと思う。

957デフォルトの名無しさん:2011/09/02(金) 01:45:02.98
>>956
それ型推論だろw
958デフォルトの名無しさん:2011/09/02(金) 07:50:22.15
良く知らんが、ipythonの補完機能を使ってる(または同様の方式)なら
型推論なんてしてないぞ
959デフォルトの名無しさん:2011/09/02(金) 14:51:05.28
eclipse + pydev 使い始めたんだけど
他のIDE使ってる人いる?

Titanium Studioとかどうよ
960デフォルトの名無しさん:2011/09/02(金) 16:35:13.43
IDEを使うと頭の回転が遅くなるらしいよ
961デフォルトの名無しさん:2011/09/02(金) 17:10:53.36
付属のIDE最高
962デフォルトの名無しさん:2011/09/02(金) 18:29:24.21
初心者はIDE使ってれば良いけど
IDEにどっぷりつかると頭悪くなるよね
963デフォルトの名無しさん:2011/09/02(金) 18:56:48.42
pass
964デフォルトの名無しさん:2011/09/02(金) 21:13:38.60
形式の決まっているファイルを処理したのですが,効率的な方法を探しています.
ファイルの形式は

名前
住所
電話番号
空行

という4つひとまとめのデータが1000人分ほど1つのファイルに入っています.
この各データを変数に入れたいのですが,なにかいい方法ありませんか?
一人ひとり処理するので,4000個全てを一気に変数に入れる必要はなくて,
4行読み込んだら処理して,また4行読むような感じにしたいです.
全て配列に入れてから,アクセスするのが一番楽でしょうか?
965デフォルトの名無しさん:2011/09/02(金) 21:30:40.87
>>964
readline()を使えば4行ずつ読んで処理は可能だけど、
たかだか4000行なら、readlines()で一気に読みこんでしまう方が効率的だと思う。
966デフォルトの名無しさん:2011/09/03(土) 00:26:55.82
>>965
ありがとうございます!
967デフォルトの名無しさん:2011/09/03(土) 01:41:37.82
>>958
ipythonは型推論があるだろw
968デフォルトの名無しさん:2011/09/03(土) 01:45:38.42
pass
969デフォルトの名無しさん:2011/09/03(土) 11:46:30.96
>>967
ipythonは型推論ではなくイントロスペクション
970デフォルトの名無しさん:2011/09/04(日) 00:07:50.15
質問です

CentOS5.6でpyts3というpythonモジュールをインストールしようとするとSyntax Errorが発生してしまいます

pythonのバージョン - python-2.4.3-44.el5

# python setup.py install
running install
running build
running build_py
copying PyTS3.py -> build/lib
running install_lib
copying build/lib/PyTS3.py -> /usr/lib/python2.4/site-packages
byte-compiling /usr/lib/python2.4/site-packages/PyTS3.py to PyTS3.pyc
File "/usr/lib/python2.4/site-packages/PyTS3.py", line 39
class ServerQuery():
^
SyntaxError: invalid syntax

SyntaxErrorが発生してる39行目前後

def __str__(self):
return "ID %s (%s)" % (self.code, self.msg)


class ServerQuery():
TSRegex = re.compile(r"(・w+)=(.*?)(・s|$|・|)")

def __init__(self, ip='127.0.0.1', query=10011):
"""
This class contains functions to connecting a TS3 Query Port and send
なにが原因なのでしょうか?よろしくお願いします
971デフォルトの名無しさん:2011/09/04(日) 00:22:45.62
Pyton2.4ではclass ServerQuery()みたいに
括弧のなかにベースクラス指定しないとエラーになるんじゃない?

Python2.5以上に上げるか
class ServerQuery(object)にしたら動くかもしれない
972デフォルトの名無しさん:2011/09/04(日) 00:51:37.14
これだな
http://docs.python.org/whatsnew/2.5.html#other-language-changes
> The list of base classes in a class definition can now be empty.
973デフォルトの名無しさん:2011/09/04(日) 00:53:30.67
974デフォルトの名無しさん:2011/09/04(日) 04:05:58.39
>973
乙。でもちょっと早いかもな。
975デフォルトの名無しさん:2011/09/05(月) 00:56:03.71
>>971
>>972
ありがとうございます

pythonをバージョンアップさせることによって解決しました

本当に助かりました
976デフォルトの名無しさん:2011/09/05(月) 12:47:12.37
うm
977デフォルトの名無しさん:2011/09/05(月) 12:47:56.34
必殺dat落し
978デフォルトの名無しさん:2011/09/05(月) 15:11:16.50
>>964
for name, addr, tel, sep in zip(*4*[iter(open('data.txt'))]):
 something(name, addr, tel)

N行まとめて読むハック。
あんまり美しくないけど。
979デフォルトの名無しさん:2011/09/05(月) 19:14:59.38
980デフォルトの名無しさん:2011/09/05(月) 19:19:27.80
981デフォルトの名無しさん:2011/09/05(月) 19:47:14.11

982デフォルトの名無しさん:2011/09/05(月) 20:27:16.04
983デフォルトの名無しさん:2011/09/05(月) 20:27:44.26
PyScripterでraw_inputが変数扱いされて困ってる。
984デフォルトの名無しさん:2011/09/06(火) 17:10:52.40
box={"cat":1, "dog":2}
hoge="cat"
な状況から

例えば box.$hoge みたいな書き方で box.cat を呼びたいんだ
この場合は box.get(hoge) が使えるけど
一般的にevalやexec以外で実行時に変数内容を展開する方法ってないっすか?


985デフォルトの名無しさん:2011/09/06(火) 17:24:45.17
box[hoge]
986デフォルトの名無しさん:2011/09/06(火) 22:47:43.75
>>984
クラスメソッドを変数で指定するような話かな?
リフレクション機能はあるので

cat = getattr(box, hoge)

というようなことは可能。
987デフォルトの名無しさん:2011/09/07(水) 01:02:34.55
>>986
出来ました!ありがとう
988デフォルトの名無しさん:2011/09/07(水) 16:17:52.31
ume
989デフォルトの名無しさん:2011/09/07(水) 19:48:10.38
おめこ
990デフォルトの名無しさん:2011/09/07(水) 19:48:40.87
991デフォルトの名無しさん:2011/09/07(水) 21:55:18.88
ume支援
992デフォルトの名無しさん:2011/09/07(水) 22:03:12.74
spam
993 忍法帖【Lv=40,xxxPT】 【東電 65.6 %】 :2011/09/07(水) 23:21:29.35
test
994デフォルトの名無しさん:2011/09/07(水) 23:44:16.50
うめてんてー
995デフォルトの名無しさん:2011/09/07(水) 23:49:34.04
運命
996デフォルトの名無しさん:2011/09/08(木) 03:52:53.69
ham
997デフォルトの名無しさん:2011/09/08(木) 04:15:47.54
opi
998デフォルトの名無しさん:2011/09/08(木) 06:50:20.87
eggs
999デフォルトの名無しさん:2011/09/08(木) 06:52:56.25
w
1000デフォルトの名無しさん:2011/09/08(木) 06:53:15.30
千の風になって
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。