くだすれPython(超初心者用) その14

このエントリーをはてなブックマークに追加
1まぐろ ◆REDOsushik
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その13
http://toro.2ch.net/test/read.cgi/tech/1332304873/
関連スレ
Pythonのお勉強 Part47
http://toro.2ch.net/test/read.cgi/tech/1341819025/
【実験台】 Python 3.0 のお勉強 Part 1 【非互換】
http://toro.2ch.net/test/read.cgi/tech/1235050215/
◆関連リンク
Python の Home Page
ttp://www.python.org/
2デフォルトの名無しさん:2012/07/19(木) 10:14:09.14
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
3デフォルトの名無しさん:2012/07/19(木) 10:14:59.07
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
4デフォルトの名無しさん:2012/07/19(木) 10:15:48.61
日本語の扱いで戸惑ったらこちらをどうぞ(バッドノウハウ集で笑える)
http://speirs.blog17.fc2.com/blog-entry-4.html
http://atomic.jpn.ph/prog/etc/encode.html
http://d.hatena.ne.jp/kakurasan/20100330/p1

http://pc11.2ch.net/test/read.cgi/tech/1217836194/339
339 :デフォルトの名無しさん:2008/08/23(土) 08:36:00
    PythonのUnicodeEncodeErrorを知る
    http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html

    よくまとまってた。あとで読む
5デフォルトの名無しさん:2012/07/19(木) 10:35:30.14
最新版直リン - 2.Xが推奨。3.Xはライブラリやドキュメントが使えないことも
ttp://www.python.org/download/
Python のコーディングガイド PEP8
ttp://www.python.org/dev/peps/pep-0008/
Python のコーディングガイド PEP8 - 日本語訳
ttp://www.oldriver.org/python/pep-0008j.html
日本語文字列コード問題まとめ
ttp://python.matrix.jp/tips/string/encoding.html
インタラクティブモードのエンコード
ttp://python.matrix.jp/tips/compatibility/interact_encoding.html
SJISから卒業出来ないひとのための禁じ手
reload(sys); sys.setdefaultencoding('cp932')
Pythonの文字化け対策:sys.setdefaultencodingの謎
ttp://hain.jp/index.php/tech-j/2008/01/07/Python%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91
実行時にdefaultencodingを変更する
ttp://d.hatena.ne.jp/perezvon/20070715/1184469534
PEP-8とか
ttp://www.python.org/dev/peps/pep-0008/
ttp://oldriver.org/python/pep-0008j.html
Google Python Style Guideとか
ttp://google-styleguide.googlecode.com/svn/trunk/pyguide.html
ttp://works.surgo.jp/translation/pyguide.html
6デフォルトの名無しさん:2012/07/19(木) 10:36:52.24
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
7デフォルトの名無しさん:2012/07/19(木) 10:49:00.82
PyPy
8デフォルトの名無しさん:2012/07/19(木) 14:55:58.57
>>1
乙py
9デフォルトの名無しさん:2012/07/19(木) 17:42:43.34
もう3に移行したほうが良いの?
10デフォルトの名無しさん:2012/07/19(木) 17:44:33.40
移行してください
11デフォルトの名無しさん:2012/07/19(木) 17:44:44.50
やだ
12デフォルトの名無しさん:2012/07/19(木) 17:57:45.61
       /                    .\
     /                       .\
 \ /                          \ /
   \      ___________     . /
    \   ./                \   /
     | \/                   \/...|
     |  |                       |  |
     |  |                       |  |
  .._ |_|                       |_|_..
     |  |     さあ‥ 逝こうか‥‥     |  |
     |  |                       |  |
     |  |                       |  |
     |  |                       |  |
     |  |/                   ..\|  |
     |  |                       |  |
   .._|/|      _ _ _ _ _ _ _ _     ...|\|_
  / ..|  |   _−_−_−_−_− _   |  |  \
     |  |/_/━ ━ ━ ━ ━ ━\_\|  |
   .._| /_/━ ━ ━ ━ ━ ━ ━ \_\.|_
     /_/━  ━  ━  ━  ━  ━  ━ \_\
   /  /━  ━  ━  ━  ━  ━  ━\  \
13デフォルトの名無しさん:2012/07/19(木) 18:42:48.03
はい
14デフォルトの名無しさん:2012/07/19(木) 20:33:53.51
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
15デフォルトの名無しさん:2012/07/20(金) 12:43:31.32
RealLibってリンク切れなんだけど
開発者死んじゃったの?
16デフォルトの名無しさん:2012/07/20(金) 13:09:49.65
951 名前:デフォルトの名無しさん [sage]: 2012/07/19(木) 14:17:38.26
ある程度大きい辞書型のデータを保存しようとすると
memoryerrorになってしまうんですが、どうにか保存する方法ってありませんか?
辞書を3分割してもダメだったので他の方法を探しています。

957 名前:デフォルトの名無しさん [sage]: 2012/07/19(木) 17:51:43.51
保存しようとする前にmemoryerrorになると思うけど、
まずどうやってどこに保存しようとしているのか言おうか。

pickle

よく分からんけど、簡単にはこんな感じかな?

f = open('/tmp/dict.pickle', 'wb')
big_L = [None] * (1 << 20) # 書き込むためのbuffer領域を確保
big_dict = {}

try:
  do_something()
except memoryerror:
  del big_L # 書き込むためのbuffer領域を解放
  f.write(big_dict)
  del big_dict
  big_dict = {}
  big_L = [None] * (1 << 20) # buffer 領域を再確保
  goto try

f.close()
17デフォルトの名無しさん:2012/07/20(金) 13:40:45.00
safety pool ですね
わかります
18デフォルトの名無しさん:2012/07/20(金) 13:54:15.54
>>16
そのコードの意図を把握できない初級者と中級者と上級者が混乱するからやめろ
19デフォルトの名無しさん:2012/07/20(金) 14:35:38.67
前スレ>>951

ある処理Aを行うときにmemoryerrorとなってmalloc()に失敗してしまう場合。
処理Aで必要とするmemory領域Bを予め確保しておき、
処理A実行時に領域Bを渡してやることで、
処理A内部でmalloc()を行わなくてよいようにする。

上記方法が>>前スレ951が遭遇した問題の解決方法の定石なの。
C言語の知識が必要になるから、Pythonだけで考える人にとっては反則かも。

# 巨大な辞書を作成する前に以下の行を挿入しておいて、
buffer_for_f_write = b'\0' * 4 * (1024 ** 2) # 4MB
d = {} # 後で辞書を作成する。

# write()時に必要となるであろうmemory領域を解放しておく。
del buffer_for_f_write # 4MB分memory領域に空きを用意する。
f.write() # 4MB空きができたのでmemoryerrorは発生しないはず。
# write()時に必要となるであろうmemory領域を再度確保しておく。
buffer_for_f_write = b'\0' * 4 * (1024 ** 2) # 4MB

# 私が同じ問題に遭遇したときは自分で思いついて解決したもんですが、
# Pythonする人たちはこんな簡単な方法も思いつかないもんですかね。
# 下手したらmalloc()?なんじゃそら?って感じなんですかね。。。。
# Pythonや最近のweb屋って基礎が分かってない気がして怖いんですよね。。。。
20デフォルトの名無しさん:2012/07/20(金) 14:39:41.97
>>951 の質問があまりに曖昧で隙だらけだったから
みんな解答避けてただけだろ
21デフォルトの名無しさん:2012/07/20(金) 14:51:24.14
> ある程度大きいデータを保存しようとすると
> memoryerrorになってしまうんですが、

無駄な部分を端折って十分に分わかったから曖昧とは思わなかったよ。
22デフォルトの名無しさん:2012/07/20(金) 14:51:45.56
>>19
del obj は free(obj) じゃないのよ
23デフォルトの名無しさん:2012/07/20(金) 15:26:33.74
>>22
del obj
が正しいよ。
だって、Pythonのcodeだもんよ。
C言語のcodeではないよ。
24デフォルトの名無しさん:2012/07/21(土) 00:09:08.94
podcastを一気に落とすみたいなのってどのモジュール使えばいいんですか
25デフォルトの名無しさん:2012/07/21(土) 00:35:28.94
処理系の実装に依存しそうなコードはあまり推奨されない。

巨大な辞書の保存だけど、
write一回で済ませるようなコードでは、一時的に巨大なデータがメモリ上に乗っかるので、memoryerror制限に引っ掛かっても仕方ない。
繰り返し文使って複数回に分けて書き込むと省メモリで済むはず。面倒だったら素直にDB使おう。


>>23
>>22は、del でメモリ開放を期待するようなコードを書くべきではない、って意図じゃないかな。
26デフォルトの名無しさん:2012/07/21(土) 02:28:08.00
>>25
>del でメモリ開放を期待するようなコードを書くべきではない、って意図じゃないかな。

下のような書き込みがあったから違うと思いましたですよ。

> free(obj)じゃないのかよ

memoryerror, malloc()という風にPython, C言語の用語を混ぜて書いたので、
それで混乱してしまったのかな?とも思いましたが。

巨大な辞書を保存する場合、どうするのが賢いんでしょ。
for k, v in big_dic.items():
 print('{},{}'.format(k, v))
確実なのは↑もしくはsqlite3ぐらいですかね。
27デフォルトの名無しさん:2012/07/21(土) 03:08:17.11
28デフォルトの名無しさん:2012/07/21(土) 03:13:58.44
文字列からある文字をすべて削除するとかどうすればいいですかね?
aabaababの中から、bを削除してaaaaaにする感じです。
strip(b)だと前と後ろしか消えませんし...
29デフォルトの名無しさん:2012/07/21(土) 03:43:56.75
>>28
"aabaabab".replace("b", "")
30デフォルトの名無しさん:2012/07/21(土) 03:45:03.58
てs
31デフォルトの名無しさん:2012/07/21(土) 04:04:34.35
>>29
28です。ありがとうゴザイマス。
32デフォルトの名無しさん:2012/07/21(土) 04:20:14.13
>>26

辞書の保存なら RDBよりKVSの方が手軽だと思う。
規模にもよるけど、標準で済ませるならdbm系モジュール (pickleする必要があるなら shelve)
オブジェクトDBだったらZODBとかdurus辺り。

普通にpickleでファイルに書き込みでもいけると思うんだけど
dump 使ってる?dumps で一括でシリアライズしてから書き込みしてたりしたら多分アウト
# 前スレ読んでないので推測
33デフォルトの名無しさん:2012/07/21(土) 04:34:12.00
>>32
> dump 使ってる?dumps で一括でシリアライズしてから書き込み
> してたりしたら多分アウト
> # 前スレ読んでないので推測

私も分からない。
前スレ>>951の書き込みは、このスレにはないと思う。
34デフォルトの名無しさん:2012/07/21(土) 06:22:37.90
Q. なぜ儲からないのでしょうか?

A. お金にならないことに時間を使っているからです。
35デフォルトの名無しさん:2012/07/21(土) 19:16:18.05
本当に下らない質問なのですが、
何で3系より2系の方が速いのですか?
36デフォルトの名無しさん:2012/07/21(土) 21:24:27.68
下らない問いに答えよと申すか
37デフォルトの名無しさん:2012/07/21(土) 21:30:00.08
下らない答えを申せ
38デフォルトの名無しさん:2012/07/21(土) 21:53:05.11
>>35
内部が簡単だから
39デフォルトの名無しさん:2012/07/22(日) 14:18:12.03
Python勉強すると、Cのポインタが少しわかるようになったよ
動的型付けの言語の変数は、オブジェクトへのポインタなんだね
行き詰まったら、色んな視野を持つって大切だね
40デフォルトの名無しさん:2012/07/22(日) 16:28:21.64
>動的型付けの言語の変数は、オブジェクトへのポインタなんだね

動的型付け言語の全部が全部そうじゃない
41デフォルトの名無しさん:2012/07/22(日) 22:03:01.09
>>38
という事は3系が2系よりも速くなる事はこれからも無いと考えて良いのですか?
42デフォルトの名無しさん:2012/07/22(日) 23:21:44.28
馬鹿には無理
43デフォルトの名無しさん:2012/07/22(日) 23:49:33.13
>>41
はい
速度を犠牲にして利便性を取りました
速度はハードの進化で補います
44デフォルトの名無しさん:2012/07/23(月) 02:14:46.95
低級言語使え
45デフォルトの名無しさん:2012/07/23(月) 02:18:23.80
PyPyがv3対応してGILが取り除かれてGCがインクリメンタルGCになればなー
46デフォルトの名無しさん:2012/07/23(月) 10:03:17.11
>>39
リファレンスとポインタは別物だよ。
一部、同じような振る舞いというだけで。
47デフォルトの名無しさん:2012/07/25(水) 10:28:16.56
ポインタを抽象化したもので別物ではないんじゃね
48デフォルトの名無しさん:2012/07/25(水) 10:31:11.35
さっき見つけたPython効率化のブログ記事。今までnamedtupleとか使ってなかったわ
http://blog.explainmydata.com/2012/07/expensive-lessons-in-python-performance.html
49デフォルトの名無しさん:2012/07/26(木) 13:40:06.41
>>47
いや、そういう問題じゃなく別のもの。
リファレンスしか知らないとそういう理解になるかもね。
50デフォルトの名無しさん:2012/07/26(木) 14:46:36.71
喧嘩売ってんのか?
51デフォルトの名無しさん:2012/07/26(木) 14:47:29.11
どういう問題で、どう別物なのか言わない。ただ煽るだけ。死んだほうがマシだろう
52デフォルトの名無しさん:2012/07/26(木) 14:48:29.27
たぶん抽象化の意味を分かってないと思うw
53デフォルトの名無しさん:2012/07/26(木) 15:16:46.31
>>51
どうみても煽ってんのはお前の方です
ほんとうにありがとうございました
54デフォルトの名無しさん:2012/07/26(木) 15:19:57.73
>>53
いや、そういう問題じゃなく別のもの。
煽りしか知らないとそういう理解になるかもね。
55デフォルトの名無しさん:2012/07/26(木) 15:38:24.50
>>54
日本語で桶
56デフォルトの名無しさん:2012/07/26(木) 15:40:59.18
>>49
日本語で桶
57デフォルトの名無しさん:2012/07/26(木) 16:19:48.17
まずは俺にも分かるよう説明してもらおうか
58デフォルトの名無しさん:2012/07/26(木) 17:25:08.49
リファレンスは名前、別名。ポインタは値、アドレス。

ポインタを出席番号と考えると、リファレンスは名前。
あだ名みたいな別名で同一人物を参照できる。
59デフォルトの名無しさん:2012/07/26(木) 17:40:38.00
思ったけど、ポインタの上位概念であるReferenceじゃなくて、
何か特定の言語においけるリファレンスという仕様の話をしてるのか?
60デフォルトの名無しさん:2012/07/26(木) 17:52:17.73
>>39はPythonの変数は全部オブジェクトを指してるポインタみたいなものだと気づいたと言ってるんだろうけど
>>46が突然リファレンスと言い出した。これはポインタより抽象的な参照のことを言ってるのかと思ったら
どうやら違うみたいだ、Pythonで普通リファレンスとかデリファレンスとか言わないから具体的にPythonの参照がそれなのかは知らない
61デフォルトの名無しさん:2012/07/26(木) 18:40:30.59
Ruby厨と推測
62デフォルトの名無しさん:2012/07/26(木) 19:00:00.89
>>60
え、Pythonの変数はリファレンスだよ?
63デフォルトの名無しさん:2012/07/26(木) 19:16:45.49
>>62
レファレンスは参照の一種じゃないの?
64デフォルトの名無しさん:2012/07/26(木) 19:21:21.07
以下、何事も無かったかのように別の話題
65デフォルトの名無しさん:2012/07/26(木) 19:21:54.02
ポインタは参照の一種だし、変数がオブジェクトを参照するPythonでCのポインタへの理解が進んだというのは
大いに理解できる。誰も同一視してないよね。結局リファレンスに拘ってる奴が何を問題視して指摘してるのかよく分からない
特に>>58の言うリファレンスはポインタでも実現出来そうに聞こえるのだが
66デフォルトの名無しさん:2012/07/26(木) 19:31:59.40
wxPython だと wxFileConfig というのがありますが
これと同じようなものは Python の標準モジュールにありますか?
67デフォルトの名無しさん:2012/07/26(木) 19:32:44.68
Pythonとポインタを絡めた話はいっぱいヒットするけど
リファレンスは全然だなあ。多分それがPerlのリファレンスのことで、
RubyやPythonではもはや意識しなくて良くなった概念らしいことは分かるけど
68デフォルトの名無しさん:2012/07/26(木) 19:34:27.00
Pythonの参照はPerlで言うリファレンスなのかもしれないけど
Pythonのリファレンスという話はあまりないので
ちゃんと説明してもらいたい
69デフォルトの名無しさん:2012/07/26(木) 19:36:25.47
>>66
ConfigParser
70デフォルトの名無しさん:2012/07/26(木) 19:40:43.99
馬鹿には無理
71デフォルトの名無しさん:2012/07/26(木) 19:53:22.20
72デフォルトの名無しさん:2012/07/26(木) 19:58:05.76
"リファレンス"と"参照"を区別して使ってるの?

(Cでいう)ポインタの機能=リファレンス+イテレーション

リファレンス:
何らかのオブジェクトにそのアドレス等の情報を使って間接的にアクセスすること
Cでいうと*やら->

イテレーション:
オブジェクトの集合を順に(もしくは特定の順番等で)扱う機能
Cでいうとポインタ演算 ++やら--を含む

っていう理解で,Pythonのオブジェクトは基本的にこのリファレンスで扱っている認識.
こうでない意味で使ってるなら説明がほしい
73デフォルトの名無しさん:2012/07/26(木) 19:58:45.89
リファレンスはオブジェクトを参照して、ポインタはアドレスを参照してるというだけの違いなの?
プログラマの意識をアドレスから切り離したという意味で抽象化だと思うけど
そういう問題じゃないと言われたのは、どういう問題なの
Cのポインタで相対化するならば、「オブジェクトへのポインタ」というのは言い得て妙だと思うけど、どれくらい間違ってるの
74デフォルトの名無しさん:2012/07/26(木) 20:00:25.89
>>72
ポインタはリファレンスとは別物らしいよ
75デフォルトの名無しさん:2012/07/26(木) 20:05:57.33
参照とリファレンスは同義だと思うけど、ポインタとリファレンスが別物なら
ポインタは参照とは別物になってしまうから、ここではポインタを含むものを参照
それとは別の何かをリファレンスと呼んでいる
76デフォルトの名無しさん:2012/07/26(木) 20:10:43.79
>参照とリファレンスは同義だと思うけど、ポインタとリファレンスが別物なら
>ポインタは参照とは別物になってしまうから

馬鹿じゃね?
77デフォルトの名無しさん:2012/07/26(木) 20:12:40.36
>>76
ポインタはもっとも基本的なリファレンス=参照だよ
でも別物だと主張してる人がいるから、リファレンスと参照を区別してるだけ
78デフォルトの名無しさん:2012/07/26(木) 20:15:54.14
自演乙
79デフォルトの名無しさん:2012/07/26(木) 20:16:37.89
一応言っとくと、Pythonの参照がCのポインタと同一だとは誰も言ってないからね
ただオブジェクトは実際どっかのメモリ上にあるわけで、Pythonの参照をひとまずポインタとして説明してるのを見るけど
それがPythonの理解に対してどれくらい問題なのかを聞きたいだけ
80デフォルトの名無しさん:2012/07/26(木) 20:17:09.24
あえて言うなら
ポインタ⊂参照
であって決して
ポインタ=参照
ではない
81デフォルトの名無しさん:2012/07/26(木) 20:18:07.07
参照とリファレンスは同義だし
ポインタは参照とは別物だし
なんの問題も無い
82デフォルトの名無しさん:2012/07/26(木) 20:18:31.38
>>81
ポインタは参照の一種だよ
83デフォルトの名無しさん:2012/07/26(木) 20:19:27.84
つまりどういうことです?
84デフォルトの名無しさん:2012/07/26(木) 20:20:09.19
参照とポインタが別物という説明は理解できないし、一般的な常識とも違う
85デフォルトの名無しさん:2012/07/26(木) 21:15:03.43
ポインタを包んで生のアドレスをプログラマーから隠しているのが参照
86デフォルトの名無しさん:2012/07/26(木) 21:16:55.77
いや、そういう問題じゃなく別のもの。
リファレンスしか知らないとそういう理解になるかもね。
87デフォルトの名無しさん:2012/07/26(木) 21:31:26.42
糞は味噌が消化されたものだから味噌は糞の一部だ
だからといって糞は味噌ではない
88デフォルトの名無しさん:2012/07/26(木) 21:33:39.56
味噌が糞だと困る。
89デフォルトの名無しさん:2012/07/26(木) 21:36:40.61
「別物」という日本語が曖昧なのが原因なんじゃないのかな。
「等しくない」ことを指しているのか、
「無関係である」ことを指しているのか、
わざと混乱させて使っているひとがいる。
今回の場合、無関係ではないが等しくもない。なので別物。
ひょっとしたら関東人と東北人で「別物」のニュアンスが違うのかも知れない。
90デフォルトの名無しさん:2012/07/26(木) 21:38:33.89
どうせ別物派も別物じゃない派も自演だからどうでもいい
91デフォルトの名無しさん:2012/07/26(木) 21:44:23.40
pass
92デフォルトの名無しさん:2012/07/26(木) 21:50:28.87
>>49>>86の"リファレンス"が具体的に何を指してるのか結局わからん
コピペしてるだけなようだから無視すべき?

ほぼ>>85の捉え方で
そうすることで扱いに注意が必要なポインタ演算を隠蔽して
間接的にアクセスする機能だけを抽出したのが参照/リファレンスだと思うのだけど

多分大半の実装ではリファレンスの機能を実現するためにポインタ相当の機構を使ってるんだよな
だから>>89
93デフォルトの名無しさん:2012/07/26(木) 21:57:43.61
どう別物か言わないから曖昧になるんだろ
94デフォルトの名無しさん:2012/07/26(木) 22:01:36.98
pass
95デフォルトの名無しさん:2012/07/26(木) 23:47:24.52
scapyがうまくインストールできない…
pypcapとか2.7じゃアカンのか
96デフォルトの名無しさん:2012/07/27(金) 00:31:37.05
97デフォルトの名無しさん:2012/07/27(金) 00:36:17.63
98デフォルトの名無しさん:2012/07/27(金) 09:21:05.49
馬鹿には無理
99デフォルトの名無しさん:2012/07/27(金) 17:29:20.12
>>93
親クラスと子クラスは関連があるがイコールではない、
ということになるかな。

広義にはポインタも参照の一種だが、ポインタは加算減算が可能。
100デフォルトの名無しさん:2012/07/27(金) 21:51:22.09
喧嘩売ったから荒れただけ
101デフォルトの名無しさん:2012/07/27(金) 21:52:04.23
TkinterのTextウィジェットにseeがありますがウィジェットの一番上に指定したインデックスを表示する方法はありますか
102デフォルトの名無しさん:2012/07/27(金) 22:28:51.00
>>101
よくわからないけど、指定したウィジェットを一番上(z-index)に表示だったら widget.lift()
103デフォルトの名無しさん:2012/07/28(土) 05:04:20.42
>>96
WindowsでPyX使ってみたけど、
最初のサンプルでエラー出て、
使い物にならなかったよ。
104デフォルトの名無しさん:2012/07/28(土) 06:29:16.97
ナメチャンタラギッチョンチョンで
pyのpyのpy
105デフォルトの名無しさん:2012/07/28(土) 07:40:00.32
「ウインドウがアクティブ(フォーカス)になったら、処理を行う」というイベント処理をやりたいのですが、python2では無理なのでしょうか?
106デフォルトの名無しさん:2012/07/28(土) 07:53:43.59
馬鹿には無理
107デフォルトの名無しさん:2012/07/28(土) 08:19:39.56
>>103
Windows の場合は >>96 の PyX-0.11.1 じゃだめ
revision 3179-3181 で治ってるらしいので
http://pyx.svn.sourceforge.net/viewvc/pyx/
から採って来ると良いかも知れない
108デフォルトの名無しさん:2012/07/28(土) 08:45:11.65
textファイルの比較をしたいのですが、便利なモジュールとかあります?
109デフォルトの名無しさん:2012/07/28(土) 08:57:14.29
difflib
110デフォルトの名無しさん:2012/07/28(土) 09:02:12.94
>>107
出来ました。
ありがとうございます。

>revision 3179-3181 で治ってるらしいので

こんな情報どこから見つけてくるんですか?
111デフォルトの名無しさん:2012/07/28(土) 09:05:57.75
馬鹿には無理
112デフォルトの名無しさん:2012/07/28(土) 09:12:24.01
ググるしかない
113デフォルトの名無しさん:2012/07/28(土) 09:19:53.77
114デフォルトの名無しさん:2012/07/28(土) 09:30:30.26
>>113
確かにそれなんですけど、
どうやってそれを見つけたのかなって・・・。
115デフォルトの名無しさん:2012/07/28(土) 09:34:23.85
>>114
おまいが何をどうやってどうだめだったかくらい書くのが礼儀だろ馬鹿
116デフォルトの名無しさん:2012/07/28(土) 09:36:53.22
>使い物にならなかったよ。

とか言い切るなら、それなりの根拠が必要だよな。
117デフォルトの名無しさん:2012/07/28(土) 09:40:11.18
馬鹿には無理さんはツンデレ。
118デフォルトの名無しさん:2012/07/28(土) 10:07:32.23
思ってるだけじゃ何も実現出来ないよ
119デフォルトの名無しさん:2012/07/28(土) 10:08:29.64
馬鹿には無理さんは病ンデレ
120デフォルトの名無しさん:2012/07/28(土) 12:38:40.55
>>105
何のguiか知らないけど、出来るよ。
121デフォルトの名無しさん:2012/07/28(土) 14:14:39.77
>>102
ウェジェットの配置ではなく自動スクロールの方です
説明が悪かったみたいです すみません

Tkinterのtextウィジェットで文字のピクセル数または文字単位の高さを返すメソッドはありますか
122デフォルトの名無しさん:2012/07/28(土) 14:22:17.21
PyXやっぱり使い物にならないわ。
日本語混ざりのテキストだと全然だめ。
123デフォルトの名無しさん:2012/07/28(土) 15:47:34.08
馬鹿には無理
124デフォルトの名無しさん:2012/07/28(土) 17:12:27.68
同じ階層に同一名のファイルとディレクトリがある場合の
importについての質問です

dir/hoge.py
dir/sample.py
dir/hoge/foo.py

hoge.pyの中身
def func_hoge():
pass

例えばこうなっているとき、sample.pyは何の問題もなく
importできるのですが、hoge.pyがどうやってもエラーになってしまいます

import dir.hoge
dir.hoge.func_hoge()
エラー:AttributeError: 'module' object has no attribute 'func_hoge'

from dir import hoge
hoge.func_hoge()
エラー:AttributeError: 'module' object has no attribute 'func_hoge'

from dir.hoge import func_hoge
func_hoge()
エラー:ImportError: cannot import name func_hoge


名前を変える以外に対処方法はないでしょうか?
125デフォルトの名無しさん:2012/07/28(土) 18:15:11.39
ディレクトリが優先。
名前を変えるしかない。
126デフォルトの名無しさん:2012/07/28(土) 18:16:28.69
>>122
文字以外を PyX で出力しておいて
最後に文字だけ PyPDF を使って
書き足すと良いかも知れません
127デフォルトの名無しさん:2012/07/28(土) 20:32:01.32
>>126
それがですね、
MiKTeXをTeXworks直接使って実行すると、
日本語混ざりでも大丈夫なんですよ。
PyXを経由したときだけおかしい。
128デフォルトの名無しさん:2012/07/29(日) 01:40:40.68
うざい
消えろ
何この糞スレ
129デフォルトの名無しさん:2012/07/29(日) 03:30:49.20
>>124
mv dir/hoge.py dir/hoge/__init__.py

./hoge/foo.py
def foo():
print('foo()')

./hoge/__init__.py
def func_init():
print('func_init()')

./sample.py
# .
# |-- hoge
# | |-- __init__.py
# | `-- foo.py
# `-- sample.py
from hoge import func_init
from hoge.foo import foo

func_init()
foo()
130デフォルトの名無しさん:2012/07/29(日) 06:56:35.56
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')

application = webapp.WSGIApplication(
[('/', MainPage)],
debug=True)

def main():
run_wsgi_app(application)

if __name__ == "__main__":
main()

上のソースの
このソースのapplication = webapp〜〜の位置ってdef mainの中じゃだめなの?
あと、2行目をコメントアウトしてwebapp.util.run_wsgi_appってしたらエラーがでたんだけど・・どうして?
131デフォルトの名無しさん:2012/07/29(日) 07:30:27.81
application を main 以外から使う予定がないなら main の中でも良いはず。
あと、2行目は気にすんな。
132デフォルトの名無しさん:2012/07/29(日) 08:35:20.61
2行目気になる
133デフォルトの名無しさん:2012/07/29(日) 09:15:27.23
webapp/__init__.pyの中でutilが定義されていないから
134デフォルトの名無しさん:2012/07/29(日) 12:54:29.74
??
1行目のfrom google.appengine.ext import webappで
webappパッケージをインポートしてるんだから、
2行目はインポートしなくて、1行目でインポートしたwebapp
パッケージの中身って、webapp.util.run_wsgi_appで使うことが
できないのかな?
135デフォルトの名無しさん:2012/07/29(日) 13:12:18.28
馬鹿には無理
136デフォルトの名無しさん:2012/07/29(日) 13:47:57.79
google/appengine/ext/webapp/__init__.py
に import util と書けばできるよ。
137デフォルトの名無しさん:2012/07/29(日) 14:25:51.42
>>135
バカにも理解できない文章しか書けない糞は黙ってろ能無しが。
138デフォルトの名無しさん:2012/07/29(日) 14:26:39.70
馬鹿が無理してる
139デフォルトの名無しさん:2012/07/29(日) 14:36:45.17
パッケージをインポートしてもパッケージ内のモジュールは自動的にはインポートされない
__init__.pyにimport文を書いておく必要がある

$ mkdir foo
$ touch foo/__init__.py foo/bar.py
$ python2.7 -c "import foo; print 'bar' in dir(foo)"
False
$ echo "import bar" >foo/__init__.py
$ python2.7 -c "import foo; print 'bar' in dir(foo)"
True
140デフォルトの名無しさん:2012/07/29(日) 15:18:41.89
概出
過去スレ嫁
141デフォルトの名無しさん:2012/07/29(日) 15:26:02.85
142デフォルトの名無しさん:2012/07/29(日) 15:47:00.34
今日も雑魚しかいねーな
143デフォルトの名無しさん:2012/07/29(日) 15:55:29.13
概出っていまだに使ってる奴いるのか。
144デフォルトの名無しさん:2012/07/29(日) 16:15:17.41
>>133 >>136 >>139
多分理解できたthx!!

>>142
お前はいらない子。リアルでも話す相手いないんだろ?
ネットでもお前と話したい奴なんていねえんだよ。さっさと回線切れ
145デフォルトの名無しさん:2012/07/29(日) 16:18:15.41
こんな質問者増えてるのかな
146デフォルトの名無しさん:2012/07/29(日) 17:16:45.20
ドアを叩く手前で悩んでいる人は結局それ以上伸びない
147デフォルトの名無しさん:2012/07/29(日) 20:40:06.99
ruby kaigiのpython版ってないの
148デフォルトの名無しさん:2012/07/29(日) 20:57:09.01
python onsen
149デフォルトの名無しさん:2012/07/29(日) 20:58:17.97
PyConJPが9月に品川の産技大でありますが大した規模ではない
150デフォルトの名無しさん:2012/07/29(日) 20:59:25.22
もし行くのであれば3日目にお会いしましょう
151デフォルトの名無しさん:2012/07/29(日) 21:01:08.01
スプリント参加か…
152デフォルトの名無しさん:2012/07/29(日) 21:36:51.79
pass
153デフォルトの名無しさん:2012/07/29(日) 22:02:57.32
角電池
154デフォルトの名無しさん:2012/07/31(火) 09:52:59.89
>>147
pyfesとかですかね...
155デフォルトの名無しさん:2012/07/31(火) 10:25:57.58
textファイルに書き込むのは、write()で出来ますけど、
既に書かれてるものを削除して書き込んだりできます?
例えば、aって書かれているtextファイルをbに書き換えたり。
156デフォルトの名無しさん:2012/07/31(火) 10:37:01.22
157デフォルトの名無しさん:2012/07/31(火) 11:05:43.67
>>156
r+で開くということですか?
158デフォルトの名無しさん:2012/07/31(火) 11:50:02.46
r+ 選んだってことは
テキスト中のaを全てbに置き換えるとか
そういうことをやりたいってこと?
159デフォルトの名無しさん:2012/07/31(火) 12:07:03.24
>>158
aを置き換えるというか、textの中の文をまるまる違う文に置き換えたい感じです。
160デフォルトの名無しさん:2012/07/31(火) 13:47:22.40
それならふつうに'w'で
161デフォルトの名無しさん:2012/07/31(火) 14:32:17.00
>>155,159
こんなのでどう?

import shutil

path = '/tmp/tech155.txt'
path2 = '/tmp/tech155.txt.tmp'

with open(path, 'w') as f:
# help(f)
# raise()
for i in range(26):
ch = ord('a') + i
s = chr(ch)
f.write(s + '\n')
with open(path, 'r') as f:
with open(path2, 'w') as f2:
for i, line in enumerate(f):
if i % 2 == 0:
line = line.strip() * (i + 1) + '\n'
else:
line = line.upper()
f2.write(line)

with open(path, 'r') as f:
print('{} is'.format(path))
print(f.read(), end='')
with open(path2, 'r') as f2:
print('{} is'.format(path2))
print(f2.read(), end='')
shutil.move(path2, path)
162デフォルトの名無しさん:2012/07/31(火) 14:46:13.83
Windows 上で stdin から nonblocking で read したいのです。
threading.Thread で worker thread の中で sys.stdin.read() で
希望に近い動作にはなったのですが、
main thread が終了しても worker thread が終了してくれません。
setDaemon(True) は実行しています。
main thread は無事終了しても、結局 worker thread が
sys.stdin.read() で dead lock 状態になるようです。
worker thread を強制終了する方法はありますか?
163デフォルトの名無しさん:2012/07/31(火) 14:48:27.81
質問がぼやけてるな
164デフォルトの名無しさん:2012/07/31(火) 14:53:08.28
>Windows 上で stdin から nonblocking で read したいのです。

無理

>threading.Thread で worker thread の中で sys.stdin.read() で

それは正しい

>worker thread を強制終了する方法はありますか?

無理
165デフォルトの名無しさん:2012/07/31(火) 15:05:49.84
_Thread__stop()
166デフォルトの名無しさん:2012/07/31(火) 15:12:18.20
>>165
出来ました。
ありがとうございました。
ttp://docs.python.org/library/threading.html
とか、
ttp://www.python.jp/doc/release/library/threading.html
とか、
どこ読んでも書いてなかったんですが、
軽々しく使っても良いメソッドなんでしょうかね?
あまりにあっさり動いたので有難く使わせてもらいますが。
167デフォルトの名無しさん:2012/07/31(火) 15:13:26.45
訂正します。

x あまりにあっさり動いたので

o あまりにあっさり止まったので
168デフォルトの名無しさん:2012/07/31(火) 15:30:42.24
気になるならここ嫁
ttp://coding.derkeiler.com/Archive/Python/comp.lang.python/2011-08/msg00233.html

ttp://code.activestate.com/recipes/576780-timeout-for-nearly-any-callable/

Claims that a Python thread can be stopped by executing the private
method "Thread._Thread__stop". I don't think this is true, since
_Thread__stop doesn't really stop or kill the thread. In conformance
to theory, the "timelimited" method this recipe defines leaves a
thread running in the background if the function it's given is
long-running (or infinite). Is there something I'm missing?
169デフォルトの名無しさん:2012/07/31(火) 15:59:06.34
>>162
こんなのは無事に動いたんだけど、
あなたのsys.stdinに書き込む人が、
stdinを閉じていないだけとかって落ちじゃないの?
以下のようにしてみたら、うまく動作しない?
echo abc | python3 a.py

import threading
import time
import sys

class ThreadWorker(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
print("Worker Start.")
time.sleep(1)
while True:
r = sys.stdin.read()
if not len(r):
break
print('r = "{}"'.format(r))
print("Worker end.")

if __name__ == "__main__":
thread = ThreadWorker()
thread.start()
print('ThreadWorker is created.')

thread.join()
print('ThreadWorker is joined.')
170デフォルトの名無しさん:2012/07/31(火) 16:40:17.78
>169
sys.stdin に書き込む人は、
書き込まれる側のプロセスが終了するのを待っているので、
勝手に閉じる訳にはいかないのです。
171デフォルトの名無しさん:2012/07/31(火) 16:43:50.80
あと、自分が書いたプログラムは、>169 さんとほとんど同じです。
172デフォルトの名無しさん:2012/07/31(火) 16:50:01.85
もうちょっと具体的に言いますと、
a.py (>169 さんとほとんど同じ)
b.py (subprocess.Popen で引数に stdin=PIPE 指定して a.py を作っています。)
subprocess.Popen の戻り値を p とすると、
p.poll() で終了待ち判定している間に、同時に時々 p.stdin に書き込みます。
ただし b.py から強制終了させるのではなく、
あくまで a.py 自身が必要な作業が終わったら、自分で終了する形です。
b.py 側で p.stdin を close() してしまうと都合が悪いのです。
173デフォルトの名無しさん:2012/07/31(火) 16:57:20.70
それで、 a.py が生きている間は、 p.stdin へ書き込みつつ、
p.poll() で a.py が終了したと判れば、 p.stdin を close() 出来るのですが、
a.py 側で worker thread が終わらない限り、
p.poll() で終了判定出来なかったということです。
174デフォルトの名無しさん:2012/07/31(火) 17:48:26.80
>>173
なら、a.pyのmain threadに以下のように書き込みをさせて、
sys.stdout.wite('a.py finalizing now...')
sys.stdout.wite('a.py finished.')

b.pyの方でstdout=PIPEも指定して、
if p.stdout.readline() == 'a.py finalizing now...':
pass
if p.stdout.readline() == 'a.py finished.':
pass
とでもしたら?
175デフォルトの名無しさん:2012/07/31(火) 18:02:32.60
a.py の stdout には別の内容を書き出しているので、
関係ないものを出力出来ません。あしからず。
176デフォルトの名無しさん:2012/07/31(火) 18:05:22.60
条件後出し過去悪い
177デフォルトの名無しさん:2012/07/31(火) 18:09:34.16
パイプにこだわらずに別のプロセス間通信でやれば?
178デフォルトの名無しさん:2012/07/31(火) 18:16:04.94
じゃあ、stderrか、
a.pyが適当なfileを作成するか、
a.pyが親にsignalを送るか、


windowsだとsignal駄目だっけ?
179デフォルトの名無しさん:2012/07/31(火) 19:01:29.40
一応、
_Thread__stop()
で、
動作的にはとてもスッキリ解決しているのです。
心情的にマニュアル外の使い方がどうかという話な訳でして。
180デフォルトの名無しさん:2012/07/31(火) 19:10:15.90
>>171
嘘だろ
後からお前が書いてる内容だと
全然違うんじゃね?
181デフォルトの名無しさん:2012/07/31(火) 19:12:42.80
>180
すみません。
確かにそういう意味ではそうですが、
プログラムの大まかな流れとか、
stdin.read() を worker thread に入れる方法に関しては、
>169 さんとほとんど同じです。
182デフォルトの名無しさん:2012/07/31(火) 19:18:20.19
>>179
解決したんなら気にすんな
あといちいち一言多い
うざい
183デフォルトの名無しさん:2012/07/31(火) 19:37:44.14
a.py の方で stdin を close 出来れば良いかもしれないと思い、
thread.join() の代わりに os.close(0) # fd:0 = stdin
を書いてみたりもしたのですが、
blocking read 中は close 出来ないらしく、
dead lock 状態の上にさらに dead lock を重ねるという、
最悪の状態になってしまいました。
184デフォルトの名無しさん:2012/07/31(火) 19:39:30.23
あと、
del thread
でも、thread は終了しませんでした。
185デフォルトの名無しさん:2012/07/31(火) 19:52:13.08
どうでもいいけどsys.stdinに書き込みは出来ないのかな?
186デフォルトの名無しさん:2012/07/31(火) 20:39:25.50
パイプ使うのやめたら?
187デフォルトの名無しさん:2012/07/31(火) 21:52:07.75
b.py 側で
p.stdin.write('please finish.\n')
としたら?

a.pyでは
if sys.stdin.readline() == 'please finish.':
something()
break

でいいんじゃない?
これが駄目なら、もう知らん。
188デフォルトの名無しさん:2012/07/31(火) 21:53:52.34
予告してやろう
もう知らんといいつつも、世話好きのお前らはレスを続けるのだ
189デフォルトの名無しさん:2012/08/01(水) 00:33:23.10
>>187
>あくまで a.py 自身が必要な作業が終わったら、自分で終了する形です。
190デフォルトの名無しさん:2012/08/01(水) 00:53:45.51
こんにちは。
__doc__でクラスや関数のドキュメンテーション文字列を取得できますが
ある関数で__doc__が呼ばれたときにその関数内に書かれたドキュメンテーション文字列に
別の場所の文字列を連結して返すことってできるのでしょうか?
191デフォルトの名無しさん:2012/08/01(水) 01:03:28.13
これでいいかよ、ちくしょー。

# a.py
# in main thread.
sys.stderr.write('main thread done.\n')
thread.join()

# b.py
if p.stderr.readline() == 'main thread done.':
p.stdin.write('please finish.\n')
p.stdin.close()

# a.py
# in worker thread.
if sys.stdin.readline() == 'please finish.':
something()
break

# a.py
# in main thread.
logger('a.py done.')
192デフォルトの名無しさん:2012/08/01(水) 01:04:20.14
>>190
可能。
                               以上。
193デフォルトの名無しさん:2012/08/01(水) 01:15:44.06
こんにちは。
pythonでjson整形をしたいのですが、わからない点があります。
御教授ください。
環境は cygwin の python 2.6.7 になります。
jsonが記述されたファイルを test.jsonとします。
中身は
{"Data":{"Path":"file:test_path1","Type":"General","value0":0.5,"value1":0.5,"value2":20,"str_list":["aaa","bbb","ccc","ddd","eee"]}}
だけです。

これを
コマンドラインにて、
pythosn -m json.tool test.json
とすることによって整形されるのを期待しています。
しかし、これを実行すると
No JSON object could be decoded
といわれてしまいます。
JSON objectとして認識されるにはテキスト先頭になにかプレフィックスとかがないとだめなのでしょうか?
ちなみに
echo '{"Data":{"Path":"file:test_path1","Type":"General","value0":0.5,"value1":0.5,"value2":20,"str_list":["aaa","bbb","ccc","ddd","eee"]}}' | | python -m json.tool
だと期待する結果になります。
194193:2012/08/01(水) 01:17:23.49
>>193
あ、最後、まちがいです
>echo '{"Data":{"Path":"file:test_path1","Type":"General","value0":0.5,"value1":0.5,"value2":20,"str_list":["aaa","bbb","ccc","ddd","eee"]}}' | | python -m json.tool

ではなく

echo '{"Data":{"Path":"file:test_path1","Type":"General","value0":0.5,"value1":0.5,"value2":20,"str_list":["aaa","bbb","ccc","ddd","eee"]}}' | python -m json.tool

です。
195デフォルトの名無しさん:2012/08/01(水) 01:26:12.37
utf-8のBOMが付いててエラーになってるとか?
196デフォルトの名無しさん:2012/08/01(水) 03:10:17.22
>>195
> utf-8のBOMが付いててエラーになってるとか?
はい、なんかそれっぽいです。
保存したファイルがutf-8でした。
shift_jisにしてみたところ期待通りの結果になりました。
ありがとうございます。
ちなみにutf-8のまま行うにはどうしたらいいんでしょう?
入力されてくるファイルがデフォでutf-8なのでフォーマットをいじれないのです。
一度変換をかけるしかないのでしょうか?
197デフォルトの名無しさん:2012/08/01(水) 03:18:38.28
それって、何かに自分で書いたのを、
「名前を付けて保存」で保存したんじゃない?

echo '{}' > empty.json
としたのを読み込むとどうなる?
198デフォルトの名無しさん:2012/08/01(水) 03:19:53.64
↑の後、こうやるんだよ。
python -m json.tool < empty.json
199デフォルトの名無しさん:2012/08/01(水) 03:23:02.10
>>198
{}
という結果になります。

>それって、何かに自分で書いたのを、
>「名前を付けて保存」で保存したんじゃない?
元データは C#のDynamicJsonを使って吐き出されています。
出力結果はutf-8。
200デフォルトの名無しさん:2012/08/01(水) 05:14:28.00
echo '{"Data":{"Path":"file:test_path1","Type":"General","value0":0.5,"value1":0.5,"value2":20,"str_list":["aaa","bbb","ccc","ddd","eee"]}}' > empty.json
とした後に右足の靴下を脱いでみようか。
201デフォルトの名無しさん:2012/08/01(水) 05:36:06.49
BOMの消し方ぐらいググれよ
202デフォルトの名無しさん:2012/08/01(水) 06:17:43.50
>191
>p.stderr.readline()

b.py の方が block してしまうので駄目です。
203デフォルトの名無しさん:2012/08/01(水) 06:23:41.60
.replace(/^・ソ/,"")
204 【だん吉】 :2012/08/01(水) 08:14:56.82
おはよう
205デフォルトの名無しさん:2012/08/01(水) 09:31:30.72
>>161
ありがとうございます。
頑張って読んでみます。
206デフォルトの名無しさん:2012/08/01(水) 10:35:27.34
>>161
これってtech155.txt.tmpの内容をtech155.txtに書き込むプログラムですよね。
for i in range(26):とfor i, line in enumurate(f):の中身がちょっとわからないです...
207 【大吉】 :2012/08/01(水) 11:04:03.61
今日のみなさんの運勢
208 【大吉】 :2012/08/01(水) 12:36:17.70
ほい
209デフォルトの名無しさん:2012/08/01(水) 14:44:34.25
>>206
tech155.txt(=path)の
第0行目に'a', 第1行目に'b', 第2行目に'c', ....を書き込む。
都合、26文字(a-z)書き込むことになる。

tech155.txt を一行ずつ読んで(for i, line in enumerate(f):)
いって(一番上の行はi=0, line='a\n')、
0, 2, 4, ... 行目(i % 2 == 0)なら、
その行の内容(=line)から前後の空白改行を削って(=line.strip())から、
その内容を(行数+1) だけ連続させて、
tech155.txt.tmp(=path2) に出力(f2.write(line))。
1, 3, 5, ... 行目(else)なら、
その行の内容(=line) を 大文字に変更して、
tech155.txt.tmp に出力。

最後に、
tech155.txt.tmp で tech155.txt を上書き保存。
210デフォルトの名無しさん:2012/08/01(水) 15:49:26.02
ISAM でも作る気ですか?
211 【だん吉】 :2012/08/01(水) 17:12:48.40
test
212デフォルトの名無しさん:2012/08/01(水) 21:50:15.98
Macにて絶対パスを以下のように取得しています。
os.path.abspath("./")
しかしこれをコールする際のカレントディレクトリによって、
/Usersから始まる場合と/Volumes/Macintosh\ HD/Usersと始まる場合があります。
原因がわかる方がいましたら教えてください。
よろしくお願いします。
213デフォルトの名無しさん:2012/08/01(水) 22:04:28.06
それぞれのカレントディレクトリで
python -V
214デフォルトの名無しさん:2012/08/02(木) 00:12:45.47
>>212
"./" の意味分かってる?
215デフォルトの名無しさん:2012/08/02(木) 00:46:48.68
"~/"と勘違いしてんのかな?
216デフォルトの名無しさん:2012/08/02(木) 00:48:17.52
いや実は俺もそうじゃないかと前から
217デフォルトの名無しさん:2012/08/02(木) 05:14:00.14
告白タイム
218デフォルトの名無しさん:2012/08/02(木) 10:34:38.40
>>209
理解できました。ありがとうございます。

161のコードなんですが、パスでtextファイルを指定するのではなく、
このスクリプトと同じところにあるtxt,txt.tmpを指定するっていうことは可能でしょうか?
219デフォルトの名無しさん:2012/08/02(木) 11:36:43.27
__file__見てゴニョゴニョやる
220デフォルトの名無しさん:2012/08/02(木) 12:15:22.59
path = '/tmp/tech155.txt'
path2 = path + '.tmp'
221デフォルトの名無しさん:2012/08/02(木) 13:12:34.73
質問です。
教則本を読みながらBMI指数を判定するプログラムを書いてたのですが、エラーが起きてしまいます。
何度見返しても教則本と同じように書いてあります。
コードは。。。


#coding:utf-8

while True:
height = raw_input('身長(m)?:')
if len(height) == 0:
break
height = float(height)     
weight = float(raw_input('体重(kg)?:'))
bmi = weight / pow(height,2)

print('BMI値は%0.1fです。' % bmi)
if bmi < 18.5:
print('少しやせすぎです。')
elif 18.5 <= bmi < 25.0:
print('標準的な体系です。')
elif 25.0 =< bmi < 30.0:
print('少し太っています。')
else 30.0 =< bmi:
print('高度の肥満です。')
 
です。
7行目の height = float(height) が間違っていると出ます。
ちなみにバージョンは2.71です。
お願いします。
222デフォルトの名無しさん:2012/08/02(木) 13:34:36.39
>>221
height = float(height)の直後に全角の空白文字があるのが原因だと考えられます

質問の際は重要なヒントであるエラーメッセージを必ず全文載せてください
あとバージョン2.x系はprint文を()でくくる必要が無いです
223デフォルトの名無しさん:2012/08/02(木) 14:40:03.89
うんこしたら体重が1500g減った
224デフォルトの名無しさん:2012/08/02(木) 14:52:55.19
>>222
ありがとうございます
無事完成しました
225デフォルトの名無しさん:2012/08/02(木) 19:38:20.74
子から親のメソッドは使えるけど、
dirで親のメソッドが表示されないようにするには、どうすればいいですか?
226デフォルトの名無しさん:2012/08/02(木) 20:22:44.52
>>225
class-privateは、Pythonの場合 アンダースコア2つのprefix付きで命名する

dir()での表示のみが重要なら、__dir__メソッドを実装してdirで返すメンバ一覧にフィルター掛ける

# クラス内で定義。充分なテストはしてないので例外的なケースはあるかもしれない。叩き台にどぞ。
def __dir__(self):
  return self.__class__.__dict__.keys()

特に理由がなければ、クラス毎にdirの振舞を変えるよりも(副作用が心配)
親クラスのメンバを返さない版のdirに相当する関数作って使った方が楽。
227デフォルトの名無しさん:2012/08/02(木) 21:05:22.12
>>226
ありがとうです。
たまにdir使っても出てこないメソッドとかあるので、これどうやってるのかと疑問に思ってました。

叩き台から、以下のコードにしてみました。これなら副作用無いかも
>>> class A:
    def __new__(cls):
        def __dir__(self):
            return cls.__dict__.keys()
        cls.__dir__ = __dir__
        return object.__new__(cls)
    def hoge(self):
        pass


>>> class B(A):
    def fuga(self):
        pass


>>> a = A()
>>> b = B()
>>> dir(a)
['__dict__', '__dir__', '__doc__', '__module__', '__new__', '__weakref__', 'hoge']
>>> dir(b)
['__dir__', '__doc__', '__module__', 'fuga']
>>> b.hoge()
>>>
228デフォルトの名無しさん:2012/08/02(木) 21:54:10.35
疑問に思ってたクラスみてたら親クラスにだけ__dir__定義されてました。
なので叩き台のとおり親クラスに以下のメソッドが追加されてるだけのようです。
def __dir__(self):
 return self.__class__.__dict__.keys()

疑問解決しました。ありがとうございました。
229デフォルトの名無しさん:2012/08/02(木) 22:55:53.16
プログラミングを始めたいのですが、Pythonから始めても大丈夫ですか?
230デフォルトの名無しさん:2012/08/02(木) 23:10:35.54
大丈夫です
自分もpythonから始めました
231デフォルトの名無しさん:2012/08/02(木) 23:12:09.47
英語ができるならね(キリッ
232デフォルトの名無しさん:2012/08/02(木) 23:14:35.46
英語がないと不自由なのはどの言語でも一緒
233デフォルトの名無しさん:2012/08/02(木) 23:17:25.78
いきなりPythonに興味を持ったきっかけが気になる
234229:2012/08/02(木) 23:18:03.85
どの位の英語の知識が必要になりますか?
あと簡単なゲームなら作れますか?
質問ばかりですみません
235デフォルトの名無しさん:2012/08/02(木) 23:38:55.74
>234
どんなゲームが作りたいですか?
236デフォルトの名無しさん:2012/08/02(木) 23:44:36.58
237229:2012/08/03(金) 00:00:26.09
>>235
まず凄く簡単なゲームを作りたいです
それから、RPGのようなゲームを作れるといいです
>>236
英語も一緒に勉強した方が良さそうです・・・
238デフォルトの名無しさん:2012/08/03(金) 00:03:15.31
ttp://d.hatena.ne.jp/aidiary/20080507/1269694935
ここら辺見ればいいんじゃないかな
239229:2012/08/03(金) 00:06:09.63
>>238
ご丁寧にありがとうございます
それを元に勉強しようと思います

他の方々も無知な私のためにお時間を割いていただきありがとうございました
240デフォルトの名無しさん:2012/08/03(金) 10:16:56.23
ここに富士山の画像があります。
ttp://live-fuji.jp/calender/
一年を通じて4:00から19:50までの画像限定で、
○快晴で山頂から麓まで全体が見えている画像
○雲は出ているが山頂は見えている画像
○曇りまたは雨で山頂が全く見えない画像
○撮影に失敗していると思われる画像
それぞれの枚数を数えて、
各時間ごと(10分単位)のそれぞれの日数を出力したいです。
Pythonではどのようにプログラムを書けばよいのでしょうか?
画像のURLはこちらです。
ttp://live-fuji.jp/hi-fuji/YYYYmmdd/HHMM.jpg
241デフォルトの名無しさん:2012/08/03(金) 10:51:54.25
242デフォルトの名無しさん:2012/08/03(金) 11:50:52.52
パスの設定すら出来ん・・・
どうすりゃいいの?
243デフォルトの名無しさん:2012/08/03(金) 17:50:02.92
>>240
画像を取得する部分、
どのような画像か判定する部分
に分けて頑張れ。

>>242
windows, linuxのどちらか、
またそのバージョン、どこからPythonを入手したか。
ぐらい言ってくれないと話にならない。
244デフォルトの名無しさん:2012/08/03(金) 19:03:50.87
pwd.getpwnam('hoge').pw_passwd = shalib.md5_encode(password, md5_salt)
245デフォルトの名無しさん:2012/08/03(金) 19:05:55.16
>>240
同じアングルで撮ってて、
毎回同じ位置に頂上がある。
っていう条件はかなり恵まれてるぞ。
246デフォルトの名無しさん:2012/08/05(日) 09:13:47.82
Cしかやったことないので今日みんpy読み始めた
頑張るぞ
247デフォルトの名無しさん:2012/08/05(日) 15:04:30.61
Cを知ってるのならPythonチュートリアルで十分
248デフォルトの名無しさん:2012/08/05(日) 15:33:19.21
mjk
確かにもう半分ぐらい読み終わったわ
オブジェクト指向言語は初めてなので、本買っちゃった。まあいいか
249デフォルトの名無しさん:2012/08/05(日) 15:59:23.52
Pythonはオブジェクト指向入門にはベストではない気がする
OOP向け機能が盛りだくさんのJavaやC#がイメージつかみやすい
250デフォルトの名無しさん:2012/08/05(日) 16:30:45.34
>>249
え、全くそうは思わないんだけど…
251デフォルトの名無しさん:2012/08/05(日) 17:27:16.92
馬鹿には無理
252デフォルトの名無しさん:2012/08/05(日) 19:49:21.54
JavaやC#の解説書は多いけどOOPの解説書ではないからなあ
結局、別に書籍を購入することになる
253デフォルトの名無しさん:2012/08/06(月) 05:33:05.88
個人的には、Cでオブジェクト指向を実現している実装を眺めてみるというのが意外と良かったです。
まぁ、オブジェクト指向言語の便利な機能とかは知ることが出来ないけれど。
あ、スレチですね。
254デフォルトの名無しさん:2012/08/06(月) 08:29:11.24
pythonスタートブックでプログラミングの勉強しようと思います。
この本で学んだことだけでどんな事ができるようになりますか?
255デフォルトの名無しさん:2012/08/06(月) 08:42:07.63
書いてあることができるようになります
256デフォルトの名無しさん:2012/08/06(月) 12:51:45.57
pythonでゲーム作るならpygame一択?
257デフォルトの名無しさん:2012/08/06(月) 13:37:01.67
pyglet一択
258デフォルトの名無しさん:2012/08/06(月) 17:29:24.57
        _______∩_∩
     /   ノ ヽ (  ノ⊂ ̄))) ̄⊃
     /|ヽ  (_ノ  ._ ̄  0'ヽ 0'
    / |ノ  .)    (_)  ヽ  i (   むしゃむしゃしていた。
 ∋ノ |  /――、__  ./(∩∩)  草なら何でもよかった。
      / /| ヽ__ノ   | / ./     今は反芻している。
    | (  | ( ’’’    | ( /
    |__ヽ. L_ヽ        Lヽ_ヽ
''" ""''"" "'''''" ""''"" ''" ""''"" ''" ""''"" ''" ""''"" "''
259デフォルトの名無しさん:2012/08/06(月) 19:08:53.20
importについて聞きたいんですが

下のような構造になっている時にb.pyからa.pyをimportするにはどうすればいいのでしょうか?

folder
-folder1
--a.py

-folder2
--b.py
260デフォルトの名無しさん:2012/08/06(月) 19:16:24.76
sys.addpath
261デフォルトの名無しさん:2012/08/06(月) 19:20:42.39
sys.path.append('folder')
from folder1 import a.py


http://docs.python.org/library/sys.html
sys.path
A list of strings that specifies the search path for modules.
Initialized from the environment variable PYTHONPATH,
plus an installation-dependent default.
As initialized upon program startup, the first item of this list,
path[0], is the directory containing the script that was used to invoke
the Python interpreter. If the script directory is not available
(e.g. if the interpreter is invoked interactively or if the script is
read from standard input), path[0] is the empty string, which directs
Python to search modules in the current directory first.
Notice that the script directory is inserted before the entries
inserted as a result of PYTHONPATH.

A program is free to modify this list for its own purposes.

Changed in version 2.3: Unicode strings are no longer ignored.

See also

Module site This describes how to use .pth files to extend sys.path.
262デフォルトの名無しさん:2012/08/06(月) 19:20:49.37
>>259
tp://d.hatena.ne.jp/chlere/20110618/1308369842

「python import 相対パス」で検索
263デフォルトの名無しさん:2012/08/06(月) 21:58:38.93
馬鹿には無理
264デフォルトの名無しさん:2012/08/06(月) 22:54:48.18
もっと、
熱くなれよぉおおお!!
   ____
  _/三三三ミ\
 /ミ>―=≡ミミヽ
`|ミ/    ヽミ|
 ヒイ ==ヽノ== |ミ|
 ||ィ・>ii<・ヽV)
 `(  ||   ソ
  | ノヽノヽ /
  ∧ <二>i/|_
 / ∧  ̄ / / \
/\ ヽーイ / /\
  T ̄ヽ / ̄T
  |  | /  |
265デフォルトの名無しさん:2012/08/07(火) 02:29:42.30
馬!鹿!に!は!無!理!
266デフォルトの名無しさん:2012/08/07(火) 21:26:20.02
>>259
from ..folder1 import a
という書き方もできるで
267デフォルトの名無しさん:2012/08/07(火) 22:44:33.22
__init__.py が無いと無理じゃなかった?>相対パスでimport
268デフォルトの名無しさん:2012/08/08(水) 09:50:22.56
__init__.py を書けば医院で内科医
269デフォルトの名無しさん:2012/08/08(水) 16:39:34.86
OSの種類とfolderの意味合いにもよるが、folder1にb.pyへのリンクを張る手もある
270269の訂正:2012/08/08(水) 17:59:30.81
× folder1にb.py
○ folder2にa.py
271デフォルトの名無しさん:2012/08/09(木) 02:29:04.65
半角全角混合の文字列を折り返したいのですが
標準のtextwrapだといろいろ綺麗に行かない感じです
この手の処理でpythonの定番ライブラリがあれば教えてください
272デフォルトの名無しさん:2012/08/09(木) 05:59:55.00
バージョン2系での文字化けは、引数をUnicode文字列に変換すれば防げる
273デフォルトの名無しさん:2012/08/09(木) 06:30:43.84
一部の階層の人間がその他の階層の人間を搾取横領する構造は、過去も現在も変わりません。
搾取する階層が自らを「勝ち組」と称し他を「負け組」とさげすむ真の理由は、
「負け組」が生産しなければ「勝ち組」のための現在の体制を維持できなくなるところにあります。
「勝ち組」が提供する価値観は「勝ち組」の利益のため「負け組」に押し付けたものです。
こんな価値観は放棄するのが賢明ではないでしょうか。

・競争しません。負けるが勝ち。
・奢侈品・自家用車・住宅は取得を目指しません。これを目的にした貯蓄も行いません。
・性衝動はその目的を達成しない形で発散します。結婚を目指しません。自慰で性欲を封じ込めます。
・労働、消費、出産、育児など生産性を促す社会活動には極力参加しません。
・テレビ・雑誌などのマスメディアは、必要でないものを消費させるため私たちを扇動しています。彼らに耳を貸さないのが賢明でしょう。
・受け取る報酬以上の仕事はしません。真面目・努力・忍耐・無償の行為は勝ち組の捏造した価値観でしかありません。
・人生や行動に目標を作りません。無理をしません。頑張りません。夢はみません。希望はもちません。淡々と生きるだけです。

勝ち組だろうが負け組だろうが人生の最後に行き着くところは結局「死」です。結果は同じです。

(参考)吉田兼好(1283-1350) 徒然草 第38段
「名利に使はれて靜かなる暇なく、一生を苦しむるこそ愚かなれ。」
富が多いければ災いも多い。金は山に捨て、宝石は川に投げ込むべきだ。
知性と教養にこだわるとは人の評価にこだわることである。
それでも知性と教養を磨きたいという人には「知恵は嘘を生む」と言っておこう。
教養も結局は人間の欲望の積み重ねでしかなく、知ったこと、学んだことは本当の教養ではない。
本当の教養とは、善も悪も根本は同じであり、本当の善など存在しないと悟ることである。
真の人間にとっては、知性も教養も功績も名声もどうでもいい。これは教養を隠して愚か者のふりをすることではない。こういう人は元来、教養や損得勘定には無縁なのである。
迷妄にとらわれて富と名声を追い求めることは無意味なことであって、論ずるに値しないし望むに足らぬことなのである。
274デフォルトの名無しさん:2012/08/09(木) 08:31:19.88
英数と日本語がどっちも1字で数えられて揃わないとかスペースで区切られるとかのやつか?
誰か日本語対応版作っていたような気がするけど
275デフォルトの名無しさん:2012/08/09(木) 11:31:51.36
unicodedata.east_asian_widthでいちいち数えるのは面倒くさい
276デフォルトの名無しさん:2012/08/09(木) 11:45:14.48
これかな?
http://bazaar.launchpad.net/~bzr-pqm/bzr/bzr.dev/view/head:/bzrlib/utextwrap.py
bzrlib.osutilsを使っているところは適当に直してね
277デフォルトの名無しさん:2012/08/09(木) 21:04:12.52
NLTKを使おうと思っていれたはいいが,IDLEではImportできるのにpydevではimport errorになってしまう・・・
どなたか解決方法を教えて下さい.環境はWindows 7 64bit + Python2.7 32bit + NLTK 2.0.2です
278デフォルトの名無しさん:2012/08/09(木) 21:44:51.65
馬鹿には無理
279デフォルトの名無しさん:2012/08/10(金) 01:00:35.59
もっと、 熱くなれよぉおおお!!
280デフォルトの名無しさん:2012/08/10(金) 01:13:13.78
馬!鹿!に!は!無!理!
281デフォルトの名無しさん:2012/08/10(金) 01:23:28.20
は!か!た!の!し!お!
282デフォルトの名無しさん:2012/08/10(金) 13:20:21.62
最近勉強を始めたものです。
皆さんはどんなOS上で実行されていますか?
私はWin7_64bitなのですがライブラリが対応していないことが多くて...なんでなんだろうと。
OS考えたほうがいいんですかね。
283デフォルトの名無しさん:2012/08/10(金) 14:17:07.04
私もWin7_64bitなのですが特に困っていませんね。
284デフォルトの名無しさん:2012/08/10(金) 14:19:22.54
Pythonのバージョンも何のライブラリかも言わないと答えようがないだろ
285デフォルトの名無しさん:2012/08/10(金) 14:34:46.92
というか対応してないのはx64版Pythonであって
x86版PythonをWin7-64bitで動かす分には対応してないライブラリなんてほとんどない

あ、Python3は無しね
あんなものユーザー数的にメインストリームじゃないし
286デフォルトの名無しさん:2012/08/10(金) 14:43:13.45
>>282

Python 2.7.3 Windows Installer (Windows binary -- does not include source)
Python 2.7.3 Windows X86-64 Installer (Windows AMD64 / Intel 64 / X86-64 binary [1] -- does not include source)
Python 3.2.3 Windows x86 MSI Installer (Windows binary -- does not include source)
Python 3.2.3 Windows X86-64 MSI Installer (Windows AMD64 / Intel 64 / X86-64 binary [1] -- does not include source)

どれ入れてます?
287デフォルトの名無しさん:2012/08/10(金) 15:37:31.09
pythonの64ビット対応は早かったのに周辺ライブラリの対応は鈍いね
288デフォルトの名無しさん:2012/08/10(金) 15:40:24.13
鈍いってか意味ないと思われてるんだろ
Pythonはマルチスレッドよりマルチプロセスの方が有効だからアドレス空間無理に増やす必要性もない
289デフォルトの名無しさん:2012/08/10(金) 22:15:36.67
linux amd64/vista 32 自分でビルドしてる分にはライブラリで特に困ったことはない。

64bit用のバイナリが配布されてないだけって事はないかな?
ビルドできる環境があるかどうかでも、人によって使えるライブラリに差が出ると思う。
290デフォルトの名無しさん:2012/08/10(金) 22:57:13.22
mingw? cygwin? msvc2008?
291デフォルトの名無しさん:2012/08/10(金) 23:51:49.11
ActivePython/mingw

使ったことないけど、ActivePython なら pypm もある ttp://code.activestate.com/pypm/search:/
※ windows 64bit はビジネス・ライセンスが必要らしい
... EPD もFree版は win/64 非対応だっけ。個人利用でwin/64は優しくなさそう。

ちょっと試したいだけなのに、MinGWだとビルド失敗したり、
コンパイルが必要な依存ライブラリが沢山あって、環境作るのが面倒な場合は、
非公式のバイナリ使わせてもらってる。

ttp://www.lfd.uci.edu/~gohlke/pythonlibs/
292デフォルトの名無しさん:2012/08/11(土) 00:27:36.35
一応MinGWもCygwinも試してはいるな
Mercurialが必要だったりSVNの宣言削ったりちょこちょこ手を入れる必要があったけど

VCはC言語の皮を被っただけの言語だからパスだ
293デフォルトの名無しさん:2012/08/11(土) 00:32:18.48
ときどきあれ?通らない?ってことがあるから
64用も置いておいてくれると有難いよな
294デフォルトの名無しさん:2012/08/11(土) 00:35:21.03
誰か最新のlxmlをWindowsでビルドしてくれよ
lxml→libxslt→pthread for win32ってうっきょおおおおおおおおおお

libxml2
295デフォルトの名無しさん:2012/08/11(土) 01:01:41.73
文字コードについて質問させてください

例えば「あいう」というunicode文字列があって,これをeuc-jpでエンコードすると
>>> u'あいう'.encode('euc-jp')
'\xa4\xa2\xa4\xa4\xa4\xa6'
となります.

ここでu'\xa4\xa2\xa4\xa4\xa4\xa6'というユニコード文字列があったときに
'\xa4\xa2\xa4\xa4\xa4\xa6'をstrとして取り出すことってできますか?

感じとしてはstr(u'\xa4\xa2\xa4\xa4\xa4\xa6')としいたいのですが
これだと
'\xc2\xa4\xc2\xa2\xc2\xa4\xc2\xa4\xc2\xa4\xc2\xa6'
となってしまいます.
296デフォルトの名無しさん:2012/08/11(土) 01:15:03.71
>>295
こうかな。
u'\xa4\xa2\xa4\xa4\xa4\xa6'.encode('raw_unicode_escape')

変なunicode文字列を作るコードが標準ライブラリにも入ってるから困る。
http://d.hatena.ne.jp/itasuke/20080703/p1
297デフォルトの名無しさん:2012/08/11(土) 01:27:03.38
>>296
できました!
ありがとうございます!
298デフォルトの名無しさん:2012/08/11(土) 06:26:09.57
>>294
最新って開発版?リリースの最新版なら >>291下のリンク先にバイナリのパッケージ有

ビルドの手順はどうしてる?
* ttp://lxml.de/build.html#static-linking-on-windows
* ttp://lxml.de/installation.html#ms-windows

> Only if you want to upgrade the libraries and/or compile lxml from sources,
> you should install a ***binary distribution*** of libxml2 and libxslt.
> You need both libxml2 and libxslt, as well as iconv and zlib.


依存含めて全部ソースからビルドしたい場合は、
コンパイラだけでなくsh等周辺ツール含めたビルド環境構築が必要になってくるので、
ある程度、POSIXに準拠したライブラリのビルドに慣れてないと難しい。
299デフォルトの名無しさん:2012/08/11(土) 09:04:34.89
この流れなら適切
「馬鹿には無理」
300デフォルトの名無しさん:2012/08/11(土) 10:54:17.64
お前こんなとこにもいるのかよ
暇だねー
301デフォルトの名無しさん:2012/08/11(土) 18:11:03.25
もっと、熱く(ry
302デフォルトの名無しさん:2012/08/11(土) 19:36:10.96
ここ超初心者スレだからな
小学校の校門で「社会は厳しいんだぞ!!」と叫んでる感じ
303デフォルトの名無しさん:2012/08/11(土) 19:58:02.43
pass
304デフォルトの名無しさん:2012/08/11(土) 20:40:34.08
yield
305デフォルトの名無しさん:2012/08/12(日) 09:10:33.42
print()
306デフォルトの名無しさん:2012/08/13(月) 07:19:06.28
textファイルの最後に文を書き足したいのですが、
f = open("a.text", "w")
f.write(a)
f.close
だと上書きしてしまいます。
上書きせずに続きから書き込むにはどうすればいいでしょうか?
307デフォルトの名無しさん:2012/08/13(月) 07:23:10.57
308デフォルトの名無しさん:2012/08/13(月) 13:00:12.30
>>302
せ、切ないな…
309デフォルトの名無しさん:2012/08/13(月) 13:05:50.83
大人の、のび太がガキ大将してるんでしょ。
310デフォルトの名無しさん:2012/08/13(月) 14:32:30.23
pass
311デフォルトの名無しさん:2012/08/13(月) 15:22:08.14
pythonってシングルクォーテーションとダブルクォーテーションって違いはないんですかね
312デフォルトの名無しさん:2012/08/13(月) 15:41:31.43
あります
313デフォルトの名無しさん:2012/08/13(月) 16:34:00.53
http://docs.python.org/library/dbhash.html#module-dbhashに
Deprecated since version 2.6: The dbhash module has been removed in Python 3.
って書いてあるんだけどさ

じゃあWindows版Python3のshelveは何使ってるの?
まさかdumbdbmだとしたら使うの躊躇っちゃうな
314デフォルトの名無しさん:2012/08/13(月) 16:35:45.27
やさしいPython入門
という本を買ったのですが、
序盤のタートルグラフィックスというところでつまづいています。

具体的には、
import turtle

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named turtle

というエラーをはきます。
何故?
わかる方教えてください。

315デフォルトの名無しさん:2012/08/13(月) 16:39:01.31
>>314
> No module named turtle

これぐらいの英語もわからないと、ちょっと厳しいぞ。
316デフォルトの名無しさん:2012/08/13(月) 16:40:47.91
>>313
悪いけどそのまさかだよ
存分にためらうといいい
317デフォルトの名無しさん:2012/08/13(月) 16:41:53.82
読んで字のごとく、タートルという名のモジュールがありません。

OS, Pythonそれぞれのバージョンを書こうよ。
318314:2012/08/13(月) 16:46:18.96
OSはLinuxのopenSUSEで
Pythonのバージョンは2.7ですが・・・

超初心者だと思って多少は見逃してください(汗
319デフォルトの名無しさん:2012/08/13(月) 16:47:15.48
Tkとturtleが入ってないとかかなあ
Ubuntuなんかでありがち

とりあえず質問者は>>317の最後の行を
320314:2012/08/13(月) 16:50:23.65
>>319
えっとopenSUSE 12.1
Python 2.7.2
でよろしいでしょうか?
321デフォルトの名無しさん:2012/08/13(月) 16:56:39.53
です。リロード遅れた

とりあえずはpython-tkを入れてみて
もしかしたら他のパッケージ(python-develとか?)も要るのかも
322314:2012/08/13(月) 17:02:08.66
>>321
先生!
python-tkを入れる、とはどういうことをいうのでしょうか?
常識でしたら申し訳ありません(超汗
323デフォルトの名無しさん:2012/08/13(月) 17:06:57.70
openSUSEまったく知らないから合ってるか怪しいけどsu/sudoしてzypper install python-tk
もしPythonを自前ビルドしたのなら自分にはお手あげなので詳しい人に助けてもらって
324デフォルトの名無しさん:2012/08/13(月) 17:07:40.03
>Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
>ImportError: No module named turtle
これがエラーの概要です
このエラーに心当たりが無いか探してください
まず,このエラーを日本語で理解しなおせますか

"""
標準入力、モジュール一行目のインポートエラー
”turtle”と言う名前のモジュールが見つかりません
"""
モジュールと言う単語の意味は把握できますか
インポートとは何か理解していますか
単語の意味を一つづつ把握できていますか
”turtle”はモジュール名であり、今からあなたがインポートしようとしているものです
325314:2012/08/13(月) 17:09:27.27
>>321
importすることでしょうか?
そうしましたら
File "<stdin>", line 1
import python-tk
と出まして、
タートルでまた同じエラーをはきます。
326314:2012/08/13(月) 17:11:30.47
時間差で全然違うことかいてますね。
みなさんありがとうございます。
今の情報でやってみます!
327314:2012/08/13(月) 17:23:12.34
みなさま、
ありがとうございます。
>>323
の方法でエラーがなくなりました!
328デフォルトの名無しさん:2012/08/13(月) 17:33:44.40
その本GUIのとこ解説少なすぎて挫折したよ!
329デフォルトの名無しさん:2012/08/13(月) 18:33:48.68
# turtle_example.py
from turtle import *
t = Turtle() # タートルオブジェクト作成(初めて作るときはウインドウも作成されます)
t.circle(50,180) # 反時計回り半径50で180度まで
t.circle(-50,180) # 時計回り半径50で180度まで
t.circle(-100) # 時計回り半径100で360度まで
exitonclick() # ウインドウクリックするまで待機
↑をturtle_example.pyで保存して、
↓を実行したら何かでない?
python3 turtle_example.py

失敗したら失敗理由全てを貼って。
330デフォルトの名無しさん:2012/08/13(月) 18:51:01.12
>>320
その本って3.x系の本をだよね?
331314:2012/08/13(月) 18:56:03.56
>>330
執筆時のバージョンは3.2です。
と書いてありますね・・・
332314:2012/08/13(月) 19:07:56.10
>>329
端末から一行づつ入力すると
中国の陰陽みたいなマークがでます。
保存するとエラーが・・・?
ちょっと待ってください。
見直します。
333デフォルトの名無しさん:2012/08/14(火) 02:01:55.43
[space]# より後は書かなくていいよ。
) まで書いてくれればいい。

端末から一行ずつ入力ではなくて、
コピペして保存すればよろし。
334314:2012/08/14(火) 05:17:24.21
>>333
そうしているのですが・・・

とりあえずこんなエラーがでます。
File "turtle_example.py", line 2
SyntaxError: Non-ASCII character '\xe3' in file turtle_example.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

ファイルに保存してあることは、
一行ずつ入力のときと全く同じなのですが。
335314:2012/08/14(火) 06:14:56.82
>>333
YaSTからPython関連のパッケージをありったけインストールしたら
エラーがなくなり、正常に動作するようになりました。
336デフォルトの名無しさん:2012/08/14(火) 06:37:58.42
パッケージ入れてる最中にソースファイルをいじったりしてないか
# 以降の日本語コメント削るとか

ソースファイル中にASCII以外(日本語等)の文字を含める場合は
文字エンコーディングを指定する必要がある
たとえばエンコーディングがUTF-8ならファイルの一行目に # coding: utf-8 などとする
ちなみに0xE3は「タ」をUTF-8で符号化した場合の1バイト目
337314:2012/08/14(火) 06:45:38.36
>>336
>パッケージ入れてる最中にソースファイルをいじったりしてないか
いえ、してないです。

後半の内容はこれから勉強させてもらいます。
(今の私には難しいです・・・)
338314:2012/08/14(火) 06:50:32.97
もしかしてPythonは
初心者お断りな部分が結構ありますか?
お行儀がよいとは聞いていたのですが・・・
339デフォルトの名無しさん:2012/08/14(火) 07:02:07.42
>>333-334のやり取りで既に意思の疎通が出来てない
PGのまえに人とちゃんと会話する能力身に付けてから来い
340デフォルトの名無しさん:2012/08/14(火) 07:17:19.89
というか戦犯はTurtleが使えるようになって一件落着したのに勝手に問題を増やした>>329

>>337
今の時点ではわからなくても問題ない
入門書相手に自分のペースで勉強してわからなくなったら質問すればいいよ
あとPythonは易しい部類に入る
341デフォルトの名無しさん:2012/08/14(火) 07:40:28.52
コレくらいの問題が自己解決できなきゃどうしようもない
自己もクソも>>333でそもそも解決できるし

ちなみに言うと英語圏の人が英語で使う分には絶対に起きない問題ではあるが
基本的なPythonでのエラーの解消の仕方を身に付けようともしない、これじゃきりがないわ
342デフォルトの名無しさん:2012/08/14(火) 08:00:43.50
英語圏の人がスマートクオート使ってこけて質問してるのはたまに見るが
343デフォルトの名無しさん:2012/08/14(火) 08:15:19.55
初心者を免罪符にしようとする人間はどんな言語でもお断り
なぜならウザさは言語に依存せず普遍なものですから
344デフォルトの名無しさん:2012/08/14(火) 09:28:35.12
>>338
初心者という言葉は曖昧で回答に困る
具体的な経験を書いてもらうと回答の助けになる

Pythonはソースコードの書き方に慣例がある(PEP8でググれ)
PEP8と特徴的な構文が、お行儀がよいと言われる理由かもしれない
345314:2012/08/14(火) 10:09:42.59
なるほど、質問時には自分のレベルを書いた方が回答が得られやすいですよね。
参考にします。
あと、初心者を免罪符にしないように心がけます。

いずれにしても、問題は解決しましたので、
皆様、ありがとうございました。
346デフォルトの名無しさん:2012/08/14(火) 14:00:53.70
夏休みが始まるとスレのレベルが落ちるという噂は本当だった
347デフォルトの名無しさん:2012/08/15(水) 18:57:19.56
昨日から始めた初心者なんですが、
f=open()は何故fなんでしょうか?
それとfで読み込んだのをs=f.readline()
とする例があったのですが、sを使っています。
これらは何か基準があるのでしょうか?
348デフォルトの名無しさん:2012/08/15(水) 19:06:14.35
fはfileのf, sはstringのs?
私だったらline=f.readline()と書く。
一文字のLはL=[]という風に、listの時のみ使う。
小文字のLは1やIと見分けがつかないfontがあるので使わないように。
ってPythonの何かの規格みたいなので読んだ。
349デフォルトの名無しさん:2012/08/15(水) 19:06:31.72
fileとstringの頭文字だよ
説明用のコードだといちいち名前を考えるのが面倒くさいので
型名の頭文字を使うのはありがちな行為
350デフォルトの名無しさん:2012/08/15(水) 19:15:09.49
http://toro.2ch.net/test/read.cgi/tech/1341819025/161

俺が>>140に書いたけど、

not len(line.strip())

というように、line.strip()の結果を使って空行か判定しような。

line = 'a', line == ' ' or line == '\n'



len(line) == 1

だから、なんのこっちゃ分からないぞ。

空行判定は↓が分かりやすいのかな?
line.strip() == ''
351デフォルトの名無しさん:2012/08/15(水) 19:21:09.70
print ">>348 >>349 ありがとうございます!"
352デフォルトの名無しさん:2012/08/15(水) 20:14:33.99
Python 3.2.3 (default, May 3 2012, 15:54:42)
>>> print ">>348 >>349 ありがとうございます!"
File "<stdin>", line 1
print ">>348 >>349 ありがとうございます!"
^
SyntaxError: invalid syntax
353デフォルトの名無しさん:2012/08/15(水) 21:02:37.26
空行判定 if line.strip(): でいいけど、
strip()すると、厳密には空白文字のみの行 (line = ' \t\n') の扱いが変わる。
354デフォルトの名無しさん:2012/08/15(水) 21:14:38.69
バージョン2系では全角空白が曲者

>>> ' \n'.strip()
'\xe3\x80\x80'
>>> ' \n'.decode('utf-8').strip().encode()
''
355デフォルトの名無しさん:2012/08/16(木) 12:17:31.53
IDLEってのエディタ使って新しくファイルを作ると関数とかが色付きで良い感じに表示されるのに
一回でもプログラム走らせると色が無くなって味気ないテキストになるんですが

この現象の原因が分かる方はいませんか
356デフォルトの名無しさん:2012/08/16(木) 12:56:34.70
python2.9にnonlocalを導入するのって無理なの?
357デフォルトの名無しさん:2012/08/16(木) 12:57:06.80
あ、次は2.8か
358デフォルトの名無しさん:2012/08/16(木) 12:58:29.64
>>353
へ?
何言ってんの?
359デフォルトの名無しさん:2012/08/16(木) 13:11:48.40
2系は2.7で最後らしい。一部に2.8出せみたいなこと言ってる人もいるみたいだけど。
360デフォルトの名無しさん:2012/08/16(木) 13:54:56.29
>>355
ファイル保存した時に拡張子が .py .pyw 以外になってると Syntax Highlight がなくなる。

IDLE does not supply a default ext of .py on Windows or OS X for new file saves
http://bugs.python.org/issue4832

拡張子を含めたファイル名を入力することで回避可能。
361デフォルトの名無しさん:2012/08/16(木) 14:21:19.18
PEP 404 -- Python 2.8 Un-release Schedule
http://www.python.org/dev/peps/pep-0404/
362デフォルトの名無しさん:2012/08/16(木) 14:36:17.72
そんな文章書く前にライブラリ作者に移行うながせと
頭悪いよなあ
363デフォルトの名無しさん:2012/08/16(木) 14:39:04.18
だいたいもう既にPython環境を下支えしてるのは言語のパワーじゃねえっての
自分らが主導みてえな勘違いも大概にしとけよ
364デフォルトの名無しさん:2012/08/16(木) 15:18:54.68
Python 3 Wall of Shame
http://python3wos.appspot.com/
365デフォルトの名無しさん:2012/08/16(木) 15:39:13.82
> Python環境を下支えしてるのは言語のパワーじゃねえ
何が下支えしてるんですか。
366デフォルトの名無しさん:2012/08/16(木) 16:22:37.13
ライブラリと互換性だろ
3は普及しないと予言してやる
367デフォルトの名無しさん:2012/08/16(木) 23:28:23.06
import fcntl
log = 'log.dat'
f = open(log, 'r+')
fcntl.flock(f.fileno(), fcntl.LOCK_EX)
count = f.read()
count = int(count) + 1
count = str(count)
f.seek(0)
f.write(count)
fcntl.flock(f.fileno(), fcntl.LOCK_UN)
f.close()
HTML内では、<img src="cgi/counter.cgi">で読み込み。

こんなアクセスカウンターなんですが、1アクセスで数字が2増えてしまいます。
何故なんでしょうか?
368デフォルトの名無しさん:2012/08/16(木) 23:41:30.08
echo 0 > log.dat

とした上で、python3にて>>367を試してみたけど、
一ずつ増加したよ。
htmlもしくはwebserverに問題ありとみた。
369デフォルトの名無しさん:2012/08/16(木) 23:46:48.31
Djangoが3対応すれば一気に3も広まるよ
370デフォルトの名無しさん:2012/08/16(木) 23:52:30.84
cgiに直接アクセスした場合は、1ずつ増えました。

あと、cgiファイルなんですが、
f.close()の後にprintで何か表示するコードを書かないと、
500エラーになるのですが、これが原因でしょうか?
371デフォルトの名無しさん:2012/08/17(金) 00:41:04.34
f.close()
fcntl.flock(f.fileno(), fcntl.LOCK_UN)
もしくは、
f.flush()
fcntl.flock(f.fileno(), fcntl.LOCK_UN)
f.close()

が正しい順序の気もするが。
それは違う気もするし。
とりあえず、実行環境が悪いと思うよ。

directory毎まとめて実行環境をどっかにupしてよ。
情報を小出しにするんなら、これ以上は無理だよ。
372デフォルトの名無しさん:2012/08/17(金) 00:46:52.47
>>367
そのページに <img src="cgi/counter.cgi"> 2回書いてるとか?
373デフォルトの名無しさん:2012/08/17(金) 01:22:41.13
pypy translate.py -Ojit --sharedが通らねぇ
374デフォルトの名無しさん:2012/08/17(金) 01:30:20.42
oh! jit!
375デフォルトの名無しさん:2012/08/17(金) 09:27:48.26
じっと手を見る
376デフォルトの名無しさん:2012/08/17(金) 10:03:14.60
啄木乙
377デフォルトの名無しさん:2012/08/17(金) 10:32:10.70
pass
378デフォルトの名無しさん:2012/08/17(金) 16:14:49.20
Django py3 きたね!
379デフォルトの名無しさん:2012/08/17(金) 16:23:57.04
同僚にいっちまった手前、トップにpy3がないのは痛い。
何で俺はいつもガセを掴まされるの?
https://docs.djangoproject.com/en/dev/topics/install/

        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい>>378
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
380デフォルトの名無しさん:2012/08/17(金) 16:30:31.86
質問です。
プロの方のコードをpep8に通したところたくさん指摘されて驚いたのですが
現場ではPEP8はどの程度守って書かれるのでしょうか?
381デフォルトの名無しさん:2012/08/17(金) 16:55:46.53
>>379
https://docs.djangoproject.com/en/dev/topics/python3/

"Django 1.5 is the first version of Django to support Python 3. The same code runs both on Python 2 (≥ 2.6.5) and Python 3 (≥ 3.2), thanks to the six compatibility layer and unicode_literals."

http://myks.org/django-python3/

"The first Django site to run on Python 3!"
382デフォルトの名無しさん:2012/08/17(金) 16:56:49.20
>>380
プロの方のコードってなんだよ。

そもそも pep8 はマストじゃない。
383デフォルトの名無しさん:2012/08/17(金) 16:58:19.00
>>381
読んでくる。
thanks!
384デフォルトの名無しさん:2012/08/17(金) 17:09:19.88
>>382
何カリカリしてんだ?

>>380
速度が低下する書き方は当たり前だけど禁止
1列79越えは普通に見るな 極端に大きいのはないけど
スペースはルールあるけど結構手癖で意識せずに入ったりその逆はあるねw
385デフォルトの名無しさん:2012/08/17(金) 18:01:35.56
そもそもしょっぱなからPEP8は破ってもええよって書いてるし
ttp://oldriver.org/python/pep-0008j.html
個人的には変数をコンマで区切るときのPEP8スタイルは好き
動的言語は何が変数なのかはっきりさせるとそれだけで読みやすいし
386デフォルトの名無しさん:2012/08/17(金) 21:21:17.23
pep8 はカマトト
387デフォルトの名無しさん:2012/08/18(土) 02:00:32.01
複数の人間で開発してて、ソースの書きかたでもめたときに
「PEP8 ではこうなってるから……」と持ちだすときに役に立つ。

あと、他人が作った無茶苦茶なソースを整形するときには役に立つ。

それ以外では不要。
388デフォルトの名無しさん:2012/08/18(土) 10:15:48.59
     ___
   /|    |
   ||. |∧_∧|
   ||. (´・ω・| うわっ、クソスレに来てしまった。
   ||oと.  U|
   || |(__)J|
   ||/ ̄ ̄
     ___
    |     |
    |     |
    |   o|
    |     |
    |     |
    彡 ̄ ̄ パタン、
389デフォルトの名無しさん:2012/08/19(日) 00:33:21.56
エキスパートPythonプログラミングの命名規則も含めたコーディング作法が理想なんじゃないの
390デフォルトの名無しさん:2012/08/19(日) 01:12:44.13
pyglet の勉強をしようと思って下のサイトを見ているのですが、
http://jestermon.weebly.com/nehe-pyglet-tutorials.html
lesson1 がありません。
なぜでしょうか?
391デフォルトの名無しさん:2012/08/19(日) 02:00:57.35
Eclipseで開発しようと思っているんだが、PyDevが入らない。

Help -> Install New Software
の順番で
http://pydev.org/updates
を指定しているのに・・・・
ずっとPendingのまま、最後には接続が切れてしまう。
392デフォルトの名無しさん:2012/08/19(日) 02:06:55.96
Eclipse Classic 4.2 Windows 32 Bitでは普通に出来る
393デフォルトの名無しさん:2012/08/19(日) 02:09:43.45
Aptanaダウンロードすれば?
394デフォルトの名無しさん:2012/08/19(日) 11:10:11.13
おとなしくAptanaで行くことにします。
395デフォルトの名無しさん:2012/08/19(日) 11:36:57.75
Aptanaいいよね。
396デフォルトの名無しさん:2012/08/21(火) 10:46:39.73
現在実行中のモジュール名は__file__で取得できますが、
メソッド名を取得する方法があれば教えて下さい。
397デフォルトの名無しさん:2012/08/21(火) 11:09:46.13
self.__class__.__name__,traceback.extract_stack()[-1][2]
398デフォルトの名無しさん:2012/08/21(火) 11:17:59.29
>>397
ありがとうございます。
オブジェクトではないので、
import traceback
traceback.extract_stack()[-1][2]
でいけました。
399デフォルトの名無しさん:2012/08/21(火) 15:08:11.33
http://toro.2ch.net/test/read.cgi/tech/1328714043/592-
sys._getframe(0).f_code.co_name
sys._getframe(1).f_code.co_name
400デフォルトの名無しさん:2012/08/21(火) 15:13:55.82
行番号は traceback の方が精確だな
401デフォルトの名無しさん:2012/08/21(火) 15:37:19.16
>>396
便乗。
log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ )
みたいに使って、クラス名を入れたいんだけど、
class宣言していない場所で使うとエラーになるので、
そういった箇所でもエラーにならない方法があれば教えてください。
402デフォルトの名無しさん:2012/08/21(火) 15:47:47.66
log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ if dict().has_key('self') else None)
403デフォルトの名無しさん:2012/08/21(火) 15:49:57.39
dict() じゃなかった
log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ if locals().has_key('self') else None)
404デフォルトの名無しさん:2012/08/21(火) 15:59:51.63
>>403
サンクス!
引数の中でifが使えるのね。
405デフォルトの名無しさん:2012/08/21(火) 19:05:45.83
>>397
log()を埋め込むメソッド毎にimport tracebackを入れないといけないようですが、
これを省略する方法がないでしょうか?
406デフォルトの名無しさん:2012/08/21(火) 19:59:44.59
そのifはステートメントじゃなく演算子だから勘違いすんなよ
407デフォルトの名無しさん:2012/08/21(火) 22:08:27.98
実行時情報からクラス名を所得する *完全な* 方法はなかったはず、
loggingモジュールでもサポートされてないし。

基本的なクラス・メソッドでは期待通りでも、その他の細かな状況で期待通りにならない。

例えば、メソッド内で作った内部関数では期待しない表示になる。
http://ideone.com/j41yD

# 3.3だと qualname 導入で、ネストした場合の名前表示にも対応できるかもしれない。
408デフォルトの名無しさん:2012/08/21(火) 22:08:30.17
>405
log()の中の方で
import traceback
traceback.extract_stack()[-2][2]
409デフォルトの名無しさん:2012/08/21(火) 22:35:02.06
>>408
流れを知りたいモジュールA〜K.pyと
log表示用モジュールZ.pyは別ファイルです。
なのでAのメソッドaaaに入れるには
import traceback
import Z
log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ if dict().has_key('self') else None)
と3行必要ですよね。
その他のメソッドbbb等沢山あるので、これを一行にできないでしょうか?
410デフォルトの名無しさん:2012/08/22(水) 01:31:46.90
Cythonで関数をインライン展開する場合ってどうすればいいんですか?
411デフォルトの名無しさん:2012/08/22(水) 02:10:08.70
>>409
馬鹿には無理
412デフォルトの名無しさん:2012/08/22(水) 03:27:20.19
413デフォルトの名無しさん:2012/08/22(水) 14:51:34.97
先日よりPythonの勉強をしております。
Pythonの前はPHPの勉強をしていたのですが、その時にPHPにあった便利な機能と同様なものがPythonにないか調べていたのですが、わからなかったので質問させて頂きます。

PHPではHTMLのformの値を受け取る際に、
<input type="text" name="ckdata[]">
のようにすると、ckdataを配列として受け取れるのですが、Pythonではそのようなことはできないでしょうか?


<input type="file" name="file[1]">
<input type="text" name="text[1]">

<input type="file" name="file[2]">
<input type="text" name="text[2]">

<input type="file" name="file[3]">
<input type="text" name="text[3]">

のように、ファイルとファイルの説明文をユーザが自由な数追加して送信できるようにしているのですが、それをどのように処理すればいいか悩んでおります。

宜しくおねがいします。
414デフォルトの名無しさん:2012/08/22(水) 15:09:59.40
datetimeとdateを比較する方法って、どうするのがいいんですかね。
now = datetime.now()
today = date.today()
now.year == today.year and now.month == today.month and now.day == today.day
やっぱりこんな方法しかない?
415デフォルトの名無しさん:2012/08/22(水) 15:27:00.55
>409
log()の中の方で
^^^^^^^^

import traceback
traceback.extract_stack()[-2][2]
                ^^^^
416デフォルトの名無しさん:2012/08/22(水) 15:32:09.00
>>414
now.date() == today
417デフォルトの名無しさん:2012/08/22(水) 15:46:38.32
事故れす
>>414
datetime型にdate()というメソッドがありました。
now.date() == today
これだけ。
418デフォルトの名無しさん:2012/08/22(水) 15:47:43.35
>>416
thx
419デフォルトの名無しさん:2012/08/22(水) 18:57:32.37
パイソンはマジでオワコン
初心者は別の言語を習得することをオススメする
PHP辺りがオススメだ

今からパイソンやるのは時間を無駄にするようなもんだ
420デフォルトの名無しさん:2012/08/22(水) 19:16:13.41
saltだけでどうやってセキュリティ確保するんですか?
リリース前にテストすらしてない馬鹿作者さん。
421413:2012/08/23(木) 12:48:56.53
そういった機能がないときはどのように処理をしようかと自分で考えてみて以下のようなコードを書いて見ました。

import re

di = { "file_file[0]": "file0", "file_file[1]": "file1", "file_file[2]": "file2", "file_title[0]": "title0", "file_title[1]": "title1", "file_body[2]": "body2", "file_file[41]": "file41", "file_body[1]": "body1"}

file_property = {}
for key, value in di.items():
key_match = re.search( "file_([^\[]+)\[(\d+)\]", key)
if not file_property.has_key( int(key_match.group(2))):
file_property[int(key_match.group(2))] = {}

file_property[int(key_match.group(2))][key_match.group(1)] = value

print file_property

ディクショナリの値にディクショナリを持たせたい場合、上のように一々ディクショナリを代入する必要があるのでしょうか?
もっと効率のいい方法や、よく使うやり方などあれば教えていただけると助かります。
422デフォルトの名無しさん:2012/08/23(木) 13:04:10.10
馬鹿には無理
423デフォルトの名無しさん:2012/08/23(木) 13:55:26.38
424デフォルトの名無しさん:2012/08/23(木) 14:32:16.18
firefox ってメモリリーク多すぎてたまらんな
425デフォルトの名無しさん:2012/08/23(木) 14:57:45.70
>>413
Web系の話題なのでWebプログラミング板へどうぞ

CGIかなとは思うけど、どのフレームワーク/ライブラリ利用してるのか等、
環境を詳しく書かないとレス着き難いと思うよ。

>>421のケースでは、一般的には collections.defaultdict が使えるけど、
CGIの話題だとしたら、標準ライブラリの cgi モジュールでもパラメータをリストで受けるのはサポートしてる。
426デフォルトの名無しさん:2012/08/23(木) 19:31:07.98
>>421
collections.defaultdictをもうちょっと工夫するとお望みのものに。
from collections import defaultdict
def newdict(): return defaultdict(newdict)
d = newdict()
d['a']['b']['c'] = 1
print d['a']['b']['c']
427デフォルトの名無しさん:2012/08/24(金) 02:26:52.30
help()で出力されるものと同じ文字列を取得したいのですがどうすればよいでしょうか
428デフォルトの名無しさん:2012/08/24(金) 03:30:33.60
help(re)
re.__doc__
429デフォルトの名無しさん:2012/08/24(金) 03:41:34.15
なんやこれ?
430デフォルトの名無しさん:2012/08/24(金) 10:22:14.87
pydoc.plain(pydoc.render_doc(obj, 'Help on %s:'))
431デフォルトの名無しさん:2012/08/24(金) 13:52:16.61
すみません。横からですが、
どのように考えていくと正しい解答に辿りつけるのでしょう?
私も興味があったのでhelp(help)で調べると
This is a wrapper around pydoc.help (with a twist).
とありpydoc.pyのhelpメソッドが出てくる箇所を読んでいたのですが、
見当外れだったようです。
help(pydoc)でFUNCTIONSを読んで関係ありそうなものを見る…??
ものの調べ方が分からないというアホな質問ですが、ご教示いただけると幸いです。
432デフォルトの名無しさん:2012/08/24(金) 14:44:29.74
OS X 10.8、python2.7.2の環境でtkinterのEntryを使っているのですが、日本語入力が出来ません。
コピペすれば日本語をEntryのテキストボックスに入れることが出来るのですが、
どうやってキーボードから日本語を入力するのでしょうか。
433デフォルトの名無しさん:2012/08/24(金) 16:23:15.31
ファイルの読み込みに関する質問です。

text.txtというファイルがあり、その内容は以下のように単純なものです

abc
def
ghi

そこで、次のようなコードを書きました
testfile = open("test.txt", "r")

testdict1 = {}
for t in testfile:
print t
testdict1[t] = 1
print testdict1
すると、forループ内のprint結果は、それぞれabc, def, ghiと正しく出力されたのですが
print testdict1の出力結果が
{'def\n': 1, '\xef\xbb\xbfabc\n': 1, 'ghi': 1}
となり、abcの文字列の前に不要なものがついてしまいました。
これはなぜでしょうか。
434433:2012/08/24(金) 16:24:24.72
インデントがおかしくなりました
コード最終行の
print testdict1
はforループ外です
435デフォルトの名無しさん:2012/08/24(金) 16:46:27.41
>>433
エディタでBOMなしのUTF-8で保存するように設定して
UTF-8NとかUTF-8(BOMなし)みたいに名前が付いてると思う

なお"\xef\xbb\xbf" はこのファイルはUTF-8ですよっていう印(UTF-8 BOM)
でもこういう問題が起こるから大抵は使わないほうがいい
436デフォルトの名無しさん:2012/08/24(金) 17:08:34.36
>>431
ヘルプを読んでヘルプを読む
437デフォルトの名無しさん:2012/08/24(金) 17:26:50.60
>>431
馬鹿には使えない
438デフォルトの名無しさん:2012/08/24(金) 19:16:04.09
別に変な質問じゃないだろ
439デフォルトの名無しさん:2012/08/24(金) 19:18:40.78
つかutf-8は規格上は無いんだけどな
どこかの技術力が足りない毎月パッチ出してる企業の人間がやり始めたんで迷惑極まりない
440デフォルトの名無しさん:2012/08/24(金) 19:19:17.54
規格上はBOMは無い、ね
少し抜けた
441デフォルトの名無しさん:2012/08/24(金) 19:47:12.72
馬鹿には無理
442デフォルトの名無しさん:2012/08/24(金) 20:18:08.60
443デフォルトの名無しさん:2012/08/25(土) 10:51:47.07
>>431
Pythonの初心者向けの解説にdocumentをきちんと書きましょうね、
>>> re.search.__doc__
'Scan through string looking for a match to the pattern, returning
a match object, or None if no match was found.'

こんな感じでmethod毎のdocumentを参照することもできますよ。
みたいなことが初心者に示されてた。
Pythonはこういう便利なことに対してきちんと誘導しているよ。
初心者用の説明をきちんと読みましょう。
444デフォルトの名無しさん:2012/08/25(土) 14:13:41.25
>>439
> どこかの技術力が足りない毎月パッチ出してる企業

それなりのソフト売ってる大抵の企業に当てはまりそうだ (w
445デフォルトの名無しさん:2012/08/25(土) 18:17:37.21
>>430
ありがとうございました。無事取得できました。
446デフォルトの名無しさん:2012/08/25(土) 23:44:46.18
>>435
返事が遅くなり申し訳ありません
BOM無しで保存すると、正常に動作するようになりました。
文字コードや使われ方について再度勉強しなおします。有難うございました。

447デフォルトの名無しさん:2012/08/26(日) 18:56:00.41
馬鹿にとってはBOMB
448デフォルトの名無しさん:2012/08/29(水) 07:00:25.93
..           ''';;';';;'';;;,.,    おっぱい!おっぱい!
             ''';;';'';';''';;'';;;,.,   おっぱい!おっぱい!
              ;;''';;';'';';';;;'';;'';;;
             ;;'';';';;'';;';'';';';;;'';;'';;;
        _  vnm_yvwnym_vynmyn_vy、
   _  ∩(゚∀゚)彡(゚∀゚)彡(゚∀゚)彡_ミ(゚∀゚)っ
 ⊂(゚∀゚ )彡と(゚∀゚ ) ⊂ミ (゚∀゚ )っ (゚∀゚ )つ
   ゝ⊂彡(゚∀゚ )っ _  ∩ (゚∀゚ ) .(ミ⊃ r
   し u ミ⊃ r⊂(゚∀゚ )彡 ⊂彡 i_ノ┘
.       i_ノ┘  ヽ ⊂彡 しu
           (⌒) .|
            三`J
449デフォルトの名無しさん:2012/08/29(水) 07:03:06.39
おっぱい〜〜〜〜!  おっぱいおっぱい! おっぱいおっぱいおっぱい!
二二二二l            \ │ /
 | |     ∧ ∧          / ̄\            ∧∧
 | |    ( ゚∀゚ )つ─◎   ─( ゚ ∀ ゚ )─◎        ( ゚∀゚)つ─◎
 | | /´ ̄し' ̄し' \ ///  /´ ̄し' ̄し' \ ///.     /´ ̄し' ̄し' \ ///
 ̄ ̄|  、_人_ /  彡 ◎  ̄ |  、_人_ /  彡 ◎ ̄ ̄ ̄|  、_人_ /  彡 ◎ ̄
    |  _)  ◎彡| | バン |  _)  ◎彡.| |   バン  |  _)  ◎彡.| |   パン
    |  ´`Y´   | | バン  |  ´`Y´   .| |  バン   | #`Y´   .| |  パン
    t______t,,ノ     t_______t,ノ       t_____#t,ノ
_______________________________
450デフォルトの名無しさん:2012/08/29(水) 09:03:01.67
       おっぱい! おっぱい!
    おっぱい おっぱい! おっぱい!
  おっぱい! ∩   ∩ ノ)   おっぱい!
 おっぱい!  川 ∩ 川彡'三つ  おっぱい!
おっぱい! ⊂ミ∩、⊂ミ∩彡⊃    おっぱい!
おっぱい!⊂三ミ( ゚∀゚)彡三彡三⊃ おっぱい!
おっぱい! ⊂彡川⊂彡川ミ⊃    おっぱい!
おっぱい!⊂彡川∪⊃ U川彡⊃   おっぱい!
 おっぱい! (ノ ∪  川 ∪ミ)  おっぱい!
  おっぱい!      ∪     おっぱい!
    おっぱい! おっぱい! おっぱい!
        おっぱい! おっぱい!
451デフォルトの名無しさん:2012/08/29(水) 09:59:36.51
              ...┏┓      .┏┓┏┓┏━┓      ┏┓   ┏┓        ┏┓┏┓┏━┓     ..┏┓
     __      i⌒i ┏┛┗┓      ┃┣┛┗┫□┣┓     ┃┃ ┏┛┗┓      ┃┣┛┗┫□┣┓    .┃┃
./    O   Oヽ   | ┗┓┏╋┳━━┫┣┓┏┻━┫┃  ┏┓┃┃ ┗┓┏╋┳━━┫┣┓┏┻━┫┃  ┏┓┃┃
〈      |―/  | ノノ┏┛┗┻╋━┓┃┣┛┗┓  ┃┃  ┃┃┗┛ ┏┛┗┻╋━┓┃┣┛┗┓  ┃┃  ┃┃┗┛
ヽ.      V   ノ  ...┃┃┏┓┃┏┛┃┃□┏┛  ┃┗┓┗┛┏┓ ┃┃┏┓┃┏┛┃┃□┏┛  ┃┗┓┗┛┏┓
     ( ̄ ̄ ノノ   ┗━┛┗┛┗━┻┻━┛    ┗━┛   ┗┛ ┗━┛┗┛┗━┻┻━┛  ...┗━┛   ┗┛
452デフォルトの名無しさん:2012/08/31(金) 12:39:58.66
multiprocessingでプロセス間で状態を共有したいのですが
managerで作ったオブジェクトを可変にすることってできますか?
例えば
l = manager.list([0])とつくってたものを
他のプロセスで、状況に応じて
l = [[1,1],[2,2]]
みたいにしたいのですが
453デフォルトの名無しさん:2012/08/31(金) 22:08:46.26
wxPython in action の翻訳版が・・・
http://www.slideshare.net/ryanvan/wxpython-in-action
454デフォルトの名無しさん:2012/08/31(金) 22:12:33.44
>>453
中国語じゃねーか!
455452:2012/09/01(土) 00:57:47.94
すいません 書き方が悪かったので書き直します
from multiprocessing import Process, Manager

class TestClass(Process):
def __init__(self, l):
super(TestClass, self).__init__()
self.l = l

def run(self):
count = 0
while count < 20:
self.l = [2]
count += 1


if __name__ == '__main__':
manager = Manager()
l = manager.list([0])

ss = TestClass(l)
ss.start()

print l
ss.join()
print l

これで最後のlが[2]にならない理由がわからないのですが
どうすればいいのでしょうか
456デフォルトの名無しさん:2012/09/01(土) 11:16:34.38
class Shape(object):
pass

shape1 = Shape()
shape2 = Shape()
shape1.position = 1
shape2.position = 2
の状態で
shape1やshape2またpositionという名前を(一括)取得する方法はないのでしょうか?
あれば教えて下さい。
457デフォルトの名無しさん:2012/09/01(土) 11:21:13.25
その「名前」を使って実際にどういうコードが書きたいのか示してみてくれ
458デフォルトの名無しさん:2012/09/01(土) 11:27:54.01
>>455
while の所、 self.l[:] = [2] じゃない?
459デフォルトの名無しさん:2012/09/01(土) 14:33:56.72
Pythonのfor文のinは、比較演算子のinと何か関係があるのでしょうか。演算子のオーバーロードなのか、疑問です。教えてください。よろしくお願いします。
460デフォルトの名無しさん:2012/09/01(土) 14:40:47.10
for文の奴はステートメントの一部であって演算子でもオーバーロードでもない
x in sequenceは演算子
461デフォルトの名無しさん:2012/09/01(土) 14:46:45.98
>>460
ありがとうございます。
462デフォルトの名無しさん:2012/09/02(日) 16:24:43.20
ライブラリの見方で質問があります。
smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
ってあった場合、hostとtimeoutを指定したい時はどう書くのですか?
server = smtplib.SMTP("localhost", 120)とかしたら120がポートかなにかわからないですよね?
463デフォルトの名無しさん:2012/09/02(日) 16:29:40.79
キーワード引数
464デフォルトの名無しさん:2012/09/02(日) 16:48:24.45
蛇足ぎみだけど念のため

SMTP("localhost", 120) # hostは"localhost", portが120
SMTP("localhost", timeout=120) # hostは"localhost", timeoutが120
465デフォルトの名無しさん:2012/09/02(日) 23:50:29.20
ユニットテスト内でHTML5のバリデーションしたいんだけど、どうするのがベスト?
466デフォルトの名無しさん:2012/09/03(月) 17:38:47.69
newf = x.index('e', f)

list型の変数xでインデックスを取得する場合、
こうやって引数を二つ指定するとどうなるのでしょうか
467デフォルトの名無しさん:2012/09/03(月) 17:45:30.74
>>466
マニュアル読もう

index(...)
    S.index(sub [,start [,end]]) -> int

というわけでstartが探索の開始位置でendが終了位置
例えば "abcabcabc".index("c", 3) は 5 を返す
468デフォルトの名無しさん:2012/09/03(月) 18:17:29.87
>>458
ありがとうございます!
l[:]にしたらできました
ところで
l =xとl[:]=xは何が違うんでしょうか?
469デフォルトの名無しさん:2012/09/03(月) 18:31:10.46
>>465
selenium
470デフォルトの名無しさん:2012/09/03(月) 19:05:04.05
>>468
それぞれのパターンでリストを変更してみれば分かる
471デフォルトの名無しさん:2012/09/03(月) 19:11:42.45
>>470
>>> l = [1,2,3]
>>> l[:] = [2]
>>> l
[2]
>>> l = [1,2,3]
>>> l = [2]
>>> l
[2]
で変わらないと思ったのですが
それともmultiprocessingでの話でしょうか
472デフォルトの名無しさん:2012/09/03(月) 19:18:03.25
473デフォルトの名無しさん:2012/09/03(月) 19:20:35.54
変数の共有の話?

>>> a = [1,2,3]
>>> b = a
>>> a[:] = [2]
>>> a, b
([2], [2])
>>> a = [1,2,3]
>>> b = [2]
>>> a
[1, 2, 3]
474デフォルトの名無しさん:2012/09/03(月) 19:33:31.83
>>472
>>473
ありがとうございます
l[:]だと同じアドレスを指してくれるんですね
勉強になりました
475デフォルトの名無しさん:2012/09/05(水) 01:41:37.86
>>282-287
64bit版Windows&PythonでNumyとかを使いたいって話
http://spyder-ide.blogspot.fr/2012/08/scientific-python-distribution-for.html

その後、ベータ版が完成したって話
http://spyder-ide.blogspot.jp/2012/08/following-my-recent-post-on-free-open.html
476デフォルトの名無しさん:2012/09/06(木) 08:32:46.57
Pythonを勉強していて不明なことがあり質問させて頂きます。

現在日記帳のような、テキストを保存していくプログラムの制作をしています。
データの保存形式をSQLiteのようなRDBで行うか、ShelveやPickleのようなPythonオブジェクトで行うか、CSVのようなテキストで行うか悩んだ結果、現在はShelvで行うようにしました。

そこで疑問なのですが、現在は1日に1件追加するかどうかなので、Shelveのファイル容量も大きくないので気にならないのですが、ShelveやPickleのようなPythonオブジェクトとして保存する場合は、プログラムでのロード時に全てメモリに読み込まれるのでしょうか?
477デフォルトの名無しさん:2012/09/06(木) 08:50:08.70
馬鹿には無理
478デフォルトの名無しさん:2012/09/06(木) 10:58:09.37
>>476
pickleはその通り。

shelveでは、バックエンドで選択されるdbmとプログラムの組み方次第。
データ取り出しは1件毎だけど、一旦読み込まれたデータはキャッシュされるので、
例えば、常駐型のプログラムでshelve.openしたまま開きっぱなしの様な使い方をすると、利用メモリは増加するはず。
479デフォルトの名無しさん:2012/09/07(金) 02:15:24.28
wxpythonについて教えてください
xrcで作ったダイアログの、あるコントロールの前にpythonから画像を追加したいのですが、どうやればいいでしょうか?

xrcにあるtextCtrlやpanelは取得出来ています
sizerが取得出来なくて、panelにはAddが無いしで困っています

的外れな質問だったらすみません
480デフォルトの名無しさん:2012/09/07(金) 03:06:00.01
日本語で
481デフォルトの名無しさん:2012/09/07(金) 03:12:01.12
482デフォルトの名無しさん:2012/09/07(金) 08:42:36.95
馬鹿には無理
483デフォルトの名無しさん:2012/09/07(金) 23:22:07.33
>>481
レスありがとうございます
まだ出来てません…
出来たらまた報告に来ます
ありがとうございました
484デフォルトの名無しさん:2012/09/08(土) 18:26:26.14
>>412
ありがとうございます
やってみましたが、残念なことに実行速度は変わらなかったというか、微妙に遅くなった気がします
485デフォルトの名無しさん:2012/09/09(日) 16:59:24.49
Python2.7で

from test import pystone
print pystone.pystones()

という中身のhoge.pyをコマンドプロンプトで実行すると
>python hoge.py
(1.9339092849094406, 25854.36679484237)

Pydevで実行すると
(0.9808881658798508, 50974.210658511)

となります。ロースペックなのは置いといて、2倍くらい差が出るのはなぜでしょうか
486デフォルトの名無しさん:2012/09/09(日) 18:48:14.50
Pydevの方のコマンドラインは?
487デフォルトの名無しさん:2012/09/09(日) 20:40:36.86
設定したのはPythonインタープリタだけですが…
488デフォルトの名無しさん:2012/09/09(日) 20:45:35.28
お前が設定したのがインタプリタだけでも
IDEは気の利いたオプション付けて実行してくれたりするんだよ
そこをまず確認しろ
489デフォルトの名無しさん:2012/09/09(日) 20:46:35.39
デフォルトですよ。どんなオプションが付けられてるんですか
490デフォルトの名無しさん:2012/09/09(日) 20:47:15.27
話にならねえな
491デフォルトの名無しさん:2012/09/09(日) 20:48:29.87
オプションは、どこで確認出来るんですか
492デフォルトの名無しさん:2012/09/09(日) 20:49:24.20
デフォルトなんだろ
そのまま死ね
493デフォルトの名無しさん:2012/09/09(日) 20:49:42.91
実に、不快だ
494デフォルトの名無しさん:2012/09/09(日) 20:50:19.68
デフォルトでは、オプションは付けられてないんですか?
2倍くらい差が出るのはなぜですか?
495デフォルトの名無しさん:2012/09/09(日) 20:52:20.57
何怒ってんだよ
pdbのせいだったりしない?
496デフォルトの名無しさん:2012/09/10(月) 00:46:43.00
私の声がデムパになって
波になってあなたへ向かってく
私の歌がデムパになって
波になってあなたへ響いてく
私の愛がデムパになって
波になってあなたへ届いてく
私の電子回路が短絡する前に
Electric LOVE Electric LOVE
(∩ ゚д゚) アーアー
この気持ちあなたに届くかな
497デフォルトの名無しさん:2012/09/10(月) 21:42:59.74
djangoの質問もここでいいと信じてる

アプリケーションを機能ごとに分割するのはわかる
アプリケーションのディレクトリ内にmodels.py views,pyとかがあるわけだが
例えばWebAPIのラッパークラスを作るとき、models.pyに書くのが正しいのか?新しい.pyファイルを作ってしまうのが正しい?
そもそもviews.pyなんて不要なんだからアプリケーションにするのが間違ってるのか
498デフォルトの名無しさん:2012/09/11(火) 04:36:19.36
新しい.pyファイルを作ってmodels.pyからimport
499デフォルトの名無しさん:2012/09/11(火) 08:01:13.28
 ┌──────────────────┐
 |                              |
 │            _  ∩             |
 │          ( ゚∀゚)彡 おっぱい!     |
 │          (  ⊂彡   おっぱい!    .|
 │           |   |            |
 │           し ⌒J              |
 │                              |
 │         Now Oppaing. ....          .|
 │   そのままおっぱいでお待ちください。  |
 └──────────────────┘
500デフォルトの名無しさん:2012/09/11(火) 22:55:53.73
名前空間のことで質問させてください(python2.7系)
2つのディレクトリにmy名前空間があるとして次のように読み込むもうとしています。
sys.path[:0] = ['mylib','mylib2']
from my.config import MyConfig
from my.log.parser import MyLogParser

しかし、例えばmylib2にmy/config.pyがある場合、
mylibを探索した時点でImportErrorになってしまいます(mylib以下にはmy/config.pyは存在しない)
名前空間の名前(my)を変えれば問題ないことは確認したのですが、この挙動は変更できるんでしょうか?
つまり、1つめのディレクトリにmy名前空間があってファイルが見つからなくとも
次のディレクトリのmy名前空間を探索するように。
501デフォルトの名無しさん:2012/09/12(水) 02:58:23.04
SciPyのインストール方法について教えてください。
windows XPで python2.7.3を使っています。
SciPyをインストールしたのですが、ファイルにプログラムを書きだして、実行すると

from scipy import *
ImportError: No module named scipy

とエラーが出ます。
一方で、対話型インタプリタで from scipy import * をするとちゃんと通ります。
原因がわかる方がいましたら、教えてください。
502デフォルトの名無しさん:2012/09/12(水) 07:25:24.95
>501
SciPyはよく分からないけど、
前者の「実行」と後者の「対話型インタプリタ」は、それぞれどう起動したの?

Pythonの環境が2つ入っているかも。

前者をファイルのダブルクリックで起動してるようなら、ファイルの関連付け確認。(CygwinやMinGWのシェルから起動してるなら、ファイル先頭行の#!の指定を確認)

後者を、単純にコマンドプロンプトからの>pythonで起動してるのでなければ、SciPyのインストール時に何か設定が入ったのかもしれない
503デフォルトの名無しさん:2012/09/12(水) 07:32:57.38
馬鹿には無理
504500:2012/09/12(水) 10:32:41.37
>>500の挙動ってたぶん、Pythonの仕様なんですよね?

けどインポートディレクトリ直下のディレクトリ(>>500ではmy)が同名っていうのは
それほど特別ではないと思うけど、どうなんでしょうか。
Pythonではなく、こちらの配置かなにか問題があるのかな?
505デフォルトの名無しさん:2012/09/12(水) 10:37:07.00
./mylib/__init__.py
506デフォルトの名無しさん:2012/09/12(水) 12:15:39.76
>>501
>>> import sys
>>> print('\n'.join(sys.path))
>>> sys.modules['scipy']

とやって実行結果の違いを比べるよろし。
507500:2012/09/12(水) 12:40:17.03
>>505
ありがとうです。PATHをとおしているmylibディレクトリには__init__.pyは不要と思うのですが
それぞれのmy/__init__.pyに以下の記述をして解消できました(python2.7)
>>500のケースではmylib/my/__init__.pyのみでも大丈夫

try: __import__('pkg_resources').declare_namespace(__name__)
except ImportError: __path__ = __import__('pkgutil').extend_path(__path__, __name__)

お決まりのイディオムのようなので、今はよくわからないまま放置してますが
何をしてるのか後で読み込んでみますm(_ _)m
508501:2012/09/12(水) 16:23:42.20
ありがとうございます。
原因はPython2.7と3.2が入っていることでした。

>>502
ファイルをプログラムに書きだして実行するときは、コマンドプロンプトから、

cd "ファイルとあるディレクトリ"
python ファイル名.py

で実行するか、コマンドプロンプトにファイルをドラッグ&ドロップして実行していました。
対話型インタプリタはコマンドプロンプトから、pythonとうって起動していました。
おっしゃる通り、Pythonの環境が2つはいっており、Scipyを入れていないPython3.2が邪魔しているようでした。
Python3.2のフォルダを削除したら、エラーが無くなり、プログラムが通るようになりました。
ありがとうございます。

>>506
教えていただいた
>>> import sys
>>> print('\n'.join(sys.path))
>>> sys.modules['scipy']
をやって見たところ、

対話型インタプリタでは
C:\Python27
が出てきたのに対し、

コマンドプロンプトにファイルをドラッグ&ドロップで実行して場合は
C:\Python32
が出て、問題に気づけました。
ありがとうございます。

509デフォルトの名無しさん:2012/09/12(水) 19:52:29.72
>>502 はエスパー並み !!
510デフォルトの名無しさん:2012/09/12(水) 23:49:33.00
thread つくって、戻り値をちゃんと受け取るコードの書き方教えて。
分かりづらいかもしれないけど、下のような感じで。

th = thread(function=hoge)
th.start()
while not th.end():
  time.sleep(1)
result = th.result()
511デフォルトの名無しさん:2012/09/12(水) 23:55:38.55
馬鹿には無理
512デフォルトの名無しさん:2012/09/13(木) 00:00:55.82
自虐はやめろ
513デフォルトの名無しさん:2012/09/13(木) 00:13:20.26
thread つくって
while not th.end():
  time.sleep(1)
とか
あほやろ
514デフォルトの名無しさん:2012/09/13(木) 00:18:05.54
どう見てもサンプルだから time.sleep(1) なんだろ。
515デフォルトの名無しさん:2012/09/13(木) 00:55:24.34
>>510
import threading
def hoge(result): result['foo'] = 123

result = {}
th = threading.Thread(target=hoge, args=(result,))
th.start()
th.join()
print result

戻り値はdictにしたけど、スカラー値じゃなければ単純にこれでいける。
どうしてもポーリングしたけりゃth.isAlive()がある。
516デフォルトの名無しさん:2012/09/13(木) 05:09:51.94
つ Queue
517デフォルトの名無しさん:2012/09/14(金) 03:07:57.44
クェゥェ
518デフォルトの名無しさん:2012/09/14(金) 16:08:23.96
エキPyで、マルチスレッディングの話があったけど、あの部分はちょっと分からなかったな
確かにQueueの話も出てきた気がするけど
519デフォルトの名無しさん:2012/09/14(金) 20:11:08.93
Pythonスタートブックの後には何を読めばいいですか?
520デフォルトの名無しさん:2012/09/14(金) 20:34:23.02
>>519
読まずにプログラムを書き始めたほうがいい
実際に書いてみてわからないことが出てきたら何読めばいいですかって質問して
521デフォルトの名無しさん:2012/09/15(土) 11:46:38.42
python って単一のバイナリーオブジェクトみたいのものって作れませんか
スタティックリンクした C のバイナリ見たくライブラリ全部くっついてる感じ
522デフォルトの名無しさん:2012/09/15(土) 12:12:03.61
523デフォルトの名無しさん:2012/09/15(土) 12:25:28.43
>>521
.pyc/.pyo の事だったら .zip や .egg に纏めることが出来るよ。

実行ファイルだとしたら、外部ツールの領分。もしくは自分で実行ファイル作ってリソースを埋め込む。
一応作れるけど、ライブラリの構成によっては簡単には出来ないものもある。
524デフォルトの名無しさん:2012/09/15(土) 13:27:09.15
.pyoがあるなら、.piyo.piyo なんてのもありますか?
525デフォルトの名無しさん:2012/09/15(土) 16:16:16.04
>>522
ありがとう, 調べてみる
組み込み装置相手だと標準ライブラリ展開できないのが辛い
つか, 考えてみたら ldd みたく, 「このライブラリに依存しているよ」
情報を教えてくれるアプリでもいいのか
526デフォルトの名無しさん:2012/09/15(土) 20:03:47.96
UPX
527デフォルトの名無しさん:2012/09/16(日) 11:33:18.01
組み込み装置って言われると途端に怪しい
スタンドアローン環境でとか言われると困る
528デフォルトの名無しさん:2012/09/16(日) 11:39:15.10
py2exeとかのこと?
529デフォルトの名無しさん:2012/09/16(日) 12:01:38.41
py2exeは1個にはならんのじゃないか
ライブラリ名.zipの中にpyc固められるし
530デフォルトの名無しさん:2012/09/16(日) 15:11:27.65
>>529
オプションで1個 (zipped) できる
531デフォルトの名無しさん:2012/09/16(日) 17:46:21.41
PyCon JP 2012そこそこ盛り上がってるみたい
532デフォルトの名無しさん:2012/09/16(日) 18:15:28.60
具体的には?
533デフォルトの名無しさん:2012/09/16(日) 19:59:05.08
2日分の飯+おやつ+Tシャツつきで3千円はよかった
余った飯も貰って2人分食べた
講演はけっこう寝てましたすんまそんw
534デフォルトの名無しさん:2012/09/16(日) 20:01:54.66
何しに行ったんだって感じだな
断ってよかった
535デフォルトの名無しさん:2012/09/16(日) 20:44:46.55
まあでも品川だしな
Rubyみたいに松江とかでされてもコマル
536デフォルトの名無しさん:2012/09/16(日) 20:44:54.26
pyglet の質問していい?
537デフォルトの名無しさん:2012/09/16(日) 20:47:59.35
原発銀座松江の空中放射線量はどれくらいあるんだ
538デフォルトの名無しさん:2012/09/16(日) 20:51:07.48
>>536
どうぞー。ちなみに自分は使ってないからたぶん答えられない
539デフォルトの名無しさん:2012/09/16(日) 21:08:00.41
(3, 9) + (4, 4)
で、
(7, 13)
を期待しているのですが、
(3, 9, 4, 4)
になってしまいます。
正しくはどう書けば良いですか?
540デフォルトの名無しさん:2012/09/16(日) 21:19:31.27
map(sum, zip(a, b))
とは書けるけど、
そういう演算がいっぱいあるならNumPyつかった方がいい。
541デフォルトの名無しさん:2012/09/16(日) 23:17:56.51
!=と<>と、どっちがいつから廃止になったんだっけ?
こんなところまでダイエットするとかすげえな、と聞いた当時思った
542デフォルトの名無しさん:2012/09/16(日) 23:21:37.24
pythonのコードで<>なんて見たことないけど
543デフォルトの名無しさん:2012/09/16(日) 23:43:12.87
numpy形式の配列をたくさん生成しているのですが,以前と同じものがあった場合は除去したいです
普通ならsetに追加していけばいいと思うのですが,numpyの配列はsetにいれることができませんでした.
listに追加していき, in listで評価していってもいいのですが,とても遅くなってしまいます.
なにかいい方法ありませんか?
544デフォルトの名無しさん:2012/09/16(日) 23:56:30.10
numpy.unique
545544:2012/09/16(日) 23:57:52.09
http://docs.scipy.org/doc/numpy/reference/generated/numpy.unique.html

numpy クラスタって天才が多いイメージ
546デフォルトの名無しさん:2012/09/17(月) 00:05:46.43
そういう質問なの?
547デフォルトの名無しさん:2012/09/17(月) 00:16:05.50
すいません
質問の仕方が悪かったです.
やりたいことはこんな感じです
numpySet = set()
numpyList = []
while 1:
  a = numpy.array([random.randint(1,999)])
  if not(a in numpySet):
    numpyList.append(a)
548デフォルトの名無しさん:2012/09/17(月) 00:57:37.53
549デフォルトの名無しさん:2012/09/17(月) 00:59:43.91
>>547
どう?

import random

d = {}
s = set()
for i in range(10):
r = random.randint(0, 10)
print(r)
d[r] = None
s.add(r)
print(d.keys())
print(s)
550デフォルトの名無しさん:2012/09/17(月) 01:07:46.65
こっちの方がいいかな?

import random

d = {}
s = set()
for i in range(10):
L = []
for j in range(2):
r = random.randint(0, 3)
L.append(r)
print(L)
t = tuple(L)
d[t] = None
s.add(t)
print(d.keys())
print(s)
nL = [list(x) for x in d.keys()]
print('nL =', nL)
print('len(nL) =', len(nL))
551デフォルトの名無しさん:2012/09/17(月) 01:20:27.92
TypeError: unhashable type: 'numpy.ndarray'

       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \  ごめんね、ごめんね、ごめんね
  |     (__人__)    |  いつもいつも迷惑かけて
  \     ` ⌒´     /  ごめんね、ごめんね、ごめんね。

       ____
     /⌒  ⌒\
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \   もう謝ったから気にしないお!
  |     |r┬-|     |
  \      `ー'´     /

sqlite3使うのかなー、と思ったり。
552デフォルトの名無しさん:2012/09/17(月) 01:36:04.15
>>550
ありがとうございます
numpyもtuple形式にするとsetとかdictに入れられたのですが
x in dicのように比較するとUse a.any() or a.all()と怒られます
== のような比較ならnumpy.all(x == a)でできますが,inのときはどうすればいいでしょう?
553デフォルトの名無しさん:2012/09/17(月) 01:46:05.70
同じ数字を選んじゃうかもしれないrandomintの処理に無駄があるので、
全ての数字をシャッフルして、そこから必要数取れば処理も早くなるのでは?

>>> import random
>>> import numpy
>>> numList = range(1,999)
>>> random.shuffle(numList)
>>> numpyList = []
>>> for num in numList[:20]:
     numpyList.append(numpy.array(num))
554:2012/09/17(月) 01:56:41.88
>>553
説明ではrandom使ったのですが,実際はnumpyの配列がある処理によって生成されていき,
まだ出てきていない配列だけをtxtに保存したいと思ってます
555デフォルトの名無しさん:2012/09/17(月) 04:49:28.24
>>543
色々やってみたけど駄目だった。
根本的な問題は hash 化できないことだけど、
list()はしょうがないので、一旦tuple()で逃げることにした。
これでどう?

import numpy as np
import random

s = set()
for i in range(10):
L = []
for j in range(2):
r = random.randint(0, 3)
L.append(r)
print 'L =', L
na = np.array(L)
print 'na =', na
t = tuple(na)
print 't =', t
s.add(t)
print
na = None

print s
print 'len(s) =', len(s)
print

na2 = [np.array(x) for x in s]
print na2
print 'len(na2) =', len(na2)
556デフォルトの名無しさん:2012/09/17(月) 08:37:06.66
557デフォルトの名無しさん:2012/09/17(月) 13:35:35.68
pyglet のサンプルを参考にプログラムを書いているのですが
from pyglet.gl import *
としているものと
from OpenGL.GL import *
としているものがあり
特にその中でどちらのモジュールにも
glBitmap という関数が存在するのですが
7 番目の引数について
OpenGL.GL の場合は str を渡すと正常に動作します
ところが
pyglet.gl の方では str を渡すと「型が違う」エラーが出ます
PL_C_ubyte とか言う型が要求されているようです
元々 pyglet.gl の方を良く使っていて glBitmap 以外の関数
glTexImage2D なんかだと str 渡しても問題なかったので
pyglet.gl の glBitmap で正常に動作させる方法が知りたいです
ctypes で c_char_p とかに変換して渡してもだめでした
558デフォルトの名無しさん:2012/09/17(月) 13:37:25.08
訂正
LP_C_ubyte でした
すみません
559デフォルトの名無しさん:2012/09/17(月) 13:50:06.22
LP_c_ubyte は ctypes.c_char_p じゃなくて ctypes.c_ubyte の方らしいけど。
560デフォルトの名無しさん:2012/09/17(月) 13:57:10.85
それがどうかしましたか?
561デフォルトの名無しさん:2012/09/17(月) 14:00:29.04
すべてはわたしがつくったモノなのです

とか続けたくなる
562デフォルトの名無しさん:2012/09/17(月) 14:07:02.13
>>556
簡単だと思ったのが運の尽き。。。
563デフォルトの名無しさん:2012/09/17(月) 14:17:17.45
hoge = (ctypes.c_ubyte * size)()
glBitmap(p1, p2, p3, p4, p5, p6, hoge)
で逝けるみたいだけど?
564デフォルトの名無しさん:2012/09/17(月) 14:29:45.13
>>563
bmplen = (width / 8) * height
bmpdata = (ctypes.c_ubyte * bmplen)(*([255] * bmplen))
glBitmap(w, h, w / 2, h / 2, 0.0, 0.0, bmpdata)
で上手く逝きました
ほんとうにありがとうございました
565デフォルトの名無しさん:2012/09/17(月) 14:30:54.06
PyPyくっそ速いなー
566デフォルトの名無しさん:2012/09/17(月) 15:02:42.41
私が学長です。
567デフォルトの名無しさん:2012/09/17(月) 16:39:11.95
>>556
ここが通らなくて詰んだわ。
def test_simple_rule(self):
self.assertEquals(str(SimpleBars(" i ").next()), " iTi ")

'i ' と 'i' の優先度は左が高いんだから、'T'に変換できないでしょ。

あとね、hintってhintじゃないし。
条件じゃない。知らなかったら絶対解けない。
条件を知っても解けない。出題者出てこい。
568デフォルトの名無しさん:2012/09/17(月) 16:43:39.17
ヒント1
  付せんには next() での変更のルールの分析結果がメモされているみたい。
  ええっと、上の付せんは、iTi という並びがあると真ん中の文字が i になる、ということを示しているのかな?
  下の付せんについては、同じ行のルールは左のほうが優先度高いんだ、ってメモした本人が言ってた。
ここの読み解き方が分からんよ、分からん。
569デフォルトの名無しさん:2012/09/17(月) 16:52:14.56
>>556
人によって問題違うン?sys.argv[1] とか渡されないと分からん
print の結果を答えるんじゃないんかね
570デフォルトの名無しさん:2012/09/17(月) 17:00:13.49
m を入力して次の問題に池ってことか
571デフォルトの名無しさん:2012/09/17(月) 17:32:34.54
>>569
def lets_take_tea_break(m, e, n, c):
if pow(m, e) % n == c:
return str(m)
return ""
lets_take_tea_break(*[int(i) for i in (sys.argv[1], 17, 3569, 915)])

こんなのでしょ?
同じだと思うよ。
572デフォルトの名無しさん:2012/09/17(月) 17:53:36.96
*[int(i) for i in (sys.argv[1], 17, 3569, 915)]

この文法わからんちん
どっか解説してるサイト無い?

for i in (sys.argv[1], 17, 3569, 915)
これはリストから変数iとして取り出す、分かる

forの前についてるint(i)ってなんぞ?
*[]はなんぞ?
573デフォルトの名無しさん:2012/09/17(月) 17:56:50.14
[for ...] はリストの内包表記。*は関数に渡すときにリストやタプルが展開される。
Python のチュートリアル見ればおk
二番mんd
574デフォルトの名無しさん:2012/09/17(月) 18:03:44.96
lets_take_tea_break(int(sys.argv[1]), int(17), int(3569), int(915))
をややこしく書いただけってこと?
575デフォルトの名無しさん:2012/09/17(月) 18:07:04.47
3次元のvertexを
X軸で-π/4回転してからY軸で-π/4回転した場合と
Y軸で-π/4回転してからX軸で-π/4回転した場合とで
同じ場所になりますか?
またこれらで与えられる角度が変わった場合でも
X-Y軸の回転順序が違っても常に同じことが期待出来ますか?
あとZ軸が加わった場合でも同じですか?
576デフォルトの名無しさん:2012/09/17(月) 18:08:12.18
>>574
関数の引数の数が可変の場合に役に立つ
577デフォルトの名無しさん:2012/09/17(月) 18:09:39.61
>>574 の用途なら
lets_take_tea_break(*map(int, (sys.argv[1], 17, 3569, 915)))
でいいんじゃないかな
578デフォルトの名無しさん:2012/09/17(月) 18:15:07.55
>>575
結果は一緒にはならないけど、python関係なくね?
579デフォルトの名無しさん:2012/09/17(月) 18:16:37.35
次の問題を解けなくて困ってるんだ、
http://cp1.nintendo.co.jp/2012
http://cp1.nintendo.co.jp/2012_hint.html
↑に来て助けてくれぇぇぇ。

↓使ってくれていいから。
class SimpleBars(list):
def __str__(self):
return "".join(self)

def next(self):
pass

pow(m, e) % n
こんな表記がある時点で中の人は駄目そうって思ったけどさ。
pow(m, e, n)
だろjk
580デフォルトの名無しさん:2012/09/17(月) 18:18:43.08

ヒント1
付せんには next() での変更のルールの分析結果がメモされているみたい。
ええっと、上の付せんは、iTi という並びがあると真ん中の文字が i になる、ということを示しているのかな?
下の付せんについては、同じ行のルールは左のほうが優先度高いんだ、ってメモした本人が言ってた。
ヒント2
出力をよく見て! 途中で左端から出ていった文字が右端から回り込んでる……?
ヒント3
SimpleBars のソースコードはどこ?って聞いたら、代わりにテストコードをあげる、だって。
SimpleBarsTest.py

覚え書き:
・list を継承する→ class SimpleBars(list):
・list("abc") == ["a", "b", "c"]; "".join(["a", "b", "c"]) == "abc"
・str() のカスタマイズ→ def __str__(self):
ヒント4
SimpleBars を実装したら、あとは問題後半のコードを何も考えずに実行すれば答えが出そう。
このややこしいコードを読み解く必要はないみたい。

これ、ヒントじゃないから。
条件だから。この条件がないと絶対解けない。
この条件があっても解けない。
ヒント1が曲者で困ってござる。
581デフォルトの名無しさん:2012/09/17(月) 18:21:14.67
class SimpleBars(list):
def __str__(self):
return "".join(self)

str(simplebarsTest)が文字列で帰ってこない・・・
わけわからん
582デフォルトの名無しさん:2012/09/17(月) 18:23:53.21
お前頭おかしいんじゃねぇ?
583デフォルトの名無しさん:2012/09/17(月) 18:29:54.00
SPOJもpythonのコードが受け付けられるが、そういうのをいちいち質問するのはウザがられる
パズルを解けという依頼は他所でやった方が良い
アルゴリズムの実装においてpythonのことで分からないことがあればそこだけ質問しろ
584デフォルトの名無しさん:2012/09/17(月) 18:46:03.06
SimpleBarsの出力が画像とか任天堂のボケナスっぷりに失笑
やってられるか
585デフォルトの名無しさん:2012/09/17(月) 19:08:50.16
解けなくて困ってるんだお。。。
どうやって解いたらいいんだお。。。
586デフォルトの名無しさん:2012/09/17(月) 19:10:22.64
悪い。俺は困ってない。
587デフォルトの名無しさん:2012/09/17(月) 19:21:31.36
俺様が困っていると言っているんだ。
お前が困っていようと、いまいと関係ない。

どうやって解いたらいいんだお。。。
588デフォルトの名無しさん:2012/09/17(月) 19:23:24.25
ヒント: htmlのソースを表示
589デフォルトの名無しさん:2012/09/17(月) 19:29:55.41
仕方が無いからこのアホをあらぬ方向に誘導して遊ぶか
590デフォルトの名無しさん:2012/09/17(月) 20:03:14.97
>>579
子供は帰れよ
自分のテストを他人の力で突破してなんになる
591デフォルトの名無しさん:2012/09/17(月) 20:09:01.67
自己満足できる
592デフォルトの名無しさん:2012/09/17(月) 20:09:30.72
スクリプトキディ的な考え方で…
593デフォルトの名無しさん:2012/09/17(月) 20:11:04.78
pass
594デフォルトの名無しさん:2012/09/17(月) 20:12:07.88
ここまで原典どおりで純正な厨房って久々だなー
595デフォルトの名無しさん:2012/09/17(月) 20:46:32.95
意図してやったからな
いまいち盛り上がらないでやんの
596デフォルトの名無しさん:2012/09/17(月) 21:58:28.22
はい後釣り貰いましたー^^
597デフォルトの名無しさん:2012/09/17(月) 23:58:06.29
>>577
実はmapって遅いんですね
598デフォルトの名無しさん:2012/09/18(火) 00:02:56.18
速度気にするならtea(int(sys.argv[1]), 1, 2, 3)でいい
599デフォルトの名無しさん:2012/09/18(火) 00:05:49.95
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
600デフォルトの名無しさん:2012/09/18(火) 00:17:49.33
>>599
なら解く必要ないじゃん

        ──終了──
601デフォルトの名無しさん:2012/09/18(火) 01:30:06.07
時間の無駄以外の何物でもないな
602デフォルトの名無しさん:2012/09/18(火) 01:35:07.31
>>> a = [2, 3, 1]
>>> print '%d,%d,%d' % (a[0], a[1], a[2])
2,3,1
>>> print '%d,%d,%d' % a
TypeError: int argument required
>>> print '%d,%d,%d' % (*a)
SyntaxError: invalid syntax

何がいけないんでしょう?><
603デフォルトの名無しさん:2012/09/18(火) 01:39:36.91
print '%d,%d,%d' % tuple(a)
604デフォルトの名無しさん:2012/09/18(火) 01:42:18.50
ありです!
605デフォルトの名無しさん:2012/09/18(火) 06:35:30.70
ネタやってる奴は訓練されたuy
任天堂がPython使ったことに嫉妬して暴れ出した。
606デフォルトの名無しさん:2012/09/18(火) 23:50:41.87
L=[ 'val1', { '1a': 1, '1b': 1, '1g':0 }, 'val2', { '1c': 1, '1d': 2}, 'val3', { '1e': 1, '1f': 3}]

L=[ 'val3', { '1e': 1, '1f': 3}, 'val2', { '1c': 1, '1d': 2}, 'val1', { '1a': 1, '1b': 1, '1g':0 } ]
のように{}内の値の合計(1+3,1+2,1+1+0)でsortする方法を教えて下さい。
607デフォルトの名無しさん:2012/09/19(水) 00:00:39.98
見るだけでアホらしいデータと感じるので嫌です
まだvalXと対応するdictが纏まってればいいけど
一緒にリストに突っ込んでるなんて醜い醜い醜い
プログラマに全角半角入り混じった文章を見せ続けると死ぬに近い不快感
608デフォルトの名無しさん:2012/09/19(水) 00:03:56.21
アルゴリズムを考える前にクレイジーなデータ構造を何とかしろよ…
609デフォルトの名無しさん:2012/09/19(水) 00:16:40.99
L=[ ('val1', { '1a': 1, '1b': 1, '1g':0 }), ('val2', { '1c': 1, '1d': 2}), ('val3', { '1e': 1, '1f': 3})]
せめてこうだったらな
610デフォルトの名無しさん:2012/09/19(水) 00:18:53.58
脳みそが爆発した
611デフォルトの名無しさん:2012/09/19(水) 00:21:04.69
仮に609なら若干無駄はあるが1行で済む
L.sort(lambda x,y:sum(y[1].values())-sum(x[1].values()))
612デフォルトの名無しさん:2012/09/19(水) 00:27:08.60
他の人が言うようにアホらしいのでコードは書かないが、
>>606の1行目を>>609に変形して、>>611を実行して、さらに>>606の3行目に戻せばいい。
613デフォルトの名無しさん:2012/09/19(水) 09:33:34.03
>>607
全角半角入り混じった文章ではなくて
全角英数が入り混じった文章ではないのかな
614デフォルトの名無しさん:2012/09/19(水) 09:36:16.53
>606 は
L={'val1': { '1a': 1, '1b': 1, '1g':0 }, 'val2': { '1c': 1, '1d': 2}, 'val3': { '1e': 1, '1f': 3}}
のつもりだったんじゃないのかな
615デフォルトの名無しさん:2012/09/19(水) 09:44:05.91
失敗から学ぶのが技術者
失敗したら他人のせいにするのが経営者
失敗しても安全と言い張るのが御用学者
失敗しても気にしないのが東電
失敗したらデータを捏造するのが韓国人
失敗したら隠すのが中国人
失敗したらもみ消すのが警察
失敗したら有耶無耶にするのが官僚
失敗したらルールを変えるのが政治家
失敗したら喜ぶのがマスゴミ
616デフォルトの名無しさん:2012/09/19(水) 16:41:23.59
失敗したら、と考えるのが>>615
617デフォルトの名無しさん:2012/09/19(水) 16:47:54.53
そして失敗しない俺
618デフォルトの名無しさん:2012/09/19(水) 17:13:03.14
Windows 7 64bit
Cython0.17
Visual Studio9.0 x86
Python3.1, 3.2 64bitは問題ないのに
3.3rc2 64bitだけエラーが起きる
Microsoft Visual C++ Runtime Library
Runtime Error!
Program: C\Python33\python.exe
R6034
An application has made an attempt to load the C runtime library incorrectly.
Please contact the application's support team for more information.

ImportError: DLL load failed: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。
619デフォルトの名無しさん:2012/09/19(水) 17:50:12.14
x86
620デフォルトの名無しさん:2012/09/19(水) 18:26:07.41
>>618
> Visual Studio9.0 x86
621デフォルトの名無しさん:2012/09/19(水) 18:48:08.92
Python3.3から32bit版では使えなくなったの?
622デフォルトの名無しさん:2012/09/19(水) 18:52:12.21
623デフォルトの名無しさん:2012/09/19(水) 18:53:55.89
だいぶ前にpython2.xで使おうとしたら挙動がおかしかったからPydev使ってるけど
今はまともになったの?
624デフォルトの名無しさん:2012/09/19(水) 18:55:39.64
なにを?
625デフォルトの名無しさん:2012/09/19(水) 18:58:26.94
突然すいません。
PythonMagickでアニメーションGIFのフレーム毎の処理を行う場合、PILでいうseek()のようなのって無いんでしょうか?
626デフォルトの名無しさん:2012/09/19(水) 18:59:32.40
>>624
Pydevって言ってんだから文脈からvisual studioのpython開発プラグインって気づけよ
627デフォルトの名無しさん:2012/09/19(水) 19:01:26.20
分かるわけねぇw
628デフォルトの名無しさん:2012/09/19(水) 19:01:41.17
無茶言うなワロタ
629デフォルトの名無しさん:2012/09/19(水) 19:02:02.88
脈…?
630デフォルトの名無しさん:2012/09/19(水) 19:03:42.03
Python Tools for Visual Studioの存在を知らない人が殆どだから仕方ないか
631デフォルトの名無しさん:2012/09/19(水) 19:04:48.60
いや、使ってるけどこの発想は無理
632デフォルトの名無しさん:2012/09/19(水) 19:06:46.25
じゃあ質問に答えろよ
633デフォルトの名無しさん:2012/09/19(水) 19:07:09.96
開発環境つってもいろいろあるからなー
634デフォルトの名無しさん:2012/09/19(水) 19:07:38.75
Visual Studioの話題が出たから質問しただけだが
635デフォルトの名無しさん:2012/09/19(水) 19:08:03.96
ここで画像処理の質問は畑違いか、、
636デフォルトの名無しさん:2012/09/19(水) 19:08:50.67
>>635
狭い畑だからな
637デフォルトの名無しさん:2012/09/19(水) 19:09:47.03
>>636
ありがとう、自力で頑張るよ
638デフォルトの名無しさん:2012/09/19(水) 19:10:01.23
PythonMagick全然更新されてないから使う気にならなかったんだ
ごめんねー
639デフォルトの名無しさん:2012/09/19(水) 19:13:40.85
C:\Windows\System32\cmd.exe \E:ON \V:ON \T:0E \K "C:\Program Files\Microsoft SDKs\Windos\v7.0\Bin\Setenv.cmd \x64 \release"
Python setup.py build_ext --inplace
でコンパイルすると
c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin\amd64\cl.exeとlink.exeが使われて
その後
C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\x64\mt.exeが行われます

これで完成した.pydをimportするとPython3.3だけエラーが起こります
640デフォルトの名無しさん:2012/09/19(水) 19:30:58.40
>>622
ありがとうございます
解決しました

Python3.3だけmt.exeが実行されずに終わってました
setup.pyは同じなのに…
とりあえず、手動で実行したら解決しました
641デフォルトの名無しさん:2012/09/21(金) 20:23:15.35
>>491
引数と環境変数と記録するようなwrapper書くとか、
Pythonスクリプトに一時停止するコードを追加してProcess Exploererで引数と環境変数を見るとか、
PyDevのソースコードを見るとか。
642デフォルトの名無しさん:2012/09/21(金) 22:02:06.87
pythonってニシキヘビだろ?

名前が好きになれないし、FORTRAN95みたいにインデント
でブロック構成だなんて。PHPの方がまだましだわ。
643デフォルトの名無しさん:2012/09/21(金) 22:04:48.09
pythonを使ったことない人は皆そう言うが、その批判には何の意味もない
644デフォルトの名無しさん:2012/09/21(金) 22:07:00.24
>>643

何か中国政府の高官発言みたい。
645デフォルトの名無しさん:2012/09/21(金) 22:07:25.73
elseじゃなくてelifかよ!
紛らわしい…
646デフォルトの名無しさん:2012/09/21(金) 22:09:25.94
>>642
> pythonってニシキヘビだろ?
しばしばそのような指摘がなされますが、pythonの成り立ちと実在の蛇とはまったく関係がありません
647デフォルトの名無しさん:2012/09/21(金) 22:10:53.13
elifとelseは違うだろ
648デフォルトの名無しさん:2012/09/21(金) 22:34:01.19
else if, elif, elseif, elsif
649デフォルトの名無しさん:2012/09/22(土) 01:52:32.71
SPAMでも食っとけ
650デフォルトの名無しさん:2012/09/22(土) 04:59:37.77
SPAMが入ってないのは!?(グレアム)
651デフォルトの名無しさん:2012/09/22(土) 07:25:59.35
switch無いのに突っ込む人はあまりいない
652デフォルトの名無しさん:2012/09/22(土) 15:38:37.13
SimpleHTTPServerを使ってみたくて
test()
を実行したところ以下のようなエラーになりました
Windowsではできたのですが、Ubuntu(Linux)ではできませんでした

>>> import SimpleHTTPServer
>>> SimpleHTTPServer.test()
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
SimpleHTTPServer.test()
File "/usr/lib/python2.7/SimpleHTTPServer.py", line 216, in test
BaseHTTPServer.test(HandlerClass, ServerClass)
File "/usr/lib/python2.7/BaseHTTPServer.py", line 589, in test
port = int(sys.argv[1])
ValueError: invalid literal for int() with base 10: '-n'

どなたか解決策、または原因のみでもわかる方いませんか
よろしくおねがいします
653デフォルトの名無しさん:2012/09/22(土) 15:40:43.62
つ ValueError: invalid literal for int() with base 10: '-n'
654652:2012/09/22(土) 15:42:29.93
あ、すいませんバージョンをいい忘れました
2.73(32bit)を使ってます
655652:2012/09/22(土) 15:52:38.27
ちなみにシェルスクリプトではなく
ファイルを読み込んでから「run module」でやると実行はできるのですが
C+z C+cでも固まってしまって、×を押しても終了できなくなります
656デフォルトの名無しさん:2012/09/22(土) 15:56:01.35
PyShellを使わずに端末からpython起動して同じことをやったらどうなる?
657652:2012/09/22(土) 16:02:53.67
>>656
端末からだと大丈夫でした
C+cで無事終了できました

原因はPyShellなんでしょうか
658デフォルトの名無しさん:2012/09/22(土) 16:12:32.88
>>657
Pythonを起動してる環境が多分悪さしてる
どんな環境から実行してるのか詳しく書いてくれれば原因がわかるかも
(IDLEとかEclipseとかPyScripterとか)
659652:2012/09/22(土) 16:26:51.60
>>658
IDLE(Python 2.7版)と書いてあります。
OSはUbuntu(Linux) 12.04です
Pythonのバージョンは2.73です
660デフォルトの名無しさん:2012/09/22(土) 16:37:57.65
>>659
idleの起動引数に"-n"が入ってるんじゃないか
idleを起動したら
>>> import sys
>>> sys.argv
ってやってみて

とりあえず今回はidle使わないのが手っ取り早いと思う
661デフォルトの名無しさん:2012/09/22(土) 16:40:50.90
PythonShellとか使いにくいだけだからIPython使っとけってことだな
662デフォルトの名無しさん:2012/09/22(土) 16:51:53.23
>>660
!!
ほんとに-nが入ってました。
['/usr/bin/idle-python2.7', '-n']
これってどういう意味なんでしょうか
私は変な設定とかした覚えはないんですが

>>660 >>661
idleはあまりよくないんですね
わかりました
別のやつを探してみます
lpythonというのから調べてみます
663652:2012/09/22(土) 17:02:52.24
あ、>>662は私です

WindowsのIDLE(Python 2.7版)
Linuxの「端末」上

それぞれで import sys ///sys.argv をやってみたところ
両方共 
['']
という結果でした

やはりUbunt上のIDLEだけ特殊な設定になっているみたいですね
664652:2012/09/22(土) 17:04:07.14
おかげで助かりました
皆さん本当にありがとうございました
665デフォルトの名無しさん:2012/09/22(土) 17:08:27.14
Ubuntuのパッケージャが気を利かせてidle -nとかしてるんだろう
less /usr/bin/idle-python2.7 とかして中身を見てみるといいよ

ライブラリ書く人はif __name__ == '__main__': _test() とかして
ユーザが直接 _test() を呼ばないようにしといたほうがいいのかもと思った
666デフォルトの名無しさん:2012/09/22(土) 23:09:45.20
AptanaとPython2.7の環境で、定期的にwebにアクセスして情報を引っ張ってくるプログラムを書きました。

しかし、どうも特定のページではキャッシュにアクセスしているようです。
そのページが更新されているのに、更新前のページソースが帰ってきます。
このような場合、どう対処すればよいのでしょうか。
よろしくお願いします

Pythonのコードは、単純に
urllib.urlopen(page_name)
としているだけです。
667666:2012/09/22(土) 23:13:58.47
申し訳ありません。
追記となりましたが、Proxyサーバーを経由しています。
調べたところ、その影響があるかもしれません。
668デフォルトの名無しさん:2012/09/23(日) 01:38:14.92
アクセス先が
http://hoge.fuga/hage.html
だとして
http://hoge.fuga/hage.html?t=2012092301371234
とかダミーのタイムスタンプ付けてアクセスしてみるとか
669デフォルトの名無しさん:2012/09/23(日) 08:39:33.92
自分でやってないので、参考になるかどうかは知らんが
http://okwave.jp/qa/q1923037.html
670デフォルトの名無しさん:2012/09/23(日) 10:13:00.32
If-Modified-Since: Thu, 01 Jun 1970 00:00:00 GMT
671デフォルトの名無しさん:2012/09/24(月) 10:00:35.17
python2です。

>>> abc = {'alpha':u'α', 'beta':u'β', 'gamma':u'γ', 'delta':u'δ', 'epsilon':u'ε'}
>>> print repr([abc[k] for k in sorted(abc)]).decode('unicode-escape')
[u'α', u'β', u'δ', u'ε', u'γ']

これを、

[u'α', u'β', u'γ', u'δ', u'ε']

と表示されるようにしたいのですが、
どのような方法がスマートでしょうか?
例はεまでですが、それ以降のギリシャ文字もあると看做してください。
672デフォルトの名無しさん:2012/09/24(月) 10:04:09.37
print repr(sorted(abc.values())).decode('unicode-escape')
673デフォルトの名無しさん:2012/09/24(月) 10:05:58.45
すみません、訂正です。
>>> print repr([(k, abc[k]) for k in sorted(abc)]).decode('unicode-escape')
[('alpha', u'α'), ('beta', u'β'), ('delta', u'δ'), ('epsilon', u'ε'), ('gamma', u'γ')]



[('alpha', u'α'), ('beta', u'β'), ('gamma', u'γ'), ('delta', u'δ'), ('epsilon', u'ε')]

で、おながいします。
674デフォルトの名無しさん:2012/09/24(月) 10:06:59.42
>>672 さん、ありがとうございます。
行き違いになってしまいました。すみません。
>>673 で引き続きおながいします。
675デフォルトの名無しさん:2012/09/24(月) 10:50:20.47
>>> abc = {'alpha':u'α', 'beta':u'β', 'gamma':u'γ', 'delta':u'δ', 'epsilon':u'ε'}
>>> print repr([(k, abc[k]) for k in sorted(abc,
 cmp=lambda a, b: -1 if abc[a] < abc[b] else 0 if abc[a] == abc[b] else 1)]).decode('unicode-escape')
[('alpha', u'α'), ('beta', u'β'), ('gamma', u'γ'), ('delta', u'δ'), ('epsilon', u'ε')]
676デフォルトの名無しさん:2012/09/24(月) 11:03:22.95
こっちの方が良いかな

>>> abc = {'alpha':u'α', 'beta':u'β', 'gamma':u'γ', 'delta':u'δ', 'epsilon':u'ε'}
>>> print repr([(k, abc[k]) for k in sorted(abc, cmp=lambda a, b: cmp(abc[a], abc[b]))]).decode('unicode-escape')
[('alpha', u'α'), ('beta', u'β'), ('gamma', u'γ'), ('delta', u'δ'), ('epsilon', u'ε')]
677デフォルトの名無しさん:2012/09/24(月) 11:12:41.61
sorted(abc.items(), key=lambda x: x[1])
678デフォルトの名無しさん:2012/09/24(月) 11:52:32.49
>>639
ありがとうございます!
679デフォルトの名無しさん:2012/09/24(月) 21:19:47.86
yahooから株価情報を取得したいのですが、
いろいろ調べているとBeautifulsoupというモジュールが良さそうなのですが、
他に良いモジュールなどありますでしょうか?
680デフォルトの名無しさん:2012/09/24(月) 21:24:49.84
>>679
lxml
681デフォルトの名無しさん:2012/09/25(火) 02:29:25.54
cmp は 3.x でなくなるよ

sort の key=に渡す関数は、operator モジュールの利用がお勧め

Cモジュールなので若干の速度upが期待できるし、
2項目ソートの時に key=itemgetter(1,2) みたいに書けます。

http://www.python.jp/doc/release/howto/sorting.html#operator
682デフォルトの名無しさん:2012/09/25(火) 05:15:15.54
itemgetterが組み込み関数じゃない理由が分からないが
それを読んだ人が何やってるか分からないからだろうな
683デフォルトの名無しさん:2012/09/25(火) 21:46:04.73
decode使っての文字コードの変換って文字列が長かったりしたら失敗する?
684デフォルトの名無しさん:2012/09/25(火) 22:05:58.54
実装によってはなるかも知れんが、生憎俺は遭遇したことがない
685デフォルトの名無しさん:2012/09/25(火) 22:14:28.72
ループでデコードしまくったら、文字化けしたことがあるな

for val in list:
print val.decode('shift_jis')

みたいにしたら、時々文字化けするっていう
Aptana、Python2.7
686679:2012/09/25(火) 23:01:09.75
>>680
教えていただいてありがとうございます。
よさそうですね。参考にさせていただきます。
687デフォルトの名無しさん:2012/09/26(水) 01:05:49.74
リストに入った文字列をすべてテキストに保存したいのですが
b = ''
for line in listA:
b += line + '\n'
というように取りだしてから保存しようとすると,40万件くらいのデータだとbに入れる時点ですごく遅くなってしまいます.
なにか他にいい方法ありませんか?
688デフォルトの名無しさん:2012/09/26(水) 01:41:56.88
'\n'.join(listA)
689デフォルトの名無しさん:2012/09/26(水) 01:51:04.59
with open(..., "w") as f:
f.writelines("\n".join(listA))

with open(..., "w") as f:
for line in listA:
f.write(line + "\n")

どっちが早いかな。下と予想してみる
690デフォルトの名無しさん:2012/09/26(水) 02:13:29.79
>>688
>>689
ありがとうございます!
下の方が2倍くらい早かったです
691デフォルトの名無しさん:2012/09/26(水) 02:48:18.49
一度、長大な文字列作成してからdiskに書き込むよりも、
いきなりdiskに書き込んでいった方が高速なのか。

そうかそうか、一度、長大な文字列作成する必要ないもんね。
勉強になった。ありがとう。
692デフォルトの名無しさん:2012/09/26(水) 08:10:58.83
>683-685
errors='ignore'
693デフォルトの名無しさん:2012/09/26(水) 09:48:13.72
pythonでCGIプログラムを作っているのですが、そのCGIのURLに飛ぶたびに
test.pyというCGIファイルがダウンロードされてしまいます
OSはLinuxで、chmod 0755 test.py はすでに実行済みです
test.pyをダブルクリックすると、「端末」で実行できるようになっており
test.pyの内部処理の結果が表示されます

サーバーはCGIHTTPServer.test()で実行しています。

特にエラーも出ておりません。

自分なりに調べてみたのですが、わかりませんでした。
どなたか原因が分かる方いたらご教授ください。
694デフォルトの名無しさん:2012/09/26(水) 09:55:13.16
追記
test.pyというCGIファイルはindex.htmlと同じフォルダに作った
cgi-binというフォルダに入っています
695デフォルトの名無しさん:2012/09/26(水) 10:23:29.80
申し訳ありません
自己解決しました

知人にアクセスしてもらっところ、CGIが表示できました。
どうやら最初にミスした時のキャッシュファイル(?)がずっと残っていたみたいです
お騒がせしました
696デフォルトの名無しさん:2012/09/26(水) 19:09:14.67
自己解決はいいけど、キャッシュしないように設定したりはしないの?
697デフォルトの名無しさん:2012/09/27(木) 19:19:51.61
py2pl トランスレータ、誰か作って。
698デフォルトの名無しさん:2012/09/27(木) 19:38:18.46
何で敵将に献上しなきゃいけないんだ。
むしろお前がpl2py作れ。
もちろんPython3に変換してくれるんだろうな。
699デフォルトの名無しさん:2012/09/28(金) 00:57:07.65
正論

個人的には過去の豚真珠プログラムは蛇に置き換えたのでどうでもいい
700デフォルトの名無しさん:2012/09/30(日) 12:19:51.60
疑問なのですが、どうしてPythonの文字数や配列数はlen()関数で数えるのでしょうか?
Javascriptなどのように、.lengthプロパティではない理由はあるのでしょうか?

スライスのことを考えると、内部的に数を持っているかと思うので.lengthのほうがスムーズかと思うのですが。
701デフォルトの名無しさん:2012/09/30(日) 12:36:17.88
.__len__()
702デフォルトの名無しさん:2012/09/30(日) 12:37:02.66
あるよ
歴史的経緯だとどこかに書いてあったはず
703デフォルトの名無しさん:2012/09/30(日) 12:48:05.89
704デフォルトの名無しさん:2012/09/30(日) 14:00:37.58
705デフォルトの名無しさん:2012/09/30(日) 14:06:51.46
>>700

max(map(len, xs))

max(x.__len__() for x in xs)
706デフォルトの名無しさん:2012/09/30(日) 16:11:41.75
鏡音レングス
707デフォルトの名無しさん:2012/09/30(日) 22:58:26.34
np.vectorizeを使うとこのようになるのですが、どうしたら正常に処理できますか?
vectorizeではなく文字列用の関数があるのでしょうか?

import numpy as np
print np.vectorize(lambda x: x, otypes=[np.dtype('S24')])(np.array(['P'*20]))

出力:['PPPP']
期待する出力:['PPPPPPPPPPPPPPPPPPPP']

やりたいこと
listへのmapのように、np.arrayの各要素に対して処理をしたい

環境
python2.7.3
numpy1.6.2
708デフォルトの名無しさん:2012/09/30(日) 23:05:38.93
出力はlistなの
709デフォルトの名無しさん:2012/09/30(日) 23:43:20.21
出力はarrayがいいです

import numpy as np
print np.array(map(lambda x: x, np.array(['P'*20])))
出力:['PPPPPPPPPPPPPPPPPPPP']

こうしてみたら動作は期待通りなんですが、なんか釈然としないというか…numpyを使った意味が無いような…
710デフォルトの名無しさん:2012/10/01(月) 00:24:27.51
ざっと言語仕様を見てみたところ、
Cの構造体に相当する機能がないようですが
レコードをフィールドに区切って扱う概念がないと
つらくないですか?
711デフォルトの名無しさん:2012/10/01(月) 00:34:01.83
名前付きタプル
712デフォルトの名無しさん:2012/10/01(月) 05:00:08.03
普通にクラス使っても良い
713デフォルトの名無しさん:2012/10/01(月) 05:06:01.06
714デフォルトの名無しさん:2012/10/04(木) 01:07:31.28
Python Tools for Visual Studio使っている人いますか?
例えばiを何も定義せずに
print i
などとしたときに、実行するまで未定義なのかわからずに困っています
なにか設定が必要なのでしょうか?
715デフォルトの名無しさん:2012/10/04(木) 01:33:51.40
>>714
exec raw_input()
print i

みたいなコードがあったら
i が未定義かどうか実行するまでわからない。
716デフォルトの名無しさん:2012/10/04(木) 01:36:22.37
if some_func():
  i = 0
print i

の方がわかりやすいかも
717デフォルトの名無しさん:2012/10/04(木) 01:58:48.73
それはバグだよw
718デフォルトの名無しさん:2012/10/04(木) 02:04:15.10
ともかくPydevでは教えてくれるような>>714のようなエラーを
VSが教えてくれないから困っているという話だろう
>>716はまた別の話。俺はVSのそれを使ったことがないから質問には答えられないが
719デフォルトの名無しさん:2012/10/04(木) 02:19:51.85
pylint を使おう >ソースの静的解析

PYVS でサポートしてるかどうかは、使ってないので知らないけど、
調べてみたところ(codeplex内 DISCUSSION,ISSUE TRACKER で pylint を検索した程度)
要望は挙がってるもののパッチはないみたい。(2011 Oct)

ttp://pytools.codeplex.com/discussions/275963
720デフォルトの名無しさん:2012/10/04(木) 08:35:12.55
lint しても無駄
実行してみないと判らないことはいくらでもある
721デフォルトの名無しさん:2012/10/04(木) 09:55:14.84
だからー、今回の質問者の問題は分かるんだって
722714:2012/10/04(木) 10:33:56.00
皆様ありがとうございます
pydevでは実行しなくても'Undefined variable'と警告してくれるので
Python Tools for Visual Studioでも教えてくれないのかなぁと思っていました
どうやらPTVSでは教えてくれなそうなので、しばらくはpydevの方を使っていようと思います
723デフォルトの名無しさん:2012/10/04(木) 10:36:46.83
馬鹿には無理
724デフォルトの名無しさん:2012/10/04(木) 20:59:09.46
python3.3です。質問です。
ipアドレスのリストを読み込みwhoisを実行する。結果をhtmlファイルに書き出す。
というプログラムを書いています。
あらかたのアドレスは上手くいっているのですが、一部でUnicodeDecodeErrorがでて書きだせません。
結果自体はbytes.decode(subprocess.check_output(["whois", ip_address]))でとって、fp.writeで書いています
175.119.227.235あたりのアドレスでエラーがでます。

これを回避する方法はないでしょうか?

参考になるかわからないですが、試したことを書いておきます。

>>> bytes.decode(b'\xe3\x81\x82')
'あ'

>>> bytes.decode(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 0: invalid start byte

>>> locale.getpreferredencoding(False)
'UTF-8'
725デフォルトの名無しさん:2012/10/04(木) 21:11:13.84
無視したらいけました。」
726デフォルトの名無しさん:2012/10/05(金) 02:19:56.52
>>> bytes.decode(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5', errors='ignore')

としたらいけました。って書こうぜ。
encodingを指定してもよく分からんかった。

>>> bytes.decode(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5', encoding='sjis')
'チカネクヌマスナ'
>>> bytes.decode(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5', encoding='euc-jp')
'繕噺馬重'
727デフォルトの名無しさん:2012/10/05(金) 06:17:25.57
韓国語(euc-kr ?)っぽいね。ブラウザでwhois引いても文字化けしてた。
728デフォルトの名無しさん:2012/10/05(金) 06:21:49.95
>>> '\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5'.decode('euc-kr')
u'\uc870\ud68c\ud558\uc2e0'
729デフォルトの名無しさん:2012/10/05(金) 06:23:48.82
조회하신
730デフォルトの名無しさん:2012/10/05(金) 06:27:14.30
猥褻用語か
731デフォルトの名無しさん:2012/10/05(金) 11:53:48.88
「照会されたIPv4アドレスは、韓国インターネット振興院から下の管理代行者に割り当てられており、割り当て情報は、次のとおりです。」
と書いてある。
732デフォルトの名無しさん:2012/10/05(金) 12:51:43.92
3.3.0 で確認
pip install chardet2 で python3用のchardetをインストール

>>> import chardet
>>> chardet.detect(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5')
{'encoding': 'EUC-KR', 'confidence': 0.99}
733デフォルトの名無しさん:2012/10/06(土) 00:48:54.31
HTMLParser を使って HTML 内の文字列を取り出すスクリプトを作っています。
feed() で読み込ませ、目的の文字列を取り出し終えたら、残りはもう見る必要ないので
そこで中断させたいのですが、どうしたらいいんでしょうか?

Python3.3です。
734デフォルトの名無しさん:2012/10/06(土) 01:45:51.33
>>733
feedの後に目的の文字が見付かったかどうかをチェックし、
見付かってたらfeedで読み込みしてるループを抜ける。
735デフォルトの名無しさん:2012/10/06(土) 01:46:41.65
あんまり綺麗じゃないけどdef handle_*の中で例外投げるとか
iterparse()のあるlxmlを使ったほうが直感的でいいかも
736733:2012/10/06(土) 09:21:43.01
>>734
feed() を呼んだ時、HTMLParserインスタンスの処理が終わる前にfeed()の後のコードが
実行されるという事ですか?

>>735
大したスクリプトじゃないんで外部モジュール使うのもどうかなと思っていたのですが、
ちょっと勉強してみます。

レスありがとうございました。
737デフォルトの名無しさん:2012/10/06(土) 14:26:36.89
例外投げるのが綺麗じゃないと思う理由を知りたい
738デフォルトの名無しさん:2012/10/06(土) 14:29:36.17
言語によってはフロー制御に例外使うのをアンチパターンとしているからかな
俺は733じゃないのであくまで想像だが
739デフォルトの名無しさん:2012/10/06(土) 15:05:22.09
>>737
パーサにparser.stop()みたいなメソッドがあればそっち使いたいのが一点
あとStopIterationみたいにfor文で暗黙的に例外が処理されるならともかく
今回のはパーサ作ってfeed()する側が明示的に例外を処理しなきゃいけないのがもう一点
740デフォルトの名無しさん:2012/10/06(土) 15:46:49.80
>>738
漏れは733じゃなくて735に聞いたのに何でおまえが答えてんの?
741デフォルトの名無しさん:2012/10/06(土) 15:48:57.69
>738
>言語によってはフロー制御に例外使うのをアンチパターン

どの言語のことでしょう
742デフォルトの名無しさん:2012/10/06(土) 15:50:00.38
pass
743デフォルトの名無しさん:2012/10/06(土) 15:51:23.20
>>741
えっ
744デフォルトの名無しさん:2012/10/06(土) 16:08:55.03
インタプリタじゃない言語の類でしょ
C++/C#/Javaとか

理由としては、上記の言語では例外のコストが通常の制御に比べて高すぎるので
例外的状態にだけ例外を使用する(=予測可能なエラーに対して例外を使用しない)という了解がある

軽量言語でも例外のコストは通常の制御より高いが、
上記の言語に比べれば大したことがないので許される
まあ一言で言えば「Pythonには関係ない」よ
745デフォルトの名無しさん:2012/10/06(土) 16:14:18.74
Java の parseInt はその主張と矛盾すると思うのですが
746デフォルトの名無しさん:2012/10/06(土) 16:16:38.96
EffectiveXXXや達人プログラマー、CodeCompleteなどの
いわゆる良書と言われる本には必ず(大抵ではない)書いてあることなので
興味があるなら読んでみてもいいかもね
747デフォルトの名無しさん:2012/10/06(土) 16:17:39.53

Java に parseInt() はあるが、isInt() が無い理由
http://d.hatena.ne.jp/kameid/20090320/1237545618
748デフォルトの名無しさん:2012/10/06(土) 16:18:59.67
いやJavaは例外投げまくりでしょ
749デフォルトの名無しさん:2012/10/06(土) 16:21:50.77
>>745
その通りです
上記の本を読んだ人が真っ先に考えるのはそのメソッドの存在でしょう

EffectiveJavaの中でも無駄に例外を投げているJDKの設計について、一部苦言が呈されています
要するに、Javaの開発者がアホだったのです
750デフォルトの名無しさん:2012/10/06(土) 16:23:14.70
Javaは糞
はいおしまい
751デフォルトの名無しさん:2012/10/06(土) 16:25:10.42
へぇーC#はTryParseあるのにJavaは無いんだ
752デフォルトの名無しさん:2012/10/06(土) 16:26:00.91
スレチだと伸びるな
753デフォルトの名無しさん:2012/10/06(土) 16:33:43.08
exit(1)
754デフォルトの名無しさん:2012/10/06(土) 16:36:34.76
insert(角電池)
755デフォルトの名無しさん:2012/10/06(土) 18:36:57.62
例外処理をリスト内包表記で作っていく辞書の値について行いたいのですが、
三項演算子みたいに1行でやることはできますか?
具体的には[{ 'foo': ? } for x in bar]の?の部分で, 例外が発生するかしないかでfooの値を変えたいです。
756デフォルトの名無しさん:2012/10/07(日) 04:22:54.23
出来ないし、なんでも一行でやろうとするな
757デフォルトの名無しさん:2012/10/07(日) 04:42:42.22
スマァァァァトに書きたいんですぅぅぅぅぅ
ワンライナーはとてもSmaaaat!!!!!((c) MOTHER2・任天堂・糸井重里)だと思うんですぅぅぅぅ
758デフォルトの名無しさん:2012/10/07(日) 04:45:25.44
それはコーダーの自己満足だろ
759デフォルトの名無しさん:2012/10/07(日) 04:52:15.29
こうですか?

def proc(x):
  try:
    return hogehoge(x)
  except (Hoge, Hage), e:
    return fugafuga(x)
[setattr(jisho, 'foo', proc(x)) for x in bar]
760デフォルトの名無しさん:2012/10/07(日) 09:26:10.89
yahooから株価を取得してDBに放り込むプログラムを作成しました。
今までずっとCを利用してましたが、pythonでの初めてプログラムなので修正点などありましたら教えていただけると幸いです。

def get_historical_price_latest_from_yahoo_co_jp(stock_code):
import urllib2, lxml.html, pgdb
from time import strftime, strptime
url_header = "http://stocks.finance.yahoo.co.jp/stocks/history/?code="
get_url = url_header + stock_code + ".T"
html = urllib2.urlopen(get_url).read()
root = lxml.html.fromstring(html)
tr_elements = root.xpath("//tr")
connector = pgdb.connect(host="****", database="****", user="****", password="****")
cursor = connector.cursor()
for count1, tr_element in enumerate(tr_elements):
if count1 >= 2 and len(tr_element) == 7:
val = [stock_code]
for count2, price in enumerate(tr_element):
if count2 == 0:
price_date = strftime("%Y-%m-%d", strptime(price.text, u"%Y年%m月%d日"))
val.append(price_date)
else:
price_data = float(price.text.replace(",",""))
val.append(price_data)

sql = "insert into yahoo_jpn_price values" + str(tuple(val))
cursor.execute(sql)

connector.commit()
cursor.close()
connector.close()
761デフォルトの名無しさん:2012/10/07(日) 09:35:10.79
まずインデントを直せ
762デフォルトの名無しさん:2012/10/07(日) 09:44:27.67
ちゃんとなってる>>760
763デフォルトの名無しさん:2012/10/07(日) 09:50:57.86
sql = "insert into yahoo_jpn_price values" + str(tuple(val))

injectionですねわかります
764デフォルトの名無しさん:2012/10/07(日) 09:56:12.64
val = [stock_code]って
既存の変数を[]で囲むことにどういう意味があるんだろ。
まさかCと同じで配列の先頭アドレスへの参照を代入しているのか。
Pythonは変数に型がないので、代入データの型を右辺から
いちいち推測しないといけないのが面倒だね。
765デフォルトの名無しさん:2012/10/07(日) 11:34:43.61
リストじゃねーの
766デフォルトの名無しさん:2012/10/07(日) 11:40:35.24
リストリテラル以外に何があるというのか
767デフォルトの名無しさん:2012/10/07(日) 12:33:29.36
馬鹿すぎて言葉がでない
768デフォルトの名無しさん:2012/10/07(日) 12:49:23.81
なるほどリストかあ。
でも見慣れない処理だよね。
既存のリストでない変数をカッコで囲んでリスト化するのは。
769デフォルトの名無しさん:2012/10/07(日) 13:07:44.43
え?
770デフォルトの名無しさん:2012/10/07(日) 13:19:03.22
物を知らなすぎて笑えない
771デフォルトの名無しさん:2012/10/07(日) 13:37:34.12
大人しく自分がマスターした言語だけ使ってろよ…
読んでて疲れるから
772デフォルトの名無しさん:2012/10/07(日) 13:53:15.59
別に君らの疲れを癒すスレじゃないし
Python初心者なんだから好きなこと言わせてもらうよ。
嫌なら出て行け。
773デフォルトの名無しさん:2012/10/07(日) 14:26:53.37
>>764はさあ、まずリストと配列の区別がついてないと思うんだよね
774デフォルトの名無しさん:2012/10/07(日) 14:51:26.89
>>772
初心者になれたつもりなんだー(棒
775デフォルトの名無しさん:2012/10/07(日) 15:18:27.43
>>764はこれまでリストリテラルの無い静的型言語、
例えばJavaのようなウンコ言語しか使った事が無いんだよ
馬鹿過ぎて簡単なPythonすら使いこなせないだろうけど、
生暖かく見守ってあげようじゃないか
776デフォルトの名無しさん:2012/10/07(日) 15:20:37.25
>764
気になるなら
val = [stock_code, ]
777デフォルトの名無しさん:2012/10/07(日) 15:21:16.83
[777] はリストになるけど
(777) はタプルにならない不思議
778デフォルトの名無しさん:2012/10/07(日) 15:23:42.04
タプルタプルした二の腕
779デフォルトの名無しさん:2012/10/07(日) 15:26:34.33
(1 + 2) * 3 とかの式で第一項がタプルになったら困るでしょ?

実はタプルは括弧ではなくカンマで作られる(空タプル除く)
777, 
780デフォルトの名無しさん:2012/10/07(日) 15:27:28.53
>>772
多言語習得者なのに超初心者ってのは認められますん
以下からお好きなのをどうぞ

http://www.python.jp/doc/release/tutorial/index.html
http://d.hatena.ne.jp/dplusplus/20100126/p1
http://www.swaroopch.org/notes/Python
http://learnpythonthehardway.org/

最速マスターはほんとよくまとまってる
781デフォルトの名無しさん:2012/10/07(日) 15:32:39.06
いつまで初心者気取りなんプークスクス
782デフォルトの名無しさん:2012/10/07(日) 15:33:15.70
初心者が超初心者を偉そうに叩くスレ
に改名すべきだな
783デフォルトの名無しさん:2012/10/07(日) 15:40:36.81
>>775
逆にいえば
pythonよりもはるかにムズい(もといめんどくさい)javaを
使えてたということか〜
784デフォルトの名無しさん:2012/10/07(日) 15:42:12.46
jsonやらなにやらもあるんだから、元々何を使ってたかの前に見識が狭いだけやねん
785デフォルトの名無しさん:2012/10/07(日) 15:45:18.95
>>784
は?
786デフォルトの名無しさん:2012/10/07(日) 15:57:02.93
えっ?
787デフォルトの名無しさん:2012/10/07(日) 16:12:15.35
たしかにJSONでレスポンス返すWebサービスとかいっぱいあるもんね
ttps://api.twitter.com/1/statuses/user_timeline.json?screen_name=yukihiro_matz&count=2
788デフォルトの名無しさん:2012/10/07(日) 16:13:38.60
日本語でおk>>784
789デフォルトの名無しさん:2012/10/07(日) 16:15:48.13
いや普通に日本語で言いたいこともよくわかる
790デフォルトの名無しさん:2012/10/07(日) 16:18:06.27
JSONというと13日の金曜日だけど今月13日は
791デフォルトの名無しさん:2012/10/07(日) 16:35:39.17
>>788
>>784>>783へのレスと考えるとたしかに日本語でおkになるわな
流れからすれば唐突にjsonなんてワードは出てこないはずだからな
jythonをjsonと間違えたと考えるのが妥当では?
792デフォルトの名無しさん:2012/10/07(日) 16:46:50.07
ぜんぜん妥当じゃない。Jythonでは意味が通らない
リスト(配列)リテラルがあって誰でも知ってるJSONだから意味が通る
793デフォルトの名無しさん:2012/10/07(日) 16:52:38.51
↑なぜ必死?
794デフォルトの名無しさん:2012/10/07(日) 16:56:55.98
無知がどこまで恥曝しつづけるか見物だね
795デフォルトの名無しさん:2012/10/07(日) 17:00:15.22
Jythonが妥当!
796デフォルトの名無しさん:2012/10/07(日) 17:00:37.15
>>793
別に必死でもない。もともとヨタ話だし
797デフォルトの名無しさん:2012/10/07(日) 17:03:22.21
誰でも知ってること知らねーの?だせえって
人小馬鹿にしといてよく言うよ
798デフォルトの名無しさん:2012/10/07(日) 17:03:53.62
json知ってることを自慢したい消防が紛れ込んだ模様
799デフォルトの名無しさん:2012/10/07(日) 17:08:01.63
>>797-798
おまいら結構繊細なんだな。気をつけるわ
800デフォルトの名無しさん:2012/10/07(日) 17:09:51.09
>>799 いじられて悔しかったんでちゅねいい子いい子
801760:2012/10/07(日) 17:14:47.35
なんか荒れてますが。。。

>>763
ありがとうございます。
SQLインジェクション攻撃に対してに脆弱になるんですね。
cursor.execute('insert into yahoo_jpn_price values(%s,%s,%s,%s,%s,%s,%s,%s)', val)
に変更したいと思います。
802デフォルトの名無しさん:2012/10/07(日) 17:24:52.38
それじゃ変わらんよ
803801:2012/10/07(日) 17:26:10.94
ネタですけど何か
804デフォルトの名無しさん:2012/10/07(日) 17:28:47.03
SQLインジェクション知ってることを自慢したい消防が紛れ込んだ模様
なお間に合う模様
805デフォルトの名無しさん:2012/10/07(日) 17:29:39.36
それがどうかしましたか?
806デフォルトの名無しさん:2012/10/07(日) 17:30:15.23
>>804
お前さっきから暇だな
807760:2012/10/07(日) 17:31:53.92
>>802
すいません。正直SQLもあまり詳しくないので、
これでSQLインジェクションに対して堅牢になっているのかどうかよくわかりませんでした。
http://www.python.jp/doc/2.5/lib/module-sqlite3.html
このサイトにそう書いてあったので、このように対応したのですが。。。。

どう変更すればよいのでしょうか?
808802:2012/10/07(日) 17:33:47.67
>>807
知ったかぶりしただけだから対処法など知らんよ
809デフォルトの名無しさん:2012/10/07(日) 17:38:17.02
>>806
さっきから粘着して下さっているのはあなたですか!?
810デフォルトの名無しさん:2012/10/07(日) 17:40:59.26
>>807
そのページに書いてあるとおり %s じゃなくて ? を使う
811809:2012/10/07(日) 17:43:16.37
>>1からここまですべて俺の自作自演なわけだが
812デフォルトの名無しさん:2012/10/07(日) 17:57:48.45
(他のデータ ベースモジュールでは変数の場所を示すのに"%s" や ":1" などの 異なった表記を用いることがあります。)
813デフォルトの名無しさん:2012/10/07(日) 18:33:30.78
色々板を回ってみたが
ID表示の無い板はゴミ
814デフォルトの名無しさん:2012/10/07(日) 23:00:25.30
荒らせばID付くんじゃね?
815デフォルトの名無しさん:2012/10/08(月) 01:13:16.71
10年荒らされてる板で何言ってるか分かってる?
816デフォルトの名無しさん:2012/10/08(月) 01:26:12.96
テスト
817デフォルトの名無しさん:2012/10/08(月) 06:38:21.93
★修学旅行、韓国から国内に変更…宮崎・日南高

 日本と韓国の関係悪化を受けて、宮崎県立日南高は2年生27人が12月に予定していた韓国への
修学旅行を国内に変更した。

 日南高によると、同校の修学旅行は韓国と国内の二つから選べることになっており、今年は2年生
170人のうち、143人が東京や群馬などの国内を選択。27人が同校の姉妹校・冠陽高があるソウル
などへの旅行を希望していた。

 竹島問題などを巡って、日韓関係が悪化していることから、韓国への修学旅行について慎重に検討した
結果、「韓国の情勢が不透明で、生徒の安全などを考慮した」として、行き先を国内に一本化したという。

 県内の別の高校も来年3月に計画している韓国への修学旅行について、変更を検討しているという。

http://www.yomiuri.co.jp/kyoiku/news/20121006-OYT8T00695.htm
818デフォルトの名無しさん:2012/10/08(月) 09:18:21.29
>>760

* 文字列の連結は大抵 "".join や 書式付文字列 を使う。

* html = urllib2.urlopen(get_url).read()
 書き捨てのコード以外では、推奨しない。404 の場合に エラーページのHTMLを所得してしまう。

* lxml.html.parse は引数にurlを取れる。404 の場合は IOError 例外が投げられます。

* xpathで所得する要素を指定できる。件数がそれ程多くなければ pythonのリストのスライスでもいい。
 count1,count2 と enumerate はコードから全部排除できるはずです。

 for tr_element in root.xpath("//tr[position() > 1]"):
  if len(tr_element) != 7: # pythonに慣れてくると、内包表記やフィルターを使うようになる。
   continue # インデントを深くしたくないので continue。
  ...
  for price in tr_element[1:]:
   ...

* データベースへ入れる処理とデータの所得部分は分離する。
 (混ざってると、エラー処理後の後始末が面倒になったりする。ネストが深くなる傾向がある)
 データ所得部分はジェネレータにしておくと便利。
819デフォルトの名無しさん:2012/10/08(月) 09:29:36.09
欧州研究所が告白! 太陽光パネルで出力劣化しないのは日本製品とドイツ製品だけ!中韓メーカー発狂か
http://engawa.2ch.net/test/read.cgi/poverty/1342751788/


シャープ製太陽光パネル、「出力低下なし」お墨付き−欧最大の研究機関が評価

シャープは同社製の太陽光パネルに「PID」と呼ばれる産業用太陽電池特有の出力低下現象が起きないと欧州最大の研究機関に認められた。
フラウンホーファー研究機構(本部=独ミュンヘン)が欧州、北米、中国、韓国メーカーなどの太陽電池モジュール13製品を評価した。
欧州ではPID現象による太陽光パネルの出力低下が相次ぎ、品質問題として注目されている。PID現象が発生しなかったのは4製品だけ。
これまでに京セラ、ドイツの最大手Qセルズも現象が起きなかったと公表している。

詳細 2012/7/20
http://www.asahi.com/digital/nikkanko/NKK201207200019.html
820デフォルトの名無しさん:2012/10/08(月) 09:32:39.56
>818
* html = urllib2.urlopen(get_url).read()
 書き捨てのコード以外では、推奨しない。404 の場合に エラーページのHTMLを所得してしまう。

* lxml.html.parse は引数にurlを取れる。404 の場合は IOError 例外が投げられます。

喫茶店のWiFiとかで繋ぐと、(そこのアカウントに)ログインする前は、
IPアドレスだけ振られて、404じゃなくてログイン画面が返ってくることがあるんだよね。
そういうの検出するにはどうすれば良い?
821デフォルトの名無しさん:2012/10/08(月) 09:41:10.80
       //
     /  /   バカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ 馬鹿には無理
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
822デフォルトの名無しさん:2012/10/08(月) 09:46:14.17
レスポンスの内容見て判断するっきゃないじゃないですか
他に判断要素ないんだし
823デフォルトの名無しさん:2012/10/08(月) 09:48:44.06
結局そうなるなら
* html = urllib2.urlopen(get_url).read()
でも充分ですね
824デフォルトの名無しさん:2012/10/08(月) 09:58:57.57
そう思うなら、そうじゃね。
好きにすればいいと思うよ。
825デフォルトの名無しさん:2012/10/08(月) 10:14:08.86
レスポンスコードを・・・Pythonの話じゃなかったか
826818:2012/10/08(月) 11:46:36.95
>>820

response = urlopen(url)
response.geturl() で目的のURLになってるかどうか確認する。
リダイレクトされてたらそのログインページのURLが入ってるはず。
827デフォルトの名無しさん:2012/10/08(月) 12:42:49.58
ありがとうございます
lxml.html.parse でも同じことは出来ますか?
828デフォルトの名無しさん:2012/10/08(月) 12:52:34.76
>>827
自分で調べたら?
http://lxml.de/lxmlhtml.html
829デフォルトの名無しさん:2012/10/08(月) 13:12:49.05
出来ないなら出来ないって率直に言った方が良いですよ
830デフォルトの名無しさん:2012/10/08(月) 13:15:30.85
じゃあ出来る
831818:2012/10/08(月) 13:31:45.41
urlで読み込めるのは libxml2 側の機能なのでPythonから拡張するのは難しいよ。

掛かる手間を考えると良いアプローチだとは思えないので、
たいして調べてないけど、出来たとしてもコード量が増えるのは確実だと思う。

代案:

res = urlopen(url)
if res.geturl() == url: # != login_url にすべきかな。その辺は状況に応じて
  doc = lxml.html.parse(res)
832デフォルトの名無しさん:2012/10/08(月) 15:02:15.80
何気に良スレ
833デフォルトの名無しさん:2012/10/08(月) 16:30:53.53
834デフォルトの名無しさん:2012/10/08(月) 17:37:44.11
>>821
ちょっと可愛いじゃないか
835デフォルトの名無しさん:2012/10/08(月) 17:56:28.85
クソスレ
836デフォルトの名無しさん:2012/10/08(月) 20:54:06.17
ローマ数字を整数に変換して計算するモジュールを作成しました
importしたときに予め0から1000までのローマ数字を使えるように
モジュール内でインスタンス化させたいのですが

Z = MyClass(0)
I = MyClass(1)
II = MyClass(2)

と書いていくと1000行以上のコードになってしまうため

for i in range(1000):
インスタンス名 = MyClass[i]
というようにループなどで短くまとめたいのですが、何か方法はないでしょうか

インスタンス名は
>>> print(VII+III)
>>> X
というような処理をさせたいので、ローマ数字にしておく必要があります
837デフォルトの名無しさん:2012/10/08(月) 21:07:00.33
数字→文字の変換ができてるなら下記を応用すればいける

_module_self = sys.modules[__name__]
setattr(_module_self, 'ローマ数字文字列', 数字)
838デフォルトの名無しさん:2012/10/08(月) 21:16:22.62
Dive Into Python 3 にまんまおんなじ事するコード例あるよね。
839838:2012/10/08(月) 21:17:10.10
まちがえた。なかったことにしてくれ。
840デフォルトの名無しさん:2012/10/08(月) 21:18:43.31
ツイッターじゃないから、そんなことは出来ない
841デフォルトの名無しさん:2012/10/08(月) 21:19:35.99
<●><●>
842デフォルトの名無しさん:2012/10/08(月) 21:20:40.04
>>836

globals()["I"] = MyClass(1) が多分一番手軽。(スコープに注意。top-levelなら locals() でも可。関数内なら globals())

他には {types.ModuleType でモジュールのインスタンスを作って 辞書を追加 (module.__dict__.update(mapping))という方法もある。

疑問があるのだけど I += II したりすると困らない?
843デフォルトの名無しさん:2012/10/08(月) 21:20:50.06
>>837
ありがとうございます
なんとかなりそうです
844デフォルトの名無しさん:2012/10/08(月) 21:24:49.18
>>842
すみません、リロードしていませんでした
単純な計算しかできないので
I+=IIというような処理はできないです

アドバイスありがとうございます
845760:2012/10/08(月) 22:56:39.81
>>818
遅くなりましたが、丁寧なアドバイスありがとうございます。
参考に修正させていただきます。
なかなか内包表記なんかは慣れませんが精進したいと思います。
846デフォルトの名無しさん:2012/10/09(火) 16:08:07.07
Pythonで初めてプログラミングを勉強しております。
Python 3.2とFlaskをサーバーに入れています。

ウェブページのフォームから辞書にkeyとvalueを登録したいと思い、
以下のような関数を作ってみたのですが、うまく登録できません。

ウェブページのフォームからkey=hoge&value=piyoをPOSTします。
確認のため、関数の戻り値をreturn dictionary['hoge']とするのですが、
HTTP/1.1 500 INTERNAL SERVER ERROR
KeyError: 'hoge'
と、一連のエラーコードが返ってしまいます。
関数の戻り値をdictionary['shortcut']とするとpiyoが表示されるので
'hoge'が辞書にkeyとして登録できず、変数に使った'shortcut'が
そのまま辞書のkeyに登録されてしまっているようです。

どこを直せばよいのでしょうか。
それとも何か根本的に誤っているのでしょうか?

@app.route("/add_dictionary", methods=['PUT', 'POST'])
def add_dictionary():
shortcut = request.form.get('key')
dictionary['shortcut'] = request.form.get('value')
return dictionary['hoge']
847デフォルトの名無しさん:2012/10/09(火) 16:12:08.93
よく見るんだ↓
dictionary['shortcut'] = request.form.get('value')
848デフォルトの名無しさん:2012/10/09(火) 16:27:09.88
関数の処理の結果を戻り値ではなく渡した引数に入れるメリットってなんでしょう?
(とある3DソフトのAPIの設計がそんな感じでした)
849846:2012/10/09(火) 17:12:22.44
>>847
dictionary[str(shortcut)] = request.form.get('value')
ですね!わかりました!!ありがとうございます!!!
850デフォルトの名無しさん:2012/10/09(火) 17:25:25.26
>>849
【審議中】
        ♪      ∧,, ∧            ♪
♪          ∧,, ∧ ・ω・)
         ∧,, ∧ ・ω・)   )
    ♪∧,, ∧ ・ω・)   )っ__フ   ♪    ∧,, ∧
  ∧,, ∧ ・ω・)   )っ__フ(_/ 彡    .∧,, ∧    )
 ( ・ω・)   )っ__フ(_/彡    ∧,, ∧    )   )
 (っ  )っ__フ(_/彡    .∧,, ∧    )   ) Οノ
  ( __フ(_/彡   ∧,, ∧    )   ) Οノ ヽ_)
   (_/彡      (    )   ) Οノ 'ヽ_)
            (    )  Οノ 'ヽ_)
           (ゝ. Οノ 'ヽ_)      ♪
     ♪    ミ  ヽ_
851デフォルトの名無しさん:2012/10/09(火) 18:13:02.05
>>848
CでもJavaでもそんなのはごく当たり前に行われてるだろ
副作用恐怖症の関数言語馬鹿なのか?
852デフォルトの名無しさん:2012/10/09(火) 18:36:36.58
>>844
定数にしたくなるんじゃないかなと思ったけど、杞憂だったみたいですね。
追記: 数字 -> 文字 を MyClass の __str__ に実装してれば、辞書内包で一括登録できそうです。

globals().update({str(x):x for x in map(MyClass,range(1000))})

# ※ モジュールのトップレベルで実行する場合、2.x では内包表記の一時変数が外に残ることに注意。


>>848
内部で使ってると思われるC言語のライブラリに合わせてるんじゃないかな。(予想)
成否判定を戻り値にしてデータは引数で与えたアドレスに渡して貰うという仕様のAPIは多い。

例外をサポートしてて多値も返せるPythonでは、メリットは思い当たらない。
853デフォルトの名無しさん:2012/10/09(火) 19:27:04.61
今日もようやく脱超初心者したばかりの初心者が煽ってるな
854デフォルトの名無しさん:2012/10/09(火) 23:55:18.89
>>853
いいんじゃないかな。
そうやって成長していけば。
おかしいところがあればあなたが指摘してあげて。
そうすることであなたも成長できるのだから。
855デフォルトの名無しさん:2012/10/10(水) 00:10:22.23
うぜえ消えろ
856848:2012/10/10(水) 02:20:27.25
>>852
その通りでした
C++のAPIに合わせようとして色々無理が生じてきているので
最新版でPythonらしいAPIを新たに作っているとありました
857デフォルトの名無しさん:2012/10/10(水) 13:40:23.07
>>855
怒らないで
そうすることであなたも成長できるのだから
858デフォルトの名無しさん:2012/10/10(水) 15:15:28.02
黙れチョン工作員
859デフォルトの名無しさん:2012/10/10(水) 19:01:43.16
pass
860デフォルトの名無しさん:2012/10/11(木) 01:46:38.65
861デフォルトの名無しさん:2012/10/11(木) 01:51:15.41
本はともかく公式のドキュメントに目を通さないのは大間違い
862デフォルトの名無しさん:2012/10/11(木) 15:58:38.61
そうすることであなたも成長できるのだから
863デフォルトの名無しさん:2012/10/12(金) 02:55:44.17
utf-8で流れてくるバイナリストリームデータを、cp932に変換するにはどうしたらいいですか?
codecsモジュールを使うらしいまではわかったんですが。。。
Python2.7です。
864デフォルトの名無しさん:2012/10/12(金) 04:37:29.27
       //
     /  /   バカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ 馬鹿には無理
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
865デフォルトの名無しさん:2012/10/12(金) 05:03:41.79
>>863
凝ったことする必要がなければ
cp932buf = u8buf.decode('utf-8').encode('cp932')
866デフォルトの名無しさん:2012/10/12(金) 07:58:37.05
>>865
unicodeやstrではなく、ストリームデータを扱っています。
867デフォルトの名無しさん:2012/10/12(金) 08:22:11.79
>>863
ストリームが file-like なオブジェクトだったら

new_stream = codecs.EncodedFile(stream, "utf-8", "cp932")

出力先もストリームの場合は、
入出力双方のストリームでそれぞれdecode,encodeするようにすると、Python内ではunicodeで文字列処理できる。
# Python 内で cp932 の文字列に対して処理をする必要がなければ、encode,decodeを一緒にせず別けた方がいい。=> 他のencodingに対応しやすい

input_stream = codecs.getreader("utf8")(utf8_stream)
output_stream = codecs.getwriter("cp932")(sys.stdout)

対象がイテレータ系のオブジェクトの場合は iterencode,iterdecode が使えそうだけど・・・
encodeとdecode両方を同時に行いたいなら、一手間かけてwrapper関数か新たなジェネレータを作った方が良いかもしれない。


ストリームに対して codecs を使う利点は、
文字列のencode,decodeメソッドだと毎回codecsのlookupが発生するのに対し(一応キャッシュはされてる)
予めlookupしたcodecからencode,decodeの関数を準備しておけるので、多少の効率upが期待できます。
868867:2012/10/12(金) 08:32:44.98
>>866
ん?ストリームデータって?具体的にはPythonでは、どんな型?
ストリームから utf-8文字を読み出して decode/encode って出来るはずだけど。

>865の方法が無理なら codecs も使えないよ。最終的には文字列に変換出来ないとだめ。

ソケットの事を言ってるなら、普通に読み出しすれば文字列を得られるし、
socketのmakefileメソッド で file オブジェクトを得られる。
869デフォルトの名無しさん:2012/10/12(金) 09:08:37.32
>ストリームから utf-8文字を読み出して decode/encode って出来るはずだけど。

例えば、まだ2バイトしか届いていないときはどうしますか?
870デフォルトの名無しさん:2012/10/12(金) 09:21:43.58
>>869
3バイト目が届くまで待つ
http://ja.wikipedia.org/wiki/UTF-8
871デフォルトの名無しさん:2012/10/12(金) 10:02:28.39
>869
行読み込みやバッファ用意して処理する。

そういった理由だったら納得。何か特殊なデータ型かと思った。ストリームの中身のデータの型はstr だよね?
codecs 使えば、内部の IncrementalDecoder/Encoder がマルチバイト文字の境界を考慮したバッファ管理を行ってくれます。
872デフォルトの名無しさん:2012/10/12(金) 12:00:57.57
あ〜あ…
873デフォルトの名無しさん:2012/10/12(金) 12:06:14.18
shelveで、「書き込みが完了するまで処理を待つ」ということはできないでしょうか?

メモシステムのようなものを作っているのですが、メモの保存処理をしたあとにすぐにメモ一覧を出すと、直前に保存したメモが表示されないことがあります。
一覧の更新をすると表示されるようになるので、書き込みが完了する前に読み出しを行なってのかと思われます。

ですので、保存処理を行い、その保存処理の中で書き込みが完了するまで待ち、書き込みが完了すれば一覧に遷移するという処理ができないかと思っております。

現在はとりあえずsleep()で1秒待っているのですが、1秒で書き込まれる保証もないかと思うので、なにか確実な方法があればお教え頂ければと思います。
874デフォルトの名無しさん:2012/10/12(金) 12:13:03.14
syncとかcloseとか試してみたぁ?
875873:2012/10/12(金) 13:52:31.00
>>874
はい。デフォルトの状態だと書き込みのされるタイミングが不定だったため、writebackをTrueにした状態で書き込み直後に意図的に.sync()をするようにしておりますが、同様の症状になります。

.close()は意図的には行なっていなかったのですが、意図的に.close()を試してみたのですが同様の症状でした。
876デフォルトの名無しさん:2012/10/12(金) 17:10:05.44
>>868
>865の方法が無理なら codecs も使えないよ。最終的には文字列に変換出来ないとだめ。

865のコードはこうなっているんだけど、
>cp932buf = u8buf.decode('utf-8').encode('cp932')

ここでu8bufやcp932bufは何オブジェクトなの?
ぱっと見で、両方ともstr (python2系) だとおもったので、>>866
>unicodeやstrではなく、ストリームデータを扱っています。
と書いた。
#知りたいのはストリームのときにどうするかなのに、strでのやり方を書かれても。
877デフォルトの名無しさん:2012/10/12(金) 19:36:00.05
       //
     /  /   バカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ 馬鹿には無理
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
878デフォルトの名無しさん:2012/10/14(日) 11:22:00.17
867が答えを書いてるじゃん。これじゃだめなの?
あとはお前さんが言う「ストリーム」をfile-likeオブジェクトとしてラップしれやればいいだけ。
879デフォルトの名無しさん:2012/10/14(日) 14:46:23.99
ぬーん
880デフォルトの名無しさん:2012/10/14(日) 18:42:24.41
>>873
ロックを使わずに並列に読み出そうとしてない?

メモ一覧を読み出すのがマルチスレッドな場合(GUI等)だったら、
ロック(fctl.flock等, windoesの場合は知らない)を使って書き込みが完了するまで待たせるようにする。
スレッド間の同期のみでいいなら、mutexでも可。

>>875
プロセス内で単一のshelve のオブジェクトを使い回ししてるのと、
読み出される処理は別の関数で、別々にshelve.open して読み出されてるとで、状況が変わってきそう。

書き込み後、*その書き込みをしてる関数内で* 一覧を表示してみて、きちんと表示されてますか?
881デフォルトの名無しさん:2012/10/14(日) 20:16:24.76
882デフォルトの名無しさん:2012/10/15(月) 00:14:50.49
gdbmモジュールがWindowsでも使えたらすごく便利なんだけどねぇ。
単なるkey-valueの格納にSQLiteを使うのは嫌だし、効率も悪い。
883デフォルトの名無しさん:2012/10/15(月) 00:28:04.39
memcached
884デフォルトの名無しさん:2012/10/15(月) 05:35:10.68
dict
885デフォルトの名無しさん:2012/10/15(月) 05:47:52.19
memcached ってデータ消えなかったっけ?ファイルに保存って出来るの?
886デフォルトの名無しさん:2012/10/15(月) 06:49:02.42
numpy
887デフォルトの名無しさん:2012/10/15(月) 09:00:25.79
>>895
pickle
888デフォルトの名無しさん:2012/10/15(月) 09:57:39.58
memcachedはクラサバかつ揮発性だし、
pickleはオンメモリじゃないと使えないから大きなデータは格納できない。
889デフォルトの名無しさん:2012/10/15(月) 10:24:12.93
へ?
890デフォルトの名無しさん:2012/10/15(月) 10:35:49.14
ほ?
891デフォルトの名無しさん:2012/10/15(月) 11:51:27.66
>>882
http://www.gnu.org.ua/software/gdbm/
自分でmakeするよろし
892デフォルトの名無しさん:2012/10/15(月) 12:07:51.23
>>882
どれくらいの大きさのkey-valueになるの?
SQLiteで十分じゃないの?って思う
性能の要件とかあるの?
dict and pickleで良いとも思うし
memcachedもクラサバ両方を書き出せばいいし
893デフォルトの名無しさん:2012/10/15(月) 12:29:31.03
numpyでいいじゃん
894デフォルトの名無しさん:2012/10/15(月) 13:18:47.87
NumPyは関係ないだろ。
895デフォルトの名無しさん:2012/10/15(月) 14:42:59.81
>>882
2系ならbsddbがWindowsでもつかえたと思うけど
896not 882:2012/10/16(火) 10:44:00.02
>>895
> バージョン 2.6 で撤廃: bsddb モジュールは、 Python 3.0 では削除されるので、非推奨です。

との事。手元のActivePython(win32) 2.6.5/2.7.2 には既に入ってなかった。(公式、他は未確認)
2系のソース・レポジトリには残ってるけど、ビルドする手間や後々の事を考えると、
新規の場合は、他の保守されてる データベースのモジュールをインストールした方がいいと思う。
897デフォルトの名無しさん:2012/10/16(火) 10:51:11.66
1000ならanydbm/dumbdbmが爆速
898デフォルトの名無しさん:2012/10/17(水) 00:56:00.05
booksという変数に外部APIから取得したデータを格納し、欲しいデータはbooks.textにあるとします
ただしAPIの挙動によって「books自体が空」「booksは存在するがbooks.textは存在しない」といった事が起ります
その両方に対応するために以下のコードを書きました これをもっと短く書く方法は無いでしょうか?
try:
 book_name = books.text
except:
 pass
上記のようなコードが20箇所程度あって見た目も保守性も悲惨な事になってしまっています
899デフォルトの名無しさん:2012/10/17(水) 03:48:55.66
>>898
コンパクトに書くだけなら、getattr(books, "text", None) とも書ける。

コードの保守を考えるなら、関数にするかオブジェクトをwrapするクラスを作った方がいいね。
__getattribute__ 辺りで属性のカスタマイズ出来るけど、別名でメソッドかプロパティ作った方が楽。

例外を使う場合、例外を捕捉する所は except AttributeError: にしよう
900デフォルトの名無しさん:2012/10/17(水) 03:55:04.72
>>898
読み違えた。そのコードだと text属性が無いときは book_name は未定義?
901デフォルトの名無しさん:2012/10/17(水) 09:21:15.32
def get_bookname(books):
if isinstance(books, Book):
book_name = books.text
else:
book_name = ''
return book_name
902デフォルトの名無しさん:2012/10/17(水) 10:35:17.92
馬鹿には無理
903デフォルトの名無しさん:2012/10/17(水) 11:32:23.25
動くのならば 動くのならば
904デフォルトの名無しさん:2012/10/17(水) 11:52:12.87
GAEの質問はここで良いでしょうか?
905デフォルトの名無しさん:2012/10/17(水) 11:56:40.02
Google App Engine for Python 4アプ目
http://kohada.2ch.net/test/read.cgi/php/1302598469/
906デフォルトの名無しさん:2012/10/17(水) 14:00:56.39
pyramidってどういう場面で使ってる?
907デフォルトの名無しさん:2012/10/17(水) 14:04:25.88
王族のお墓として
908デフォルトの名無しさん:2012/10/17(水) 14:10:41.00
おとなしくdjangoから見てみることにします
909デフォルトの名無しさん:2012/10/17(水) 17:00:29.15
Flask作者の名前ってコナンからとってんのかー
910デフォルトの名無しさん:2012/10/18(木) 00:52:46.23
Steamのアカウントでコナンの光彦の画像使ってたから、たぶんそうだね。
911デフォルトの名無しさん:2012/10/18(木) 02:29:01.19
>>901
>898より
a.「books自体が空」
b.「booksは存在するがbooks.textは存在しない」
 b.1. Bookインスタンスを返すが text がない
 b.2. Book以外のインスタンスを返すので textがない
c. books.text が存在する

isinstanceでの型チェックのみでは、(b.1)のケースで、属性が動的に設定されるといった場合を判別できない。
Pythonでは、こういった場合は大抵、アクセスしてみてAttributeErrorを捕まえるか、getattr/hasattr等で処理します。

def get_bookname(books):
    return getattr(books,"text","") if books else ""
912デフォルトの名無しさん:2012/10/18(木) 05:01:15.70
python3での質問です
2つのリストに存在する共通の値を削除したいのですが
ループを使わずに共通の値を発見する方法はありますか?
例:
list1 = ["a", "b", "c", "d", "e"]
list2 = ["e", "f", "g", "h", "i"]

# 共通の値を発見して削除、 この場合は"e"
# 結果:
list1 = ["a", "b", "c", "d"]
list2 = ["f", "g", "h", "i"]
913デフォルトの名無しさん:2012/10/18(木) 05:10:06.14
set(list1) & set(list2)
914デフォルトの名無しさん:2012/10/18(木) 05:18:40.37
>>913
ありがとうございます
915デフォルトの名無しさん:2012/10/18(木) 13:38:36.44
Python3.3のライブラリリファレンスの見方で質問です。
Fileオブジェクトの関数をさがしてるのですがみつけられません。
2.7だとhttp://docs.python.org/library/index.html の5.9にFile Objectとあるのですが

http://docs.python.org/py3k/library/index.html にはありません。
どこをどうみればいいんでしょうか?
916デフォルトの名無しさん:2012/10/18(木) 13:55:09.38
よ!
917デフォルトの名無しさん:2012/10/18(木) 14:05:00.48
>>915
Python 3 では、I/O関係は ioモジュールにまとめられて、内部的にはJavaのI/O周りみたいになってます。

open() は io.open() のエイリアスで、ファイルを開くためのヘルパ関数。

open("hoge.txt", mode="r", encoding="utf-8") は
io.TextIOWrapper(io.BufferedReader(io.FileIO("hoge.txt")), encoding="utf-8") を作る。

open("hoge.bin", mode="rb") は
io.BufferedReader(io.FileIO("hoge.bin")) を作る。
918デフォルトの名無しさん:2012/10/18(木) 14:06:13.90
>>915
io moduleに移動した
919デフォルトの名無しさん:2012/10/18(木) 14:18:56.09
整理しないと良くわからんな
920デフォルトの名無しさん:2012/10/18(木) 14:57:57.10
わからんね
921デフォルトの名無しさん:2012/10/18(木) 15:21:47.48
一人で大丈夫?gankいかなくていいかい?
922デフォルトの名無しさん:2012/10/18(木) 15:32:12.17
まず、Dive Into Python 3読め
初心者用の解説に書いてあることだから、
そっちを先に読もうよ
ライブラリリファレンスを参照して目的の関数を探すのは、
ある程度上級者になってからでいいのでは?
初心者の勉強の仕方ではないと思うよ
923デフォルトの名無しさん:2012/10/18(木) 19:39:18.83
              .....┏┓      ..┏┓┏┓┏━┓      ┏┓   ┏┓        ┏┓┏┓┏━┓     ...┏┓
     __      i⌒i ┏┛┗┓      ┃┣┛┗┫□┣┓     ┃┃ ┏┛┗┓      ┃┣┛┗┫□┣┓    .┃┃
./    O   Oヽ   | ┗┓┏╋┳━━┫┣┓┏┻━┫┃  ┏┓┃┃ ┗┓┏╋┳━━┫┣┓┏┻━┫┃  ┏┓┃┃
〈      |―/  | ノノ┏┛┗┻╋━┓┃┣┛┗┓  ┃┃  ┃┃┗┛ ┏┛┗┻╋━┓┃┣┛┗┓  ┃┃  ┃┃┗┛
ヽ.      V   ノ  ...┃┃┏┓┃┏┛┃┃□┏┛  ┃┗┓┗┛┏┓ ┃┃┏┓┃┏┛┃┃□┏┛  ┃┗┓┗┛┏┓
     ( ̄ ̄ ノノ   ┗━┛┗┛┗━┻┻━┛    ┗━┛   ┗┛ ┗━┛┗┛┗━┻┻━┛  ...┗━┛   ┗┛
924デフォルトの名無しさん:2012/10/18(木) 19:41:23.06
卑猥
925デフォルトの名無しさん:2012/10/18(木) 20:10:51.20
おちんちん
926デフォルトの名無しさん:2012/10/18(木) 22:07:23.89
どしたん急に
927デフォルトの名無しさん:2012/10/18(木) 22:58:02.17
PyChinko
928デフォルトの名無しさん:2012/10/19(金) 08:06:03.99
おっぱい村
929デフォルトの名無しさん:2012/10/19(金) 10:06:28.60
[%(levelname)s] [%(asctime)s] (%(threadName)-10s) %(message)s
この文字列をconfigparserで読みたいんだけどどうエスケープして書けばいい??
930デフォルトの名無しさん:2012/10/19(金) 10:16:58.56
>>929
すまん自己解決
%%だったよ
931デフォルトの名無しさん:2012/10/19(金) 22:25:45.05
解決済みみたいなので、余談になるけど
3系(3.2以降?) だと configparser/loggingとも {} 表記の書式でも書ける様に設定できるみたい。
デフォルトではどちらも % 表記なので、移植性・手間的にはエスケープが安易。

configparserで辞書展開が不要なら以下のように、interpolationで振る舞いを変更出来る。

config = configparser.ConfigParser(interpolation=configparser.Interpolation())

loggingの方は、logging.Formatter や logging.basicConfig の style オプションで変更出来ます。
932デフォルトの名無しさん:2012/10/20(土) 09:33:07.09
ループ回数を示す数字を1から3まで変数に代入しながら回したい時、
for i in range(1,4)というふうに、わざわざtoの数字を
+1しないといけないのがどうにも性に合わないのですが
みなさんは気になりませんか?
933デフォルトの名無しさん:2012/10/20(土) 10:06:36.58
1から3まで変数に代入しながら回したい時は
for i in range(3)
 a = i + 1
というふうにするよ
934デフォルトの名無しさん:2012/10/20(土) 10:39:50.03
>>933
サンクスです。
+1は避けられないのですね。
rubyみたく、1..3という表記ができれば
直感的でよいのですが。
ちょっと作者に要望出してみます。
935デフォルトの名無しさん:2012/10/20(土) 10:58:06.49
>>934
作者だけど却下
936デフォルトの名無しさん:2012/10/20(土) 11:02:34.05
>932 はそろそろ 0 を発見した現代人のレベルに追い付くべきだと思うの
937デフォルトの名無しさん:2012/10/20(土) 11:07:15.83
>>935
わぁMatzだ!サインください!
938デフォルトの名無しさん:2012/10/20(土) 11:13:46.68
>>934
汎用的にはシーケンスの開始は0からだし
n個、n回繰り返すということを踏まえ
for(int i = 0; i < n; i++)
から考えれば何ら不思議はない
どうしてもi<=n的にしたいのなら
好きなようにラッパー関数でも
イテレータでもwhileでも書いて
さもなくばRubyに帰ってください
939デフォルトの名無しさん:2012/10/20(土) 11:36:41.04
>>938
不思議とは言っていません。
直感的でないということです。
1,3の形式は残して構いませんから
1..3形式も追加してくれるよう頼んでみます。
気分次第で対応してくれるかも知れません。
何事も言ってみるものですよ。
940デフォルトの名無しさん:2012/10/20(土) 11:40:27.23
>>939
却下って言ってるだろハゲ
941デフォルトの名無しさん:2012/10/20(土) 11:43:23.69
方法は一つを標榜してるのに気分で対応ってことはない
942デフォルトの名無しさん:2012/10/20(土) 11:59:18.43
いやさあ、rangeはforと違ってただのリスト返す関数なんだから、自分で関数作れば良くね?
943デフォルトの名無しさん:2012/10/20(土) 12:12:35.77
>>937
なんでそっちの・・・
944デフォルトの名無しさん:2012/10/20(土) 12:31:12.94
Python 習い初めのときは
直感的じゃないとか思ったけど
結局慣れの問題なんだよね

文字列分割するときに
abcdef -> abc def

s="abcdef"
s[:3]
s[3:]
と書けるのは直感的だよね
945デフォルトの名無しさん:2012/10/20(土) 15:10:30.53
range(0, 3) -> [0, 1, 2]

これのどこが非直感的なのか分からない。数学苦手なのか?
946デフォルトの名無しさん:2012/10/20(土) 15:11:05.65
[0, 3)
947デフォルトの名無しさん:2012/10/20(土) 15:26:40.75
>>942
超初心者ですからそれは難しいです。
数値だけでなく、3のところが何かの変数であっても
対応できなければなりません。
おそらくPythonのソースレベルから改造が必要では?

>>945
fromとtoの両方を書かせていながら
fromは含んでtoは含まないっていうのは、そういうルールであるとは
理解しますが、直感的でないと思います。
VisualBasicのように、For i = 1 To 3と書けば3を含む言語もありますし。
…ちなみに数学は高校時代零点の常習犯でしたが
関係あるんですかね。
948デフォルトの名無しさん:2012/10/20(土) 15:29:09.26
rangeはstart,stopでfrom,toじゃないよ
949デフォルトの名無しさん:2012/10/20(土) 15:29:21.75
よく考えると算数の知識がまったくなければ
a = b + 3
という表記も非直感的であって、
突き詰めればCOBOL流に行き着くわけですね。
ADD 3 TO b GIVING b
950デフォルトの名無しさん:2012/10/20(土) 15:32:08.52
ADD 3 TO a GIVING b
951デフォルトの名無しさん:2012/10/20(土) 15:40:12.88
>>949
算数知ってるだけでも直感的じゃないんでは?
= を代入って決めたのはFORTRANが最初?
952デフォルトの名無しさん:2012/10/20(土) 16:31:42.98
>947
おおいに関係ある
953デフォルトの名無しさん:2012/10/20(土) 16:36:03.52

くだすれPython(超初心者用) その15
http://toro.2ch.net/test/read.cgi/tech/1350718465/
954デフォルトの名無しさん:2012/10/20(土) 16:37:59.20
乙py
955デフォルトの名無しさん:2012/10/20(土) 16:41:16.62
>>947
難しくねーよ。何言ってんだ
956デフォルトの名無しさん:2012/10/20(土) 18:40:01.49
末端は 最後+1 で表わすのが慣例なのよ。
Rubyの
3...5 -> [3, 4]
3..5 -> [3, 4, 5]
みたいな記法は、一見便利そうに見えて、実際には
「えーっとこれはどっちだったっけ」って混乱するし、
おまけに視覚的にも判別しにくいし、最終的に精神病で死ぬ。
957デフォルトの名無しさん:2012/10/20(土) 18:50:06.51
変なひと・・・>>947
958デフォルトの名無しさん:2012/10/20(土) 20:01:02.86
Pythonはスライスもおかしい。
[3:4]で文字の3つ目〜4つ目を切り出すのが直感的な動作と思います。
COBOLなんかはそうなっています。
なのにPythonでは、3つ目のみを取り出す動作となります。
これは[3:3]が空リストを返すという意味のない動作をすることから見ても
明らかにおかしな仕様と思われます。
これも一緒に要望出してきます。ではいろいろ教えてくれてありがとう。
959デフォルトの名無しさん:2012/10/20(土) 20:04:23.72
[m:m+n] でn==0のとき空リストが返ってくるのは分かり易いじゃん
960デフォルトの名無しさん:2012/10/20(土) 20:10:58.00
宇宙人から見れば地球人がおかしなことしてるように見えるのと同じこと
961デフォルトの名無しさん:2012/10/20(土) 20:12:58.11
どうやって要望を出すのかは知らんが,もしその要望が出たら全力で潰しにいかないとダメだな.
まあそこまでしなくても門前払いされるのがオチだと思うが.
962デフォルトの名無しさん:2012/10/20(土) 20:14:01.21
スライスの変更なんて破壊的どころの騒ぎじゃない
1からやり直すレベル
963デフォルトの名無しさん:2012/10/20(土) 20:15:04.12
Rubyと違って日本語じゃ要望出せないから気にしなくておk
964デフォルトの名無しさん:2012/10/20(土) 20:16:15.09
python-ideasに流暢な英語で要望が出されて住人が凹む流れはやめてください

スライスの動作の説明はこれが有名
http://www.python.jp/doc/release/tutorial/introduction.html#tut-strings
965デフォルトの名無しさん:2012/10/20(土) 20:22:17.91
いや、流暢な英語で要望出されても良いよ
絶対に通らないから
966デフォルトの名無しさん:2012/10/20(土) 20:31:52.76
できればユリシーズばりに精緻を凝らした文章で頼む
967デフォルトの名無しさん:2012/10/20(土) 21:11:39.61
この人は冗談で言ってるのか、本気で言ってるのか判断できない。
968デフォルトの名無しさん:2012/10/20(土) 21:40:45.43
自分ビルド作っちゃいなよ
969デフォルトの名無しさん:2012/10/20(土) 22:37:15.02
馬鹿には無理
970デフォルトの名無しさん:2012/10/21(日) 06:29:46.45
> Pythonでは、3つ目のみを取り出す動作となります。

zero origin なので [2] が 3つ目 になります
971デフォルトの名無しさん:2012/10/21(日) 07:51:07.08
クラスメソッドで self がある為に
引数の個数を間違えて呼んだときの
エラーメッセージで出るアドバイスの
引数の個数がずれるのは慣れるまで
訳が判らなくて混乱したわ
しかも省略可能引数があったりして
必須パラメータの個数が変動してるので
エラーメッセージ見たために却って混乱するという
972デフォルトの名無しさん:2012/10/21(日) 08:11:24.66
ごもっとも
973デフォルトの名無しさん:2012/10/21(日) 08:51:06.20
引数の型が期待されてるものと違うときに
n番目の引数の型は何何ってエラー出るけど
n+1番目だかn-1番目だかのことを言ってるのだと
気付くまでに数年掛かったぜ
974デフォルトの名無しさん:2012/10/21(日) 11:27:23.86
975デフォルトの名無しさん:2012/10/21(日) 12:52:32.14
TypeError: foo() takes exactly 3 arguments (2 given)
といったエラーメッセージは 3.3 で変更されてるよ

TypeError: foo() missing 1 required positional argument 'x'
と、具体的に教えてくれるようになった。

3.2 以前なら pylint で、ある程度は、同様のエラーメッセージで教えてくれます。
976デフォルトの名無しさん:2012/10/21(日) 14:52:33.16
そうか
3になって良くなったことも少しはあるんですね(棒)
977デフォルトの名無しさん:2012/10/21(日) 20:22:37.60
やっぱりRubyのほうがまともな言語だよな。
978デフォルトの名無しさん:2012/10/21(日) 21:48:25.28
わざわざ他の言語スレにでてくるようなアホが取り付いてなきゃ
Ruby もいい言語なのかもな…
979デフォルトの名無しさん:2012/10/22(月) 03:00:57.07
始めて覚えた言語がRubyだったオレは上で直感的じゃないと言ってる人の気持ちはわからなくもないけど、
ただ彼は多分Ruby自体も全然勉強してないよね 他の言語もどうせ上っ面でしょ

Rubyの表面をちょこっと知っただけで「直感的最高!非直感的は駄目!」という短絡的思考
それは非直感的なのではなくて、ただ彼が理解できない概念っていうだけでしょ
なおかつ「頼めばなおしてくれるかも」なんていう子供みたいな発想に至るのはヤバ過ぎ
980デフォルトの名無しさん:2012/10/22(月) 03:11:08.24
シーケンスのインデックスを、なぜ1からでなく0から始めたほうが良いのかは
コンピュータサイエンスの基本的な問題だよなあ
ダイクストラ先生のWhy numbering should start at zero
http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html
とかwikipediaだと
http://en.wikipedia.org/wiki/Zero-based_numbering
981デフォルトの名無しさん:2012/10/22(月) 03:47:09.07
モジュロ関数でマッピングする (i % 5) のに便利
割り算でマッピングする (i / 5) のに便利
a + size * i と記述できて便利
空リストが記述しやすくて便利

ふーむ
982デフォルトの名無しさん:2012/10/22(月) 05:08:29.12
0/1 base はそれぞれ 人間/コンピュータにとって直感的/都合がよいってのがあるけど、

それとは別に、
添字として扱うことを想定された rangeの返す数列を
数値として扱うことのギャップかな?

意味的な事を考えると indexを積算する って処理にはなんか違和感があるね。

終端+1 に馴染めなければ [offset: offset+size] という考え方はどうだろう?
例えば、1から10個分の範囲 range(1, 1+10)

# 11ってマジックナンバーが出てくるのが嫌で、あえてそう記述したりする事はある。
983デフォルトの名無しさん:2012/10/22(月) 05:59:59.26
本来、等差数列のリストを作るための関数であるrangeを
ループのカウンタに流用せざるを得ないPythonのfor文には
柔軟性が欠けていると言えなくもない。

だがそんなことは作者が初心者に指摘されるまでもなく
わかっているはずで、まずいと思ったらとっくに直しているだろう。
直さないということは、プログラミング上は些末な問題に過ぎないということだ。
あきらめて仕様に従うのが大人というものだ。
984デフォルトの名無しさん:2012/10/22(月) 06:18:22.52
それはfor文の考え方を間違ってる。というかC脳に支配されすぎている
リストを辿るからこそ一貫して柔軟な操作が出来るんだろ
985デフォルトの名無しさん:2012/10/22(月) 06:22:23.17
バカでかいリストがあって最初の要素以外を列挙したい場合はどうしたらいいですか?
986デフォルトの名無しさん:2012/10/22(月) 06:22:51.24
list[1:]
987デフォルトの名無しさん:2012/10/22(月) 06:29:37.66
>>986
リストをスライスするとコピーが作成されるのは避けたいです
それともリストを変更するまでコピーを遅延するようなメカニズムがPythonのスライシングには組まれてるのでしょうか
988デフォルトの名無しさん:2012/10/22(月) 06:32:02.76
ビルトインのitertoolsモジュールにisliceクラスがある
でも基本的にコピーオンライトなんてどれでも普通じゃなかったっけ
そもそもリスト自体要素への参照に過ぎなかった気がするが
989デフォルトの名無しさん:2012/10/22(月) 06:46:58.82
isliceいいですね。どうもです
990デフォルトの名無しさん:2012/10/22(月) 06:48:13.27
参照するだけならコピー作られんだろw
991デフォルトの名無しさん:2012/10/22(月) 07:08:11.26
>>985
巨大なリストでコピーを作りたくないって意図なら itertools.islice

>>982 range(1, 1+10)
自己レスだけど、数値直書きだと
始点変えたいだけの場合、変更箇所が3箇所になるので保守性よくないね。
992デフォルトの名無しさん:2012/10/22(月) 09:05:20.76
>991
>982

range(1, 1+10) →じゃなくて→ range(1, 10)
とか
range(2, 2+10) →じゃなくて→ range(2, 10)
とかいう仕様にしとけば良かったのにな
993デフォルトの名無しさん:2012/10/22(月) 09:39:21.06
is-liceと読んでしまった人がここにいます
994デフォルトの名無しさん:2012/10/22(月) 10:03:48.87
これはおこめですか?(誤)
995デフォルトの名無しさん:2012/10/22(月) 12:04:45.61
ボクはココにいるよ
996デフォルトの名無しさん:2012/10/22(月) 12:23:47.44
>>992みたいなアホってプログラミング向いてないからもうパソコン触らないほうがいいと思う
997デフォルトの名無しさん:2012/10/22(月) 13:51:24.74
pass
998デフォルトの名無しさん:2012/10/22(月) 13:54:53.59
 888   888   888 
8   8 8   8 8   8
8   8 8   8 8   8
 888   888   888 
    8     8 8   8
    8     8 8   8
 888   888   888 
999デフォルトの名無しさん:2012/10/22(月) 13:55:48.33
 888   888   888 
8   8 8   8 8   8
8   8 8   8 8   8
 8888  8888  8888
    8     8     8
    8     8     8
 888   888   888 
1000デフォルトの名無しさん:2012/10/22(月) 13:57:07.67
 888   888   888       8
8   8 8   8 8   8     88
8   8 8   8 8   8  8   8
 8888  8888  8888 888  8
    8     8     8  8   8
    8     8     8      8
 888   888   888      888
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。