|....,,__ |_::;; ~"'ヽ | //^''ヽ,,) | i⌒" | ∀`) < 誰もいない きのこるならいまのうち |⊂ | ノ _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" |( ´∀`) < きのこ のこーのこ げんきのこ ♪ |(ノ |つ | | ⊂ _ ノ ""U _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" (´∀` )| < エリンギ まいたけ ブナシメジ ♪ ⊂| (ノ | | | ヽ _ ⊃ .U"" | | ミ | ミ サッ! | ミ |
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
PyPy
もう3に移行したほうが良いの?
移行してください
やだ
/ .\ / .\ \ / \ / \ ___________ . / \ ./ \ / | \/ \/...| | | | | | | | | .._ |_| |_|_.. | | さあ‥ 逝こうか‥‥ | | | | | | | | | | | | | | | |/ ..\| | | | | | .._|/| _ _ _ _ _ _ _ _ ...|\|_ / ..| | _−_−_−_−_− _ | | \ | |/_/━ ━ ━ ━ ━ ━\_\| | .._| /_/━ ━ ━ ━ ━ ━ ━ \_\.|_ /_/━ ━ ━ ━ ━ ━ ━ \_\ / /━ ━ ━ ━ ━ ━ ━\ \
はい
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
RealLibってリンク切れなんだけど 開発者死んじゃったの?
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()
safety pool ですね わかります
>>16 そのコードの意図を把握できない初級者と中級者と上級者が混乱するからやめろ
前スレ
>>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屋って基礎が分かってない気がして怖いんですよね。。。。
>>951 の質問があまりに曖昧で隙だらけだったから
みんな解答避けてただけだろ
> ある程度大きいデータを保存しようとすると > memoryerrorになってしまうんですが、 無駄な部分を端折って十分に分わかったから曖昧とは思わなかったよ。
>>19 del obj は free(obj) じゃないのよ
>>22 del obj
が正しいよ。
だって、Pythonのcodeだもんよ。
C言語のcodeではないよ。
podcastを一気に落とすみたいなのってどのモジュール使えばいいんですか
処理系の実装に依存しそうなコードはあまり推奨されない。
巨大な辞書の保存だけど、
write一回で済ませるようなコードでは、一時的に巨大なデータがメモリ上に乗っかるので、memoryerror制限に引っ掛かっても仕方ない。
繰り返し文使って複数回に分けて書き込むと省メモリで済むはず。面倒だったら素直にDB使おう。
>>23 >>22 は、del でメモリ開放を期待するようなコードを書くべきではない、って意図じゃないかな。
>>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)だと前と後ろしか消えませんし...
>>28 "aabaabab".replace("b", "")
てs
31 :
デフォルトの名無しさん :2012/07/21(土) 04:04:34.35
>>26 辞書の保存なら RDBよりKVSの方が手軽だと思う。
規模にもよるけど、標準で済ませるならdbm系モジュール (pickleする必要があるなら shelve)
オブジェクトDBだったらZODBとかdurus辺り。
普通にpickleでファイルに書き込みでもいけると思うんだけど
dump 使ってる?dumps で一括でシリアライズしてから書き込みしてたりしたら多分アウト
# 前スレ読んでないので推測
>>32 > dump 使ってる?dumps で一括でシリアライズしてから書き込み
> してたりしたら多分アウト
> # 前スレ読んでないので推測
私も分からない。
前スレ
>>951 の書き込みは、このスレにはないと思う。
Q. なぜ儲からないのでしょうか? A. お金にならないことに時間を使っているからです。
本当に下らない質問なのですが、 何で3系より2系の方が速いのですか?
下らない問いに答えよと申すか
下らない答えを申せ
Python勉強すると、Cのポインタが少しわかるようになったよ 動的型付けの言語の変数は、オブジェクトへのポインタなんだね 行き詰まったら、色んな視野を持つって大切だね
>動的型付けの言語の変数は、オブジェクトへのポインタなんだね 動的型付け言語の全部が全部そうじゃない
>>38 という事は3系が2系よりも速くなる事はこれからも無いと考えて良いのですか?
馬鹿には無理
>>41 はい
速度を犠牲にして利便性を取りました
速度はハードの進化で補います
低級言語使え
PyPyがv3対応してGILが取り除かれてGCがインクリメンタルGCになればなー
>>39 リファレンスとポインタは別物だよ。
一部、同じような振る舞いというだけで。
ポインタを抽象化したもので別物ではないんじゃね
>>47 いや、そういう問題じゃなく別のもの。
リファレンスしか知らないとそういう理解になるかもね。
喧嘩売ってんのか?
どういう問題で、どう別物なのか言わない。ただ煽るだけ。死んだほうがマシだろう
たぶん抽象化の意味を分かってないと思うw
>>51 どうみても煽ってんのはお前の方です
ほんとうにありがとうございました
>>53 いや、そういう問題じゃなく別のもの。
煽りしか知らないとそういう理解になるかもね。
まずは俺にも分かるよう説明してもらおうか
リファレンスは名前、別名。ポインタは値、アドレス。 ポインタを出席番号と考えると、リファレンスは名前。 あだ名みたいな別名で同一人物を参照できる。
思ったけど、ポインタの上位概念であるReferenceじゃなくて、 何か特定の言語においけるリファレンスという仕様の話をしてるのか?
>>39 はPythonの変数は全部オブジェクトを指してるポインタみたいなものだと気づいたと言ってるんだろうけど
>>46 が突然リファレンスと言い出した。これはポインタより抽象的な参照のことを言ってるのかと思ったら
どうやら違うみたいだ、Pythonで普通リファレンスとかデリファレンスとか言わないから具体的にPythonの参照がそれなのかは知らない
Ruby厨と推測
>>60 え、Pythonの変数はリファレンスだよ?
以下、何事も無かったかのように別の話題
ポインタは参照の一種だし、変数がオブジェクトを参照するPythonでCのポインタへの理解が進んだというのは
大いに理解できる。誰も同一視してないよね。結局リファレンスに拘ってる奴が何を問題視して指摘してるのかよく分からない
特に
>>58 の言うリファレンスはポインタでも実現出来そうに聞こえるのだが
wxPython だと wxFileConfig というのがありますが これと同じようなものは Python の標準モジュールにありますか?
Pythonとポインタを絡めた話はいっぱいヒットするけど リファレンスは全然だなあ。多分それがPerlのリファレンスのことで、 RubyやPythonではもはや意識しなくて良くなった概念らしいことは分かるけど
Pythonの参照はPerlで言うリファレンスなのかもしれないけど Pythonのリファレンスという話はあまりないので ちゃんと説明してもらいたい
馬鹿には無理
"リファレンス"と"参照"を区別して使ってるの? (Cでいう)ポインタの機能=リファレンス+イテレーション リファレンス: 何らかのオブジェクトにそのアドレス等の情報を使って間接的にアクセスすること Cでいうと*やら-> イテレーション: オブジェクトの集合を順に(もしくは特定の順番等で)扱う機能 Cでいうとポインタ演算 ++やら--を含む っていう理解で,Pythonのオブジェクトは基本的にこのリファレンスで扱っている認識. こうでない意味で使ってるなら説明がほしい
リファレンスはオブジェクトを参照して、ポインタはアドレスを参照してるというだけの違いなの? プログラマの意識をアドレスから切り離したという意味で抽象化だと思うけど そういう問題じゃないと言われたのは、どういう問題なの Cのポインタで相対化するならば、「オブジェクトへのポインタ」というのは言い得て妙だと思うけど、どれくらい間違ってるの
参照とリファレンスは同義だと思うけど、ポインタとリファレンスが別物なら ポインタは参照とは別物になってしまうから、ここではポインタを含むものを参照 それとは別の何かをリファレンスと呼んでいる
>参照とリファレンスは同義だと思うけど、ポインタとリファレンスが別物なら >ポインタは参照とは別物になってしまうから 馬鹿じゃね?
>>76 ポインタはもっとも基本的なリファレンス=参照だよ
でも別物だと主張してる人がいるから、リファレンスと参照を区別してるだけ
自演乙
一応言っとくと、Pythonの参照がCのポインタと同一だとは誰も言ってないからね ただオブジェクトは実際どっかのメモリ上にあるわけで、Pythonの参照をひとまずポインタとして説明してるのを見るけど それがPythonの理解に対してどれくらい問題なのかを聞きたいだけ
あえて言うなら ポインタ⊂参照 であって決して ポインタ=参照 ではない
参照とリファレンスは同義だし ポインタは参照とは別物だし なんの問題も無い
つまりどういうことです?
参照とポインタが別物という説明は理解できないし、一般的な常識とも違う
ポインタを包んで生のアドレスをプログラマーから隠しているのが参照
いや、そういう問題じゃなく別のもの。 リファレンスしか知らないとそういう理解になるかもね。
糞は味噌が消化されたものだから味噌は糞の一部だ だからといって糞は味噌ではない
味噌が糞だと困る。
「別物」という日本語が曖昧なのが原因なんじゃないのかな。 「等しくない」ことを指しているのか、 「無関係である」ことを指しているのか、 わざと混乱させて使っているひとがいる。 今回の場合、無関係ではないが等しくもない。なので別物。 ひょっとしたら関東人と東北人で「別物」のニュアンスが違うのかも知れない。
どうせ別物派も別物じゃない派も自演だからどうでもいい
pass
>>49 >>86 の"リファレンス"が具体的に何を指してるのか結局わからん
コピペしてるだけなようだから無視すべき?
ほぼ
>>85 の捉え方で
そうすることで扱いに注意が必要なポインタ演算を隠蔽して
間接的にアクセスする機能だけを抽出したのが参照/リファレンスだと思うのだけど
多分大半の実装ではリファレンスの機能を実現するためにポインタ相当の機構を使ってるんだよな
だから
>>89 と
どう別物か言わないから曖昧になるんだろ
pass
scapyがうまくインストールできない… pypcapとか2.7じゃアカンのか
馬鹿には無理
>>93 親クラスと子クラスは関連があるがイコールではない、
ということになるかな。
広義にはポインタも参照の一種だが、ポインタは加算減算が可能。
喧嘩売ったから荒れただけ
TkinterのTextウィジェットにseeがありますがウィジェットの一番上に指定したインデックスを表示する方法はありますか
>>101 よくわからないけど、指定したウィジェットを一番上(z-index)に表示だったら widget.lift()
>>96 WindowsでPyX使ってみたけど、
最初のサンプルでエラー出て、
使い物にならなかったよ。
ナメチャンタラギッチョンチョンで pyのpyのpy
「ウインドウがアクティブ(フォーカス)になったら、処理を行う」というイベント処理をやりたいのですが、python2では無理なのでしょうか?
馬鹿には無理
108 :
デフォルトの名無しさん :2012/07/28(土) 08:45:11.65
textファイルの比較をしたいのですが、便利なモジュールとかあります?
difflib
>>107 出来ました。
ありがとうございます。
>revision 3179-3181 で治ってるらしいので
こんな情報どこから見つけてくるんですか?
馬鹿には無理
112 :
デフォルトの名無しさん :2012/07/28(土) 09:12:24.01
ググるしかない
>>113 確かにそれなんですけど、
どうやってそれを見つけたのかなって・・・。
>>114 おまいが何をどうやってどうだめだったかくらい書くのが礼儀だろ馬鹿
>使い物にならなかったよ。 とか言い切るなら、それなりの根拠が必要だよな。
馬鹿には無理さんはツンデレ。
思ってるだけじゃ何も実現出来ないよ
馬鹿には無理さんは病ンデレ
>>102 ウェジェットの配置ではなく自動スクロールの方です
説明が悪かったみたいです すみません
Tkinterのtextウィジェットで文字のピクセル数または文字単位の高さを返すメソッドはありますか
PyXやっぱり使い物にならないわ。 日本語混ざりのテキストだと全然だめ。
馬鹿には無理
同じ階層に同一名のファイルとディレクトリがある場合の 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 名前を変える以外に対処方法はないでしょうか?
ディレクトリが優先。 名前を変えるしかない。
>>122 文字以外を PyX で出力しておいて
最後に文字だけ PyPDF を使って
書き足すと良いかも知れません
>>126 それがですね、
MiKTeXをTeXworks直接使って実行すると、
日本語混ざりでも大丈夫なんですよ。
PyXを経由したときだけおかしい。
うざい 消えろ 何この糞スレ
>>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ってしたらエラーがでたんだけど・・どうして?
application を main 以外から使う予定がないなら main の中でも良いはず。 あと、2行目は気にすんな。
2行目気になる
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で使うことが できないのかな?
馬鹿には無理
google/appengine/ext/webapp/__init__.py に import util と書けばできるよ。
137 :
デフォルトの名無しさん :2012/07/29(日) 14:25:51.42
>>135 バカにも理解できない文章しか書けない糞は黙ってろ能無しが。
馬鹿が無理してる
パッケージをインポートしてもパッケージ内のモジュールは自動的にはインポートされない __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
概出 過去スレ嫁
今日も雑魚しかいねーな
概出っていまだに使ってる奴いるのか。
144 :
デフォルトの名無しさん :2012/07/29(日) 16:15:17.41
こんな質問者増えてるのかな
ドアを叩く手前で悩んでいる人は結局それ以上伸びない
ruby kaigiのpython版ってないの
python onsen
PyConJPが9月に品川の産技大でありますが大した規模ではない
もし行くのであれば3日目にお会いしましょう
スプリント参加か…
pass
角電池
154 :
デフォルトの名無しさん :2012/07/31(火) 09:52:59.89
155 :
デフォルトの名無しさん :2012/07/31(火) 10:25:57.58
textファイルに書き込むのは、write()で出来ますけど、 既に書かれてるものを削除して書き込んだりできます? 例えば、aって書かれているtextファイルをbに書き換えたり。
157 :
デフォルトの名無しさん :2012/07/31(火) 11:05:43.67
r+ 選んだってことは テキスト中のaを全てbに置き換えるとか そういうことをやりたいってこと?
159 :
デフォルトの名無しさん :2012/07/31(火) 12:07:03.24
>>158 aを置き換えるというか、textの中の文をまるまる違う文に置き換えたい感じです。
それならふつうに'w'で
>>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)
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 を強制終了する方法はありますか?
質問がぼやけてるな
>Windows 上で stdin から nonblocking で read したいのです。 無理 >threading.Thread で worker thread の中で sys.stdin.read() で それは正しい >worker thread を強制終了する方法はありますか? 無理
_Thread__stop()
訂正します。 x あまりにあっさり動いたので o あまりにあっさり止まったので
168 :
デフォルトの名無しさん :2012/07/31(火) 15:30:42.24
>>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.')
>169 sys.stdin に書き込む人は、 書き込まれる側のプロセスが終了するのを待っているので、 勝手に閉じる訳にはいかないのです。
あと、自分が書いたプログラムは、>169 さんとほとんど同じです。
もうちょっと具体的に言いますと、 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() してしまうと都合が悪いのです。
それで、 a.py が生きている間は、 p.stdin へ書き込みつつ、 p.poll() で a.py が終了したと判れば、 p.stdin を close() 出来るのですが、 a.py 側で worker thread が終わらない限り、 p.poll() で終了判定出来なかったということです。
>>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
とでもしたら?
a.py の stdout には別の内容を書き出しているので、 関係ないものを出力出来ません。あしからず。
条件後出し過去悪い
パイプにこだわらずに別のプロセス間通信でやれば?
じゃあ、stderrか、 a.pyが適当なfileを作成するか、 a.pyが親にsignalを送るか、 ? windowsだとsignal駄目だっけ?
一応、 _Thread__stop() で、 動作的にはとてもスッキリ解決しているのです。 心情的にマニュアル外の使い方がどうかという話な訳でして。
>>171 嘘だろ
後からお前が書いてる内容だと
全然違うんじゃね?
>180 すみません。 確かにそういう意味ではそうですが、 プログラムの大まかな流れとか、 stdin.read() を worker thread に入れる方法に関しては、 >169 さんとほとんど同じです。
>>179 解決したんなら気にすんな
あといちいち一言多い
うざい
a.py の方で stdin を close 出来れば良いかもしれないと思い、 thread.join() の代わりに os.close(0) # fd:0 = stdin を書いてみたりもしたのですが、 blocking read 中は close 出来ないらしく、 dead lock 状態の上にさらに dead lock を重ねるという、 最悪の状態になってしまいました。
あと、 del thread でも、thread は終了しませんでした。
どうでもいいけどsys.stdinに書き込みは出来ないのかな?
パイプ使うのやめたら?
b.py 側で p.stdin.write('please finish.\n') としたら? a.pyでは if sys.stdin.readline() == 'please finish.': something() break でいいんじゃない? これが駄目なら、もう知らん。
予告してやろう もう知らんといいつつも、世話好きのお前らはレスを続けるのだ
>>187 >あくまで a.py 自身が必要な作業が終わったら、自分で終了する形です。
190 :
デフォルトの名無しさん :2012/08/01(水) 00:53:45.51
こんにちは。 __doc__でクラスや関数のドキュメンテーション文字列を取得できますが ある関数で__doc__が呼ばれたときにその関数内に書かれたドキュメンテーション文字列に 別の場所の文字列を連結して返すことってできるのでしょうか?
これでいいかよ、ちくしょー。 # 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.')
こんにちは。 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 だと期待する結果になります。
194 :
193 :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
です。
utf-8のBOMが付いててエラーになってるとか?
>>195 > utf-8のBOMが付いててエラーになってるとか?
はい、なんかそれっぽいです。
保存したファイルがutf-8でした。
shift_jisにしてみたところ期待通りの結果になりました。
ありがとうございます。
ちなみにutf-8のまま行うにはどうしたらいいんでしょう?
入力されてくるファイルがデフォでutf-8なのでフォーマットをいじれないのです。
一度変換をかけるしかないのでしょうか?
それって、何かに自分で書いたのを、 「名前を付けて保存」で保存したんじゃない? echo '{}' > empty.json としたのを読み込むとどうなる?
↑の後、こうやるんだよ。 python -m json.tool < empty.json
>>198 {}
という結果になります。
>それって、何かに自分で書いたのを、
>「名前を付けて保存」で保存したんじゃない?
元データは C#のDynamicJsonを使って吐き出されています。
出力結果はutf-8。
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 とした後に右足の靴下を脱いでみようか。
BOMの消し方ぐらいググれよ
>191 >p.stderr.readline() b.py の方が block してしまうので駄目です。
.replace(/^・ソ/,"")
おはよう
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
ほい
>>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 を上書き保存。
ISAM でも作る気ですか?
test
Macにて絶対パスを以下のように取得しています。 os.path.abspath("./") しかしこれをコールする際のカレントディレクトリによって、 /Usersから始まる場合と/Volumes/Macintosh\ HD/Usersと始まる場合があります。 原因がわかる方がいましたら教えてください。 よろしくお願いします。
それぞれのカレントディレクトリで python -V
214 :
デフォルトの名無しさん :2012/08/02(木) 00:12:45.47
"~/"と勘違いしてんのかな?
いや実は俺もそうじゃないかと前から
告白タイム
218 :
デフォルトの名無しさん :2012/08/02(木) 10:34:38.40
>>209 理解できました。ありがとうございます。
161のコードなんですが、パスでtextファイルを指定するのではなく、
このスクリプトと同じところにあるtxt,txt.tmpを指定するっていうことは可能でしょうか?
__file__見てゴニョゴニョやる
path = '/tmp/tech155.txt' path2 = path + '.tmp'
質問です。 教則本を読みながら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です。 お願いします。
>>221 height = float(height)の直後に全角の空白文字があるのが原因だと考えられます
質問の際は重要なヒントであるエラーメッセージを必ず全文載せてください
あとバージョン2.x系はprint文を()でくくる必要が無いです
うんこしたら体重が1500g減った
>>222 ありがとうございます
無事完成しました
子から親のメソッドは使えるけど、 dirで親のメソッドが表示されないようにするには、どうすればいいですか?
>>225 class-privateは、Pythonの場合 アンダースコア2つのprefix付きで命名する
dir()での表示のみが重要なら、__dir__メソッドを実装してdirで返すメンバ一覧にフィルター掛ける
# クラス内で定義。充分なテストはしてないので例外的なケースはあるかもしれない。叩き台にどぞ。
def __dir__(self):
return self.__class__.__dict__.keys()
特に理由がなければ、クラス毎にdirの振舞を変えるよりも(副作用が心配)
親クラスのメンバを返さない版のdirに相当する関数作って使った方が楽。
>>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()
>>>
疑問に思ってたクラスみてたら親クラスにだけ__dir__定義されてました。 なので叩き台のとおり親クラスに以下のメソッドが追加されてるだけのようです。 def __dir__(self): return self.__class__.__dict__.keys() 疑問解決しました。ありがとうございました。
229 :
デフォルトの名無しさん :2012/08/02(木) 22:55:53.16
プログラミングを始めたいのですが、Pythonから始めても大丈夫ですか?
大丈夫です 自分もpythonから始めました
英語ができるならね(キリッ
英語がないと不自由なのはどの言語でも一緒
いきなりPythonに興味を持ったきっかけが気になる
234 :
229 :2012/08/02(木) 23:18:03.85
どの位の英語の知識が必要になりますか? あと簡単なゲームなら作れますか? 質問ばかりですみません
>234 どんなゲームが作りたいですか?
237 :
229 :2012/08/03(金) 00:00:26.09
>>235 まず凄く簡単なゲームを作りたいです
それから、RPGのようなゲームを作れるといいです
>>236 英語も一緒に勉強した方が良さそうです・・・
239 :
229 :2012/08/03(金) 00:06:09.63
>>238 ご丁寧にありがとうございます
それを元に勉強しようと思います
他の方々も無知な私のためにお時間を割いていただきありがとうございました
パスの設定すら出来ん・・・ どうすりゃいいの?
>>240 画像を取得する部分、
どのような画像か判定する部分
に分けて頑張れ。
>>242 windows, linuxのどちらか、
またそのバージョン、どこからPythonを入手したか。
ぐらい言ってくれないと話にならない。
pwd.getpwnam('hoge').pw_passwd = shalib.md5_encode(password, md5_salt)
>>240 同じアングルで撮ってて、
毎回同じ位置に頂上がある。
っていう条件はかなり恵まれてるぞ。
Cしかやったことないので今日みんpy読み始めた 頑張るぞ
Cを知ってるのならPythonチュートリアルで十分
mjk 確かにもう半分ぐらい読み終わったわ オブジェクト指向言語は初めてなので、本買っちゃった。まあいいか
Pythonはオブジェクト指向入門にはベストではない気がする OOP向け機能が盛りだくさんのJavaやC#がイメージつかみやすい
馬鹿には無理
JavaやC#の解説書は多いけどOOPの解説書ではないからなあ 結局、別に書籍を購入することになる
個人的には、Cでオブジェクト指向を実現している実装を眺めてみるというのが意外と良かったです。 まぁ、オブジェクト指向言語の便利な機能とかは知ることが出来ないけれど。 あ、スレチですね。
pythonスタートブックでプログラミングの勉強しようと思います。 この本で学んだことだけでどんな事ができるようになりますか?
書いてあることができるようになります
pythonでゲーム作るならpygame一択?
pyglet一択
_______∩_∩ / ノ ヽ ( ノ⊂ ̄))) ̄⊃ /|ヽ (_ノ ._ ̄ 0'ヽ 0' / |ノ .) (_) ヽ i ( むしゃむしゃしていた。 ∋ノ | /――、__ ./(∩∩) 草なら何でもよかった。 / /| ヽ__ノ | / ./ 今は反芻している。 | ( | ( ’’’ | ( / |__ヽ. L_ヽ Lヽ_ヽ ''" ""''"" "'''''" ""''"" ''" ""''"" ''" ""''"" ''" ""''"" "''
importについて聞きたいんですが 下のような構造になっている時にb.pyからa.pyをimportするにはどうすればいいのでしょうか? folder -folder1 --a.py -folder2 --b.py
sys.addpath
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.
>>259 tp://d.hatena.ne.jp/chlere/20110618/1308369842
「python import 相対パス」で検索
馬鹿には無理
もっと、 熱くなれよぉおおお!! ____ _/三三三ミ\ /ミ>―=≡ミミヽ `|ミ/ ヽミ| ヒイ ==ヽノ== |ミ| ||ィ・>ii<・ヽV) `( || ソ | ノヽノヽ / ∧ <二>i/|_ / ∧  ̄ / / \ /\ ヽーイ / /\ T ̄ヽ / ̄T | | / |
馬!鹿!に!は!無!理!
>>259 from ..folder1 import a
という書き方もできるで
__init__.py が無いと無理じゃなかった?>相対パスでimport
__init__.py を書けば医院で内科医
OSの種類とfolderの意味合いにもよるが、folder1にb.pyへのリンクを張る手もある
× folder1にb.py ○ folder2にa.py
271 :
デフォルトの名無しさん :2012/08/09(木) 02:29:04.65
半角全角混合の文字列を折り返したいのですが 標準のtextwrapだといろいろ綺麗に行かない感じです この手の処理でpythonの定番ライブラリがあれば教えてください
バージョン2系での文字化けは、引数をUnicode文字列に変換すれば防げる
一部の階層の人間がその他の階層の人間を搾取横領する構造は、過去も現在も変わりません。 搾取する階層が自らを「勝ち組」と称し他を「負け組」とさげすむ真の理由は、 「負け組」が生産しなければ「勝ち組」のための現在の体制を維持できなくなるところにあります。 「勝ち組」が提供する価値観は「勝ち組」の利益のため「負け組」に押し付けたものです。 こんな価値観は放棄するのが賢明ではないでしょうか。 ・競争しません。負けるが勝ち。 ・奢侈品・自家用車・住宅は取得を目指しません。これを目的にした貯蓄も行いません。 ・性衝動はその目的を達成しない形で発散します。結婚を目指しません。自慰で性欲を封じ込めます。 ・労働、消費、出産、育児など生産性を促す社会活動には極力参加しません。 ・テレビ・雑誌などのマスメディアは、必要でないものを消費させるため私たちを扇動しています。彼らに耳を貸さないのが賢明でしょう。 ・受け取る報酬以上の仕事はしません。真面目・努力・忍耐・無償の行為は勝ち組の捏造した価値観でしかありません。 ・人生や行動に目標を作りません。無理をしません。頑張りません。夢はみません。希望はもちません。淡々と生きるだけです。 勝ち組だろうが負け組だろうが人生の最後に行き着くところは結局「死」です。結果は同じです。 (参考)吉田兼好(1283-1350) 徒然草 第38段 「名利に使はれて靜かなる暇なく、一生を苦しむるこそ愚かなれ。」 富が多いければ災いも多い。金は山に捨て、宝石は川に投げ込むべきだ。 知性と教養にこだわるとは人の評価にこだわることである。 それでも知性と教養を磨きたいという人には「知恵は嘘を生む」と言っておこう。 教養も結局は人間の欲望の積み重ねでしかなく、知ったこと、学んだことは本当の教養ではない。 本当の教養とは、善も悪も根本は同じであり、本当の善など存在しないと悟ることである。 真の人間にとっては、知性も教養も功績も名声もどうでもいい。これは教養を隠して愚か者のふりをすることではない。こういう人は元来、教養や損得勘定には無縁なのである。 迷妄にとらわれて富と名声を追い求めることは無意味なことであって、論ずるに値しないし望むに足らぬことなのである。
英数と日本語がどっちも1字で数えられて揃わないとかスペースで区切られるとかのやつか? 誰か日本語対応版作っていたような気がするけど
unicodedata.east_asian_widthでいちいち数えるのは面倒くさい
277 :
デフォルトの名無しさん :2012/08/09(木) 21:04:12.52
NLTKを使おうと思っていれたはいいが,IDLEではImportできるのにpydevではimport errorになってしまう・・・ どなたか解決方法を教えて下さい.環境はWindows 7 64bit + Python2.7 32bit + NLTK 2.0.2です
馬鹿には無理
もっと、 熱くなれよぉおおお!!
馬!鹿!に!は!無!理!
は!か!た!の!し!お!
282 :
デフォルトの名無しさん :2012/08/10(金) 13:20:21.62
最近勉強を始めたものです。 皆さんはどんなOS上で実行されていますか? 私はWin7_64bitなのですがライブラリが対応していないことが多くて...なんでなんだろうと。 OS考えたほうがいいんですかね。
私もWin7_64bitなのですが特に困っていませんね。
Pythonのバージョンも何のライブラリかも言わないと答えようがないだろ
というか対応してないのはx64版Pythonであって x86版PythonをWin7-64bitで動かす分には対応してないライブラリなんてほとんどない あ、Python3は無しね あんなものユーザー数的にメインストリームじゃないし
>>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)
どれ入れてます?
pythonの64ビット対応は早かったのに周辺ライブラリの対応は鈍いね
鈍いってか意味ないと思われてるんだろ Pythonはマルチスレッドよりマルチプロセスの方が有効だからアドレス空間無理に増やす必要性もない
linux amd64/vista 32 自分でビルドしてる分にはライブラリで特に困ったことはない。 64bit用のバイナリが配布されてないだけって事はないかな? ビルドできる環境があるかどうかでも、人によって使えるライブラリに差が出ると思う。
mingw? cygwin? msvc2008?
一応MinGWもCygwinも試してはいるな Mercurialが必要だったりSVNの宣言削ったりちょこちょこ手を入れる必要があったけど VCはC言語の皮を被っただけの言語だからパスだ
ときどきあれ?通らない?ってことがあるから 64用も置いておいてくれると有難いよな
誰か最新のlxmlをWindowsでビルドしてくれよ lxml→libxslt→pthread for win32ってうっきょおおおおおおおおおお ↓ libxml2
文字コードについて質問させてください 例えば「あいう」という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' となってしまいます.
この流れなら適切 「馬鹿には無理」
お前こんなとこにもいるのかよ 暇だねー
もっと、熱く(ry
ここ超初心者スレだからな 小学校の校門で「社会は厳しいんだぞ!!」と叫んでる感じ
pass
yield
print()
306 :
デフォルトの名無しさん :2012/08/13(月) 07:19:06.28
textファイルの最後に文を書き足したいのですが、 f = open("a.text", "w") f.write(a) f.close だと上書きしてしまいます。 上書きせずに続きから書き込むにはどうすればいいでしょうか?
大人の、のび太がガキ大将してるんでしょ。
pass
pythonってシングルクォーテーションとダブルクォーテーションって違いはないんですかね
あります
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 というエラーをはきます。 何故? わかる方教えてください。
>>314 > No module named turtle
これぐらいの英語もわからないと、ちょっと厳しいぞ。
>>313 悪いけどそのまさかだよ
存分にためらうといいい
読んで字のごとく、タートルという名のモジュールがありません。 OS, Pythonそれぞれのバージョンを書こうよ。
318 :
314 :2012/08/13(月) 16:46:18.96
OSはLinuxのopenSUSEで Pythonのバージョンは2.7ですが・・・ 超初心者だと思って多少は見逃してください(汗
Tkとturtleが入ってないとかかなあ
Ubuntuなんかでありがち
とりあえず質問者は
>>317 の最後の行を
320 :
314 :2012/08/13(月) 16:50:23.65
>>319 えっとopenSUSE 12.1
Python 2.7.2
でよろしいでしょうか?
です。リロード遅れた とりあえずはpython-tkを入れてみて もしかしたら他のパッケージ(python-develとか?)も要るのかも
322 :
314 :2012/08/13(月) 17:02:08.66
>>321 先生!
python-tkを入れる、とはどういうことをいうのでしょうか?
常識でしたら申し訳ありません(超汗
openSUSEまったく知らないから合ってるか怪しいけどsu/sudoしてzypper install python-tk もしPythonを自前ビルドしたのなら自分にはお手あげなので詳しい人に助けてもらって
>Traceback (most recent call last): > File "<stdin>", line 1, in <module> >ImportError: No module named turtle これがエラーの概要です このエラーに心当たりが無いか探してください まず,このエラーを日本語で理解しなおせますか """ 標準入力、モジュール一行目のインポートエラー ”turtle”と言う名前のモジュールが見つかりません """ モジュールと言う単語の意味は把握できますか インポートとは何か理解していますか 単語の意味を一つづつ把握できていますか ”turtle”はモジュール名であり、今からあなたがインポートしようとしているものです
325 :
314 :2012/08/13(月) 17:09:27.27
>>321 importすることでしょうか?
そうしましたら
File "<stdin>", line 1
import python-tk
と出まして、
タートルでまた同じエラーをはきます。
326 :
314 :2012/08/13(月) 17:11:30.47
時間差で全然違うことかいてますね。 みなさんありがとうございます。 今の情報でやってみます!
327 :
314 :2012/08/13(月) 17:23:12.34
みなさま、
ありがとうございます。
>>323 の方法でエラーがなくなりました!
その本GUIのとこ解説少なすぎて挫折したよ!
# 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 失敗したら失敗理由全てを貼って。
331 :
314 :2012/08/13(月) 18:56:03.56
>>330 執筆時のバージョンは3.2です。
と書いてありますね・・・
332 :
314 :2012/08/13(月) 19:07:56.10
>>329 端末から一行づつ入力すると
中国の陰陽みたいなマークがでます。
保存するとエラーが・・・?
ちょっと待ってください。
見直します。
[space]# より後は書かなくていいよ。 ) まで書いてくれればいい。 端末から一行ずつ入力ではなくて、 コピペして保存すればよろし。
334 :
314 :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
ファイルに保存してあることは、
一行ずつ入力のときと全く同じなのですが。
335 :
314 :2012/08/14(火) 06:14:56.82
>>333 YaSTからPython関連のパッケージをありったけインストールしたら
エラーがなくなり、正常に動作するようになりました。
パッケージ入れてる最中にソースファイルをいじったりしてないか # 以降の日本語コメント削るとか ソースファイル中にASCII以外(日本語等)の文字を含める場合は 文字エンコーディングを指定する必要がある たとえばエンコーディングがUTF-8ならファイルの一行目に # coding: utf-8 などとする ちなみに0xE3は「タ」をUTF-8で符号化した場合の1バイト目
337 :
314 :2012/08/14(火) 06:45:38.36
>>336 >パッケージ入れてる最中にソースファイルをいじったりしてないか
いえ、してないです。
後半の内容はこれから勉強させてもらいます。
(今の私には難しいです・・・)
338 :
314 :2012/08/14(火) 06:50:32.97
もしかしてPythonは 初心者お断りな部分が結構ありますか? お行儀がよいとは聞いていたのですが・・・
>>333-334 のやり取りで既に意思の疎通が出来てない
PGのまえに人とちゃんと会話する能力身に付けてから来い
というか戦犯はTurtleが使えるようになって一件落着したのに勝手に問題を増やした
>>329 >>337 今の時点ではわからなくても問題ない
入門書相手に自分のペースで勉強してわからなくなったら質問すればいいよ
あとPythonは易しい部類に入る
コレくらいの問題が自己解決できなきゃどうしようもない
自己もクソも
>>333 でそもそも解決できるし
ちなみに言うと英語圏の人が英語で使う分には絶対に起きない問題ではあるが
基本的なPythonでのエラーの解消の仕方を身に付けようともしない、これじゃきりがないわ
英語圏の人がスマートクオート使ってこけて質問してるのはたまに見るが
初心者を免罪符にしようとする人間はどんな言語でもお断り なぜならウザさは言語に依存せず普遍なものですから
>>338 初心者という言葉は曖昧で回答に困る
具体的な経験を書いてもらうと回答の助けになる
Pythonはソースコードの書き方に慣例がある(PEP8でググれ)
PEP8と特徴的な構文が、お行儀がよいと言われる理由かもしれない
345 :
314 :2012/08/14(火) 10:09:42.59
なるほど、質問時には自分のレベルを書いた方が回答が得られやすいですよね。 参考にします。 あと、初心者を免罪符にしないように心がけます。 いずれにしても、問題は解決しましたので、 皆様、ありがとうございました。
夏休みが始まるとスレのレベルが落ちるという噂は本当だった
347 :
デフォルトの名無しさん :2012/08/15(水) 18:57:19.56
昨日から始めた初心者なんですが、 f=open()は何故fなんでしょうか? それとfで読み込んだのをs=f.readline() とする例があったのですが、sを使っています。 これらは何か基準があるのでしょうか?
fはfileのf, sはstringのs? 私だったらline=f.readline()と書く。 一文字のLはL=[]という風に、listの時のみ使う。 小文字のLは1やIと見分けがつかないfontがあるので使わないように。 ってPythonの何かの規格みたいなので読んだ。
fileとstringの頭文字だよ 説明用のコードだといちいち名前を考えるのが面倒くさいので 型名の頭文字を使うのはありがちな行為
Python 3.2.3 (default, May 3 2012, 15:54:42)
>>> print "
>>348 >>349 ありがとうございます!"
File "<stdin>", line 1
print "
>>348 >>349 ありがとうございます!"
^
SyntaxError: invalid syntax
空行判定 if line.strip(): でいいけど、 strip()すると、厳密には空白文字のみの行 (line = ' \t\n') の扱いが変わる。
バージョン2系では全角空白が曲者 >>> ' \n'.strip() '\xe3\x80\x80' >>> ' \n'.decode('utf-8').strip().encode() ''
IDLEってのエディタ使って新しくファイルを作ると関数とかが色付きで良い感じに表示されるのに 一回でもプログラム走らせると色が無くなって味気ないテキストになるんですが この現象の原因が分かる方はいませんか
python2.9にnonlocalを導入するのって無理なの?
あ、次は2.8か
358 :
デフォルトの名無しさん :2012/08/16(木) 12:58:29.64
2系は2.7で最後らしい。一部に2.8出せみたいなこと言ってる人もいるみたいだけど。
>>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 拡張子を含めたファイル名を入力することで回避可能。
そんな文章書く前にライブラリ作者に移行うながせと 頭悪いよなあ
だいたいもう既にPython環境を下支えしてるのは言語のパワーじゃねえっての 自分らが主導みてえな勘違いも大概にしとけよ
> Python環境を下支えしてるのは言語のパワーじゃねえ 何が下支えしてるんですか。
ライブラリと互換性だろ 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増えてしまいます。 何故なんでしょうか?
echo 0 > log.dat
とした上で、python3にて
>>367 を試してみたけど、
一ずつ増加したよ。
htmlもしくはwebserverに問題ありとみた。
Djangoが3対応すれば一気に3も広まるよ
370 :
デフォルトの名無しさん :2012/08/16(木) 23:52:30.84
cgiに直接アクセスした場合は、1ずつ増えました。 あと、cgiファイルなんですが、 f.close()の後にprintで何か表示するコードを書かないと、 500エラーになるのですが、これが原因でしょうか?
f.close() fcntl.flock(f.fileno(), fcntl.LOCK_UN) もしくは、 f.flush() fcntl.flock(f.fileno(), fcntl.LOCK_UN) f.close() が正しい順序の気もするが。 それは違う気もするし。 とりあえず、実行環境が悪いと思うよ。 directory毎まとめて実行環境をどっかにupしてよ。 情報を小出しにするんなら、これ以上は無理だよ。
>>367 そのページに <img src="cgi/counter.cgi"> 2回書いてるとか?
pypy translate.py -Ojit --sharedが通らねぇ
oh! jit!
じっと手を見る
啄木乙
pass
Django py3 きたね!
同僚にいっちまった手前、トップにpy3がないのは痛い。
何で俺はいつもガセを掴まされるの?
https://docs.djangoproject.com/en/dev/topics/install/ ゴガギーン
ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい
>>378 「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
380 :
デフォルトの名無しさん :2012/08/17(金) 16:30:31.86
質問です。 プロの方のコードをpep8に通したところたくさん指摘されて驚いたのですが 現場ではPEP8はどの程度守って書かれるのでしょうか?
>>380 プロの方のコードってなんだよ。
そもそも pep8 はマストじゃない。
>>382 何カリカリしてんだ?
>>380 速度が低下する書き方は当たり前だけど禁止
1列79越えは普通に見るな 極端に大きいのはないけど
スペースはルールあるけど結構手癖で意識せずに入ったりその逆はあるねw
pep8 はカマトト
複数の人間で開発してて、ソースの書きかたでもめたときに 「PEP8 ではこうなってるから……」と持ちだすときに役に立つ。 あと、他人が作った無茶苦茶なソースを整形するときには役に立つ。 それ以外では不要。
___ /| | ||. |∧_∧| ||. (´・ω・| うわっ、クソスレに来てしまった。 ||oと. U| || |(__)J| ||/ ̄ ̄ ___ | | | | | o| | | | | 彡 ̄ ̄ パタン、
エキスパートPythonプログラミングの命名規則も含めたコーディング作法が理想なんじゃないの
Eclipseで開発しようと思っているんだが、PyDevが入らない。
Help -> Install New Software
の順番で
http://pydev.org/updates を指定しているのに・・・・
ずっとPendingのまま、最後には接続が切れてしまう。
Eclipse Classic 4.2 Windows 32 Bitでは普通に出来る
Aptanaダウンロードすれば?
おとなしくAptanaで行くことにします。
Aptanaいいよね。
現在実行中のモジュール名は__file__で取得できますが、 メソッド名を取得する方法があれば教えて下さい。
self.__class__.__name__,traceback.extract_stack()[-1][2]
>>397 ありがとうございます。
オブジェクトではないので、
import traceback
traceback.extract_stack()[-1][2]
でいけました。
行番号は traceback の方が精確だな
>>396 便乗。
log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ )
みたいに使って、クラス名を入れたいんだけど、
class宣言していない場所で使うとエラーになるので、
そういった箇所でもエラーにならない方法があれば教えてください。
log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ if dict().has_key('self') else None)
dict() じゃなかった log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ if locals().has_key('self') else None)
>>403 サンクス!
引数の中でifが使えるのね。
>>397 log()を埋め込むメソッド毎にimport tracebackを入れないといけないようですが、
これを省略する方法がないでしょうか?
そのifはステートメントじゃなく演算子だから勘違いすんなよ
実行時情報からクラス名を所得する *完全な* 方法はなかったはず、
loggingモジュールでもサポートされてないし。
基本的なクラス・メソッドでは期待通りでも、その他の細かな状況で期待通りにならない。
例えば、メソッド内で作った内部関数では期待しない表示になる。
http://ideone.com/j41yD # 3.3だと qualname 導入で、ネストした場合の名前表示にも対応できるかもしれない。
>405 log()の中の方で import traceback traceback.extract_stack()[-2][2]
>>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等沢山あるので、これを一行にできないでしょうか?
Cythonで関数をインライン展開する場合ってどうすればいいんですか?
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]"> のように、ファイルとファイルの説明文をユーザが自由な数追加して送信できるようにしているのですが、それをどのように処理すればいいか悩んでおります。 宜しくおねがいします。
datetimeとdateを比較する方法って、どうするのがいいんですかね。 now = datetime.now() today = date.today() now.year == today.year and now.month == today.month and now.day == today.day やっぱりこんな方法しかない?
>409 log()の中の方で ^^^^^^^^ import traceback traceback.extract_stack()[-2][2] ^^^^
>>414 now.date() == today
事故れす
>>414 datetime型にdate()というメソッドがありました。
now.date() == today
これだけ。
419 :
デフォルトの名無しさん :2012/08/22(水) 18:57:32.37
パイソンはマジでオワコン 初心者は別の言語を習得することをオススメする PHP辺りがオススメだ 今からパイソンやるのは時間を無駄にするようなもんだ
saltだけでどうやってセキュリティ確保するんですか? リリース前にテストすらしてない馬鹿作者さん。
421 :
413 :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 ディクショナリの値にディクショナリを持たせたい場合、上のように一々ディクショナリを代入する必要があるのでしょうか? もっと効率のいい方法や、よく使うやり方などあれば教えていただけると助かります。
馬鹿には無理
も
firefox ってメモリリーク多すぎてたまらんな
>>413 Web系の話題なのでWebプログラミング板へどうぞ
CGIかなとは思うけど、どのフレームワーク/ライブラリ利用してるのか等、
環境を詳しく書かないとレス着き難いと思うよ。
>>421 のケースでは、一般的には collections.defaultdict が使えるけど、
CGIの話題だとしたら、標準ライブラリの cgi モジュールでもパラメータをリストで受けるのはサポートしてる。
>>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()で出力されるものと同じ文字列を取得したいのですがどうすればよいでしょうか
help(re) re.__doc__
なんやこれ?
pydoc.plain(pydoc.render_doc(obj, 'Help on %s:'))
すみません。横からですが、 どのように考えていくと正しい解答に辿りつけるのでしょう? 私も興味があったのでhelp(help)で調べると This is a wrapper around pydoc.help (with a twist). とありpydoc.pyのhelpメソッドが出てくる箇所を読んでいたのですが、 見当外れだったようです。 help(pydoc)でFUNCTIONSを読んで関係ありそうなものを見る…?? ものの調べ方が分からないというアホな質問ですが、ご教示いただけると幸いです。
OS X 10.8、python2.7.2の環境でtkinterのEntryを使っているのですが、日本語入力が出来ません。 コピペすれば日本語をEntryのテキストボックスに入れることが出来るのですが、 どうやってキーボードから日本語を入力するのでしょうか。
ファイルの読み込みに関する質問です。 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の文字列の前に不要なものがついてしまいました。 これはなぜでしょうか。
434 :
433 :2012/08/24(金) 16:24:24.72
インデントがおかしくなりました コード最終行の print testdict1 はforループ外です
>>433 エディタでBOMなしのUTF-8で保存するように設定して
UTF-8NとかUTF-8(BOMなし)みたいに名前が付いてると思う
なお"\xef\xbb\xbf" はこのファイルはUTF-8ですよっていう印(UTF-8 BOM)
でもこういう問題が起こるから大抵は使わないほうがいい
別に変な質問じゃないだろ
つかutf-8は規格上は無いんだけどな どこかの技術力が足りない毎月パッチ出してる企業の人間がやり始めたんで迷惑極まりない
規格上はBOMは無い、ね 少し抜けた
馬鹿には無理
>>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はこういう便利なことに対してきちんと誘導しているよ。
初心者用の説明をきちんと読みましょう。
>>439 > どこかの技術力が足りない毎月パッチ出してる企業
それなりのソフト売ってる大抵の企業に当てはまりそうだ (w
>>430 ありがとうございました。無事取得できました。
>>435 返事が遅くなり申し訳ありません
BOM無しで保存すると、正常に動作するようになりました。
文字コードや使われ方について再度勉強しなおします。有難うございました。
馬鹿にとってはBOMB
.. ''';;';';;'';;;,., おっぱい!おっぱい! ''';;';'';';''';;'';;;,., おっぱい!おっぱい! ;;''';;';'';';';;;'';;'';;; ;;'';';';;'';;';'';';';;;'';;'';;; _ 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,ノ _______________________________
おっぱい! おっぱい! おっぱい おっぱい! おっぱい! おっぱい! ∩ ∩ ノ) おっぱい! おっぱい! 川 ∩ 川彡'三つ おっぱい! おっぱい! ⊂ミ∩、⊂ミ∩彡⊃ おっぱい! おっぱい!⊂三ミ( ゚∀゚)彡三彡三⊃ おっぱい! おっぱい! ⊂彡川⊂彡川ミ⊃ おっぱい! おっぱい!⊂彡川∪⊃ U川彡⊃ おっぱい! おっぱい! (ノ ∪ 川 ∪ミ) おっぱい! おっぱい! ∪ おっぱい! おっぱい! おっぱい! おっぱい! おっぱい! おっぱい!
...┏┓ .┏┓┏┓┏━┓ ┏┓ ┏┓ ┏┓┏┓┏━┓ ..┏┓ __ i⌒i ┏┛┗┓ ┃┣┛┗┫□┣┓ ┃┃ ┏┛┗┓ ┃┣┛┗┫□┣┓ .┃┃ ./ O Oヽ | ┗┓┏╋┳━━┫┣┓┏┻━┫┃ ┏┓┃┃ ┗┓┏╋┳━━┫┣┓┏┻━┫┃ ┏┓┃┃ 〈 |―/ | ノノ┏┛┗┻╋━┓┃┣┛┗┓ ┃┃ ┃┃┗┛ ┏┛┗┻╋━┓┃┣┛┗┓ ┃┃ ┃┃┗┛ ヽ. V ノ ...┃┃┏┓┃┏┛┃┃□┏┛ ┃┗┓┗┛┏┓ ┃┃┏┓┃┏┛┃┃□┏┛ ┃┗┓┗┛┏┓ ( ̄ ̄ ノノ ┗━┛┗┛┗━┻┻━┛ ┗━┛ ┗┛ ┗━┛┗┛┗━┻┻━┛ ...┗━┛ ┗┛
multiprocessingでプロセス間で状態を共有したいのですが managerで作ったオブジェクトを可変にすることってできますか? 例えば l = manager.list([0])とつくってたものを 他のプロセスで、状況に応じて l = [[1,1],[2,2]] みたいにしたいのですが
455 :
452 :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]にならない理由がわからないのですが どうすればいいのでしょうか
class Shape(object): pass shape1 = Shape() shape2 = Shape() shape1.position = 1 shape2.position = 2 の状態で shape1やshape2またpositionという名前を(一括)取得する方法はないのでしょうか? あれば教えて下さい。
その「名前」を使って実際にどういうコードが書きたいのか示してみてくれ
>>455 while の所、 self.l[:] = [2] じゃない?
Pythonのfor文のinは、比較演算子のinと何か関係があるのでしょうか。演算子のオーバーロードなのか、疑問です。教えてください。よろしくお願いします。
for文の奴はステートメントの一部であって演算子でもオーバーロードでもない x in sequenceは演算子
462 :
デフォルトの名無しさん :2012/09/02(日) 16:24:43.20
ライブラリの見方で質問があります。 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) ってあった場合、hostとtimeoutを指定したい時はどう書くのですか? server = smtplib.SMTP("localhost", 120)とかしたら120がポートかなにかわからないですよね?
キーワード引数
蛇足ぎみだけど念のため SMTP("localhost", 120) # hostは"localhost", portが120 SMTP("localhost", timeout=120) # hostは"localhost", timeoutが120
465 :
デフォルトの名無しさん :2012/09/02(日) 23:50:29.20
ユニットテスト内でHTML5のバリデーションしたいんだけど、どうするのがベスト?
newf = x.index('e', f) list型の変数xでインデックスを取得する場合、 こうやって引数を二つ指定するとどうなるのでしょうか
>>466 マニュアル読もう
index(...)
S.index(sub [,start [,end]]) -> int
というわけでstartが探索の開始位置でendが終了位置
例えば "abcabcabc".index("c", 3) は 5 を返す
>>458 ありがとうございます!
l[:]にしたらできました
ところで
l =xとl[:]=xは何が違うんでしょうか?
>>468 それぞれのパターンでリストを変更してみれば分かる
>>470 >>> l = [1,2,3]
>>> l[:] = [2]
>>> l
[2]
>>> l = [1,2,3]
>>> l = [2]
>>> l
[2]
で変わらないと思ったのですが
それともmultiprocessingでの話でしょうか
変数の共有の話? >>> a = [1,2,3] >>> b = a >>> a[:] = [2] >>> a, b ([2], [2]) >>> a = [1,2,3] >>> b = [2] >>> a [1, 2, 3]
>>472 >>473 ありがとうございます
l[:]だと同じアドレスを指してくれるんですね
勉強になりました
476 :
デフォルトの名無しさん :2012/09/06(木) 08:32:46.57
Pythonを勉強していて不明なことがあり質問させて頂きます。 現在日記帳のような、テキストを保存していくプログラムの制作をしています。 データの保存形式をSQLiteのようなRDBで行うか、ShelveやPickleのようなPythonオブジェクトで行うか、CSVのようなテキストで行うか悩んだ結果、現在はShelvで行うようにしました。 そこで疑問なのですが、現在は1日に1件追加するかどうかなので、Shelveのファイル容量も大きくないので気にならないのですが、ShelveやPickleのようなPythonオブジェクトとして保存する場合は、プログラムでのロード時に全てメモリに読み込まれるのでしょうか?
馬鹿には無理
>>476 pickleはその通り。
shelveでは、バックエンドで選択されるdbmとプログラムの組み方次第。
データ取り出しは1件毎だけど、一旦読み込まれたデータはキャッシュされるので、
例えば、常駐型のプログラムでshelve.openしたまま開きっぱなしの様な使い方をすると、利用メモリは増加するはず。
wxpythonについて教えてください xrcで作ったダイアログの、あるコントロールの前にpythonから画像を追加したいのですが、どうやればいいでしょうか? xrcにあるtextCtrlやpanelは取得出来ています sizerが取得出来なくて、panelにはAddが無いしで困っています 的外れな質問だったらすみません
日本語で
馬鹿には無理
>>481 レスありがとうございます
まだ出来てません…
出来たらまた報告に来ます
ありがとうございました
>>412 ありがとうございます
やってみましたが、残念なことに実行速度は変わらなかったというか、微妙に遅くなった気がします
Python2.7で from test import pystone print pystone.pystones() という中身のhoge.pyをコマンドプロンプトで実行すると >python hoge.py (1.9339092849094406, 25854.36679484237) Pydevで実行すると (0.9808881658798508, 50974.210658511) となります。ロースペックなのは置いといて、2倍くらい差が出るのはなぜでしょうか
Pydevの方のコマンドラインは?
設定したのはPythonインタープリタだけですが…
お前が設定したのがインタプリタだけでも IDEは気の利いたオプション付けて実行してくれたりするんだよ そこをまず確認しろ
デフォルトですよ。どんなオプションが付けられてるんですか
話にならねえな
オプションは、どこで確認出来るんですか
デフォルトなんだろ そのまま死ね
実に、不快だ
デフォルトでは、オプションは付けられてないんですか? 2倍くらい差が出るのはなぜですか?
何怒ってんだよ pdbのせいだったりしない?
私の声がデムパになって 波になってあなたへ向かってく 私の歌がデムパになって 波になってあなたへ響いてく 私の愛がデムパになって 波になってあなたへ届いてく 私の電子回路が短絡する前に Electric LOVE Electric LOVE (∩ ゚д゚) アーアー この気持ちあなたに届くかな
djangoの質問もここでいいと信じてる アプリケーションを機能ごとに分割するのはわかる アプリケーションのディレクトリ内にmodels.py views,pyとかがあるわけだが 例えばWebAPIのラッパークラスを作るとき、models.pyに書くのが正しいのか?新しい.pyファイルを作ってしまうのが正しい? そもそもviews.pyなんて不要なんだからアプリケーションにするのが間違ってるのか
新しい.pyファイルを作ってmodels.pyからimport
┌──────────────────┐ | | │ _ ∩ | │ ( ゚∀゚)彡 おっぱい! | │ ( ⊂彡 おっぱい! .| │ | | | │ し ⌒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 * をするとちゃんと通ります。 原因がわかる方がいましたら、教えてください。
>501 SciPyはよく分からないけど、 前者の「実行」と後者の「対話型インタプリタ」は、それぞれどう起動したの? Pythonの環境が2つ入っているかも。 前者をファイルのダブルクリックで起動してるようなら、ファイルの関連付け確認。(CygwinやMinGWのシェルから起動してるなら、ファイル先頭行の#!の指定を確認) 後者を、単純にコマンドプロンプトからの>pythonで起動してるのでなければ、SciPyのインストール時に何か設定が入ったのかもしれない
馬鹿には無理
504 :
500 :2012/09/12(水) 10:32:41.37
>>500 の挙動ってたぶん、Pythonの仕様なんですよね?
けどインポートディレクトリ直下のディレクトリ(
>>500 ではmy)が同名っていうのは
それほど特別ではないと思うけど、どうなんでしょうか。
Pythonではなく、こちらの配置かなにか問題があるのかな?
./mylib/__init__.py
>>501 >>> import sys
>>> print('\n'.join(sys.path))
>>> sys.modules['scipy']
とやって実行結果の違いを比べるよろし。
507 :
500 :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
508 :
501 :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
が出て、問題に気づけました。
ありがとうございます。
thread つくって、戻り値をちゃんと受け取るコードの書き方教えて。 分かりづらいかもしれないけど、下のような感じで。 th = thread(function=hoge) th.start() while not th.end(): time.sleep(1) result = th.result()
馬鹿には無理
自虐はやめろ
thread つくって while not th.end(): time.sleep(1) とか あほやろ
どう見てもサンプルだから time.sleep(1) なんだろ。
>>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()がある。
つ Queue
クェゥェ
エキPyで、マルチスレッディングの話があったけど、あの部分はちょっと分からなかったな 確かにQueueの話も出てきた気がするけど
519 :
デフォルトの名無しさん :2012/09/14(金) 20:11:08.93
Pythonスタートブックの後には何を読めばいいですか?
>>519 読まずにプログラムを書き始めたほうがいい
実際に書いてみてわからないことが出てきたら何読めばいいですかって質問して
521 :
デフォルトの名無しさん :2012/09/15(土) 11:46:38.42
python って単一のバイナリーオブジェクトみたいのものって作れませんか スタティックリンクした C のバイナリ見たくライブラリ全部くっついてる感じ
>>521 .pyc/.pyo の事だったら .zip や .egg に纏めることが出来るよ。
実行ファイルだとしたら、外部ツールの領分。もしくは自分で実行ファイル作ってリソースを埋め込む。
一応作れるけど、ライブラリの構成によっては簡単には出来ないものもある。
.pyoがあるなら、.piyo.piyo なんてのもありますか?
>>522 ありがとう, 調べてみる
組み込み装置相手だと標準ライブラリ展開できないのが辛い
つか, 考えてみたら ldd みたく, 「このライブラリに依存しているよ」
情報を教えてくれるアプリでもいいのか
UPX
組み込み装置って言われると途端に怪しい スタンドアローン環境でとか言われると困る
py2exeとかのこと?
py2exeは1個にはならんのじゃないか ライブラリ名.zipの中にpyc固められるし
>>529 オプションで1個 (zipped) できる
PyCon JP 2012そこそこ盛り上がってるみたい
具体的には?
2日分の飯+おやつ+Tシャツつきで3千円はよかった 余った飯も貰って2人分食べた 講演はけっこう寝てましたすんまそんw
何しに行ったんだって感じだな 断ってよかった
まあでも品川だしな Rubyみたいに松江とかでされてもコマル
pyglet の質問していい?
原発銀座松江の空中放射線量はどれくらいあるんだ
>>536 どうぞー。ちなみに自分は使ってないからたぶん答えられない
(3, 9) + (4, 4) で、 (7, 13) を期待しているのですが、 (3, 9, 4, 4) になってしまいます。 正しくはどう書けば良いですか?
map(sum, zip(a, b)) とは書けるけど、 そういう演算がいっぱいあるならNumPyつかった方がいい。
!=と<>と、どっちがいつから廃止になったんだっけ? こんなところまでダイエットするとかすげえな、と聞いた当時思った
pythonのコードで<>なんて見たことないけど
numpy形式の配列をたくさん生成しているのですが,以前と同じものがあった場合は除去したいです 普通ならsetに追加していけばいいと思うのですが,numpyの配列はsetにいれることができませんでした. listに追加していき, in listで評価していってもいいのですが,とても遅くなってしまいます. なにかいい方法ありませんか?
numpy.unique
545 :
544 :2012/09/16(日) 23:57:52.09
そういう質問なの?
すいません 質問の仕方が悪かったです. やりたいことはこんな感じです numpySet = set() numpyList = [] while 1: a = numpy.array([random.randint(1,999)]) if not(a in numpySet): numpyList.append(a)
>>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)
こっちの方がいいかな? 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))
TypeError: unhashable type: 'numpy.ndarray' ____ / \ / _ノ ヽ、_ \ / o゚⌒ ⌒゚o \ ごめんね、ごめんね、ごめんね | (__人__) | いつもいつも迷惑かけて \ ` ⌒´ / ごめんね、ごめんね、ごめんね。 ____ /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ もう謝ったから気にしないお! | |r┬-| | \ `ー'´ / sqlite3使うのかなー、と思ったり。
>>550 ありがとうございます
numpyもtuple形式にするとsetとかdictに入れられたのですが
x in dicのように比較するとUse a.any() or a.all()と怒られます
== のような比較ならnumpy.all(x == a)でできますが,inのときはどうすればいいでしょう?
同じ数字を選んじゃうかもしれない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に保存したいと思ってます
>>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)
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 とかに変換して渡してもだめでした
訂正 LP_C_ubyte でした すみません
LP_c_ubyte は ctypes.c_char_p じゃなくて ctypes.c_ubyte の方らしいけど。
それがどうかしましたか?
すべてはわたしがつくったモノなのです とか続けたくなる
hoge = (ctypes.c_ubyte * size)() glBitmap(p1, p2, p3, p4, p5, p6, hoge) で逝けるみたいだけど?
>>563 bmplen = (width / 8) * height
bmpdata = (ctypes.c_ubyte * bmplen)(*([255] * bmplen))
glBitmap(w, h, w / 2, h / 2, 0.0, 0.0, bmpdata)
で上手く逝きました
ほんとうにありがとうございました
PyPyくっそ速いなー
私が学長です。
>>556 ここが通らなくて詰んだわ。
def test_simple_rule(self):
self.assertEquals(str(SimpleBars(" i ").next()), " iTi ")
'i ' と 'i' の優先度は左が高いんだから、'T'に変換できないでしょ。
あとね、hintってhintじゃないし。
条件じゃない。知らなかったら絶対解けない。
条件を知っても解けない。出題者出てこい。
ヒント1 付せんには next() での変更のルールの分析結果がメモされているみたい。 ええっと、上の付せんは、iTi という並びがあると真ん中の文字が i になる、ということを示しているのかな? 下の付せんについては、同じ行のルールは左のほうが優先度高いんだ、ってメモした本人が言ってた。 ここの読み解き方が分からんよ、分からん。
>>556 人によって問題違うン?sys.argv[1] とか渡されないと分からん
print の結果を答えるんじゃないんかね
m を入力して次の問題に池ってことか
>>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)])
こんなのでしょ?
同じだと思うよ。
*[int(i) for i in (sys.argv[1], 17, 3569, 915)] この文法わからんちん どっか解説してるサイト無い? for i in (sys.argv[1], 17, 3569, 915) これはリストから変数iとして取り出す、分かる forの前についてるint(i)ってなんぞ? *[]はなんぞ?
[for ...] はリストの内包表記。*は関数に渡すときにリストやタプルが展開される。 Python のチュートリアル見ればおk 二番mんd
lets_take_tea_break(int(sys.argv[1]), int(17), int(3569), int(915)) をややこしく書いただけってこと?
3次元のvertexを X軸で-π/4回転してからY軸で-π/4回転した場合と Y軸で-π/4回転してからX軸で-π/4回転した場合とで 同じ場所になりますか? またこれらで与えられる角度が変わった場合でも X-Y軸の回転順序が違っても常に同じことが期待出来ますか? あとZ軸が加わった場合でも同じですか?
>>574 の用途なら
lets_take_tea_break(*map(int, (sys.argv[1], 17, 3569, 915)))
でいいんじゃないかな
>>575 結果は一緒にはならないけど、python関係なくね?
ヒント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が曲者で困ってござる。
class SimpleBars(list): def __str__(self): return "".join(self) str(simplebarsTest)が文字列で帰ってこない・・・ わけわからん
お前頭おかしいんじゃねぇ?
SPOJもpythonのコードが受け付けられるが、そういうのをいちいち質問するのはウザがられる パズルを解けという依頼は他所でやった方が良い アルゴリズムの実装においてpythonのことで分からないことがあればそこだけ質問しろ
SimpleBarsの出力が画像とか任天堂のボケナスっぷりに失笑 やってられるか
解けなくて困ってるんだお。。。 どうやって解いたらいいんだお。。。
悪い。俺は困ってない。
俺様が困っていると言っているんだ。 お前が困っていようと、いまいと関係ない。 どうやって解いたらいいんだお。。。
ヒント: htmlのソースを表示
仕方が無いからこのアホをあらぬ方向に誘導して遊ぶか
>>579 子供は帰れよ
自分のテストを他人の力で突破してなんになる
自己満足できる
スクリプトキディ的な考え方で…
pass
ここまで原典どおりで純正な厨房って久々だなー
意図してやったからな いまいち盛り上がらないでやんの
はい後釣り貰いましたー^^
速度気にするならtea(int(sys.argv[1]), 1, 2, 3)でいい
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
時間の無駄以外の何物でもないな
>>> 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 何がいけないんでしょう?><
print '%d,%d,%d' % tuple(a)
ありです!
ネタやってる奴は訓練されたuy 任天堂がPython使ったことに嫉妬して暴れ出した。
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する方法を教えて下さい。
見るだけでアホらしいデータと感じるので嫌です まだvalXと対応するdictが纏まってればいいけど 一緒にリストに突っ込んでるなんて醜い醜い醜い プログラマに全角半角入り混じった文章を見せ続けると死ぬに近い不快感
アルゴリズムを考える前にクレイジーなデータ構造を何とかしろよ…
L=[ ('val1', { '1a': 1, '1b': 1, '1g':0 }), ('val2', { '1c': 1, '1d': 2}), ('val3', { '1e': 1, '1f': 3})] せめてこうだったらな
脳みそが爆発した
仮に609なら若干無駄はあるが1行で済む L.sort(lambda x,y:sum(y[1].values())-sum(x[1].values()))
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}} のつもりだったんじゃないのかな
失敗から学ぶのが技術者 失敗したら他人のせいにするのが経営者 失敗しても安全と言い張るのが御用学者 失敗しても気にしないのが東電 失敗したらデータを捏造するのが韓国人 失敗したら隠すのが中国人 失敗したらもみ消すのが警察 失敗したら有耶無耶にするのが官僚 失敗したらルールを変えるのが政治家 失敗したら喜ぶのがマスゴミ
そして失敗しない俺
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) 初期化ルーチンの実行に失敗しました。
x86
>>618 > Visual Studio9.0 x86
Python3.3から32bit版では使えなくなったの?
だいぶ前にpython2.xで使おうとしたら挙動がおかしかったからPydev使ってるけど 今はまともになったの?
なにを?
突然すいません。 PythonMagickでアニメーションGIFのフレーム毎の処理を行う場合、PILでいうseek()のようなのって無いんでしょうか?
>>624 Pydevって言ってんだから文脈からvisual studioのpython開発プラグインって気づけよ
分かるわけねぇw
無茶言うなワロタ
脈…?
Python Tools for Visual Studioの存在を知らない人が殆どだから仕方ないか
いや、使ってるけどこの発想は無理
じゃあ質問に答えろよ
開発環境つってもいろいろあるからなー
Visual Studioの話題が出たから質問しただけだが
ここで画像処理の質問は畑違いか、、
PythonMagick全然更新されてないから使う気にならなかったんだ ごめんねー
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だけエラーが起こります
>>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の方がまだましだわ。
pythonを使ったことない人は皆そう言うが、その批判には何の意味もない
644 :
デフォルトの名無しさん :2012/09/21(金) 22:07:00.24
645 :
デフォルトの名無しさん :2012/09/21(金) 22:07:25.73
elseじゃなくてelifかよ! 紛らわしい…
>>642 > pythonってニシキヘビだろ?
しばしばそのような指摘がなされますが、pythonの成り立ちと実在の蛇とはまったく関係がありません
elifとelseは違うだろ
else if, elif, elseif, elsif
SPAMでも食っとけ
SPAMが入ってないのは!?(グレアム)
switch無いのに突っ込む人はあまりいない
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' どなたか解決策、または原因のみでもわかる方いませんか よろしくおねがいします
つ ValueError: invalid literal for int() with base 10: '-n'
654 :
652 :2012/09/22(土) 15:42:29.93
あ、すいませんバージョンをいい忘れました 2.73(32bit)を使ってます
655 :
652 :2012/09/22(土) 15:52:38.27
ちなみにシェルスクリプトではなく ファイルを読み込んでから「run module」でやると実行はできるのですが C+z C+cでも固まってしまって、×を押しても終了できなくなります
PyShellを使わずに端末からpython起動して同じことをやったらどうなる?
657 :
652 :2012/09/22(土) 16:02:53.67
>>656 端末からだと大丈夫でした
C+cで無事終了できました
原因はPyShellなんでしょうか
>>657 Pythonを起動してる環境が多分悪さしてる
どんな環境から実行してるのか詳しく書いてくれれば原因がわかるかも
(IDLEとかEclipseとかPyScripterとか)
659 :
652 :2012/09/22(土) 16:26:51.60
>>658 IDLE(Python 2.7版)と書いてあります。
OSはUbuntu(Linux) 12.04です
Pythonのバージョンは2.73です
>>659 idleの起動引数に"-n"が入ってるんじゃないか
idleを起動したら
>>> import sys
>>> sys.argv
ってやってみて
とりあえず今回はidle使わないのが手っ取り早いと思う
PythonShellとか使いにくいだけだからIPython使っとけってことだな
>>660 !!
ほんとに-nが入ってました。
['/usr/bin/idle-python2.7', '-n']
これってどういう意味なんでしょうか
私は変な設定とかした覚えはないんですが
>>660 >>661 idleはあまりよくないんですね
わかりました
別のやつを探してみます
lpythonというのから調べてみます
663 :
652 :2012/09/22(土) 17:02:52.24
あ、
>>662 は私です
WindowsのIDLE(Python 2.7版)
Linuxの「端末」上
それぞれで import sys ///sys.argv をやってみたところ
両方共
['']
という結果でした
やはりUbunt上のIDLEだけ特殊な設定になっているみたいですね
664 :
652 :2012/09/22(土) 17:04:07.14
おかげで助かりました 皆さん本当にありがとうございました
Ubuntuのパッケージャが気を利かせてidle -nとかしてるんだろう less /usr/bin/idle-python2.7 とかして中身を見てみるといいよ ライブラリ書く人はif __name__ == '__main__': _test() とかして ユーザが直接 _test() を呼ばないようにしといたほうがいいのかもと思った
AptanaとPython2.7の環境で、定期的にwebにアクセスして情報を引っ張ってくるプログラムを書きました。 しかし、どうも特定のページではキャッシュにアクセスしているようです。 そのページが更新されているのに、更新前のページソースが帰ってきます。 このような場合、どう対処すればよいのでしょうか。 よろしくお願いします Pythonのコードは、単純に urllib.urlopen(page_name) としているだけです。
667 :
666 :2012/09/22(土) 23:13:58.47
申し訳ありません。 追記となりましたが、Proxyサーバーを経由しています。 調べたところ、その影響があるかもしれません。
If-Modified-Since: Thu, 01 Jun 1970 00:00:00 GMT
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'ε'] と表示されるようにしたいのですが、 どのような方法がスマートでしょうか? 例はεまでですが、それ以降のギリシャ文字もあると看做してください。
print repr(sorted(abc.values())).decode('unicode-escape')
すみません、訂正です。 >>> 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'ε')] で、おながいします。
>>672 さん、ありがとうございます。
行き違いになってしまいました。すみません。
>>673 で引き続きおながいします。
>>> 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'ε')]
こっちの方が良いかな >>> 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'ε')]
sorted(abc.items(), key=lambda x: x[1])
678 :
デフォルトの名無しさん :2012/09/24(月) 11:52:32.49
yahooから株価情報を取得したいのですが、 いろいろ調べているとBeautifulsoupというモジュールが良さそうなのですが、 他に良いモジュールなどありますでしょうか?
itemgetterが組み込み関数じゃない理由が分からないが それを読んだ人が何やってるか分からないからだろうな
decode使っての文字コードの変換って文字列が長かったりしたら失敗する?
実装によってはなるかも知れんが、生憎俺は遭遇したことがない
ループでデコードしまくったら、文字化けしたことがあるな for val in list: print val.decode('shift_jis') みたいにしたら、時々文字化けするっていう Aptana、Python2.7
686 :
679 :2012/09/25(火) 23:01:09.75
>>680 教えていただいてありがとうございます。
よさそうですね。参考にさせていただきます。
リストに入った文字列をすべてテキストに保存したいのですが b = '' for line in listA: b += line + '\n' というように取りだしてから保存しようとすると,40万件くらいのデータだとbに入れる時点ですごく遅くなってしまいます. なにか他にいい方法ありませんか?
'\n'.join(listA)
with open(..., "w") as f: f.writelines("\n".join(listA)) with open(..., "w") as f: for line in listA: f.write(line + "\n") どっちが早いかな。下と予想してみる
一度、長大な文字列作成してからdiskに書き込むよりも、 いきなりdiskに書き込んでいった方が高速なのか。 そうかそうか、一度、長大な文字列作成する必要ないもんね。 勉強になった。ありがとう。
>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()で実行しています。 特にエラーも出ておりません。 自分なりに調べてみたのですが、わかりませんでした。 どなたか原因が分かる方いたらご教授ください。
追記 test.pyというCGIファイルはindex.htmlと同じフォルダに作った cgi-binというフォルダに入っています
申し訳ありません 自己解決しました 知人にアクセスしてもらっところ、CGIが表示できました。 どうやら最初にミスした時のキャッシュファイル(?)がずっと残っていたみたいです お騒がせしました
自己解決はいいけど、キャッシュしないように設定したりはしないの?
py2pl トランスレータ、誰か作って。
何で敵将に献上しなきゃいけないんだ。 むしろお前がpl2py作れ。 もちろんPython3に変換してくれるんだろうな。
正論 個人的には過去の豚真珠プログラムは蛇に置き換えたのでどうでもいい
700 :
デフォルトの名無しさん :2012/09/30(日) 12:19:51.60
疑問なのですが、どうしてPythonの文字数や配列数はlen()関数で数えるのでしょうか? Javascriptなどのように、.lengthプロパティではない理由はあるのでしょうか? スライスのことを考えると、内部的に数を持っているかと思うので.lengthのほうがスムーズかと思うのですが。
.__len__()
あるよ 歴史的経緯だとどこかに書いてあったはず
>>700 max(map(len, xs))
max(x.__len__() for x in xs)
鏡音レングス
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
出力はlistなの
出力はarrayがいいです import numpy as np print np.array(map(lambda x: x, np.array(['P'*20]))) 出力:['PPPPPPPPPPPPPPPPPPPP'] こうしてみたら動作は期待通りなんですが、なんか釈然としないというか…numpyを使った意味が無いような…
ざっと言語仕様を見てみたところ、 Cの構造体に相当する機能がないようですが レコードをフィールドに区切って扱う概念がないと つらくないですか?
名前付きタプル
普通にクラス使っても良い
Python Tools for Visual Studio使っている人いますか? 例えばiを何も定義せずに print i などとしたときに、実行するまで未定義なのかわからずに困っています なにか設定が必要なのでしょうか?
>>714 exec raw_input()
print i
みたいなコードがあったら
i が未定義かどうか実行するまでわからない。
if some_func(): i = 0 print i の方がわかりやすいかも
それはバグだよw
ともかくPydevでは教えてくれるような
>>714 のようなエラーを
VSが教えてくれないから困っているという話だろう
>>716 はまた別の話。俺はVSのそれを使ったことがないから質問には答えられないが
lint しても無駄 実行してみないと判らないことはいくらでもある
だからー、今回の質問者の問題は分かるんだって
722 :
714 :2012/10/04(木) 10:33:56.00
皆様ありがとうございます pydevでは実行しなくても'Undefined variable'と警告してくれるので Python Tools for Visual Studioでも教えてくれないのかなぁと思っていました どうやらPTVSでは教えてくれなそうなので、しばらくはpydevの方を使っていようと思います
馬鹿には無理
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'
無視したらいけました。」
>>> 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') '繕噺馬重'
韓国語(euc-kr ?)っぽいね。ブラウザでwhois引いても文字化けしてた。
>>> '\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5'.decode('euc-kr') u'\uc870\ud68c\ud558\uc2e0'
조회하신
猥褻用語か
「照会されたIPv4アドレスは、韓国インターネット振興院から下の管理代行者に割り当てられており、割り当て情報は、次のとおりです。」 と書いてある。
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}
HTMLParser を使って HTML 内の文字列を取り出すスクリプトを作っています。 feed() で読み込ませ、目的の文字列を取り出し終えたら、残りはもう見る必要ないので そこで中断させたいのですが、どうしたらいいんでしょうか? Python3.3です。
>>733 feedの後に目的の文字が見付かったかどうかをチェックし、
見付かってたらfeedで読み込みしてるループを抜ける。
あんまり綺麗じゃないけどdef handle_*の中で例外投げるとか iterparse()のあるlxmlを使ったほうが直感的でいいかも
736 :
733 :2012/10/06(土) 09:21:43.01
>>734 feed() を呼んだ時、HTMLParserインスタンスの処理が終わる前にfeed()の後のコードが
実行されるという事ですか?
>>735 大したスクリプトじゃないんで外部モジュール使うのもどうかなと思っていたのですが、
ちょっと勉強してみます。
レスありがとうございました。
例外投げるのが綺麗じゃないと思う理由を知りたい
言語によってはフロー制御に例外使うのをアンチパターンとしているからかな 俺は733じゃないのであくまで想像だが
>>737 パーサにparser.stop()みたいなメソッドがあればそっち使いたいのが一点
あとStopIterationみたいにfor文で暗黙的に例外が処理されるならともかく
今回のはパーサ作ってfeed()する側が明示的に例外を処理しなきゃいけないのがもう一点
740 :
デフォルトの名無しさん :2012/10/06(土) 15:46:49.80
>>738 漏れは733じゃなくて735に聞いたのに何でおまえが答えてんの?
>738 >言語によってはフロー制御に例外使うのをアンチパターン どの言語のことでしょう
pass
インタプリタじゃない言語の類でしょ C++/C#/Javaとか 理由としては、上記の言語では例外のコストが通常の制御に比べて高すぎるので 例外的状態にだけ例外を使用する(=予測可能なエラーに対して例外を使用しない)という了解がある 軽量言語でも例外のコストは通常の制御より高いが、 上記の言語に比べれば大したことがないので許される まあ一言で言えば「Pythonには関係ない」よ
Java の parseInt はその主張と矛盾すると思うのですが
EffectiveXXXや達人プログラマー、CodeCompleteなどの いわゆる良書と言われる本には必ず(大抵ではない)書いてあることなので 興味があるなら読んでみてもいいかもね
いやJavaは例外投げまくりでしょ
>>745 その通りです
上記の本を読んだ人が真っ先に考えるのはそのメソッドの存在でしょう
EffectiveJavaの中でも無駄に例外を投げているJDKの設計について、一部苦言が呈されています
要するに、Javaの開発者がアホだったのです
Javaは糞 はいおしまい
へぇーC#はTryParseあるのにJavaは無いんだ
スレチだと伸びるな
exit(1)
insert(角電池)
例外処理をリスト内包表記で作っていく辞書の値について行いたいのですが、 三項演算子みたいに1行でやることはできますか? 具体的には[{ 'foo': ? } for x in bar]の?の部分で, 例外が発生するかしないかでfooの値を変えたいです。
出来ないし、なんでも一行でやろうとするな
スマァァァァトに書きたいんですぅぅぅぅぅ ワンライナーはとてもSmaaaat!!!!!((c) MOTHER2・任天堂・糸井重里)だと思うんですぅぅぅぅ
それはコーダーの自己満足だろ
こうですか? def proc(x): try: return hogehoge(x) except (Hoge, Hage), e: return fugafuga(x) [setattr(jisho, 'foo', proc(x)) for x in bar]
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()
まずインデントを直せ
sql = "insert into yahoo_jpn_price values" + str(tuple(val)) injectionですねわかります
val = [stock_code]って 既存の変数を[]で囲むことにどういう意味があるんだろ。 まさかCと同じで配列の先頭アドレスへの参照を代入しているのか。 Pythonは変数に型がないので、代入データの型を右辺から いちいち推測しないといけないのが面倒だね。
リストじゃねーの
リストリテラル以外に何があるというのか
馬鹿すぎて言葉がでない
なるほどリストかあ。 でも見慣れない処理だよね。 既存のリストでない変数をカッコで囲んでリスト化するのは。
え?
物を知らなすぎて笑えない
大人しく自分がマスターした言語だけ使ってろよ… 読んでて疲れるから
別に君らの疲れを癒すスレじゃないし Python初心者なんだから好きなこと言わせてもらうよ。 嫌なら出て行け。
>>764 はさあ、まずリストと配列の区別がついてないと思うんだよね
>>764 はこれまでリストリテラルの無い静的型言語、
例えばJavaのようなウンコ言語しか使った事が無いんだよ
馬鹿過ぎて簡単なPythonすら使いこなせないだろうけど、
生暖かく見守ってあげようじゃないか
>764 気になるなら val = [stock_code, ] で
[777] はリストになるけど (777) はタプルにならない不思議
タプルタプルした二の腕
(1 + 2) * 3 とかの式で第一項がタプルになったら困るでしょ? 実はタプルは括弧ではなくカンマで作られる(空タプル除く) 777,
いつまで初心者気取りなんプークスクス
初心者が超初心者を偉そうに叩くスレ に改名すべきだな
>>775 逆にいえば
pythonよりもはるかにムズい(もといめんどくさい)javaを
使えてたということか〜
jsonやらなにやらもあるんだから、元々何を使ってたかの前に見識が狭いだけやねん
えっ?
いや普通に日本語で言いたいこともよくわかる
JSONというと13日の金曜日だけど今月13日は
>>788 >>784 を
>>783 へのレスと考えるとたしかに日本語でおkになるわな
流れからすれば唐突にjsonなんてワードは出てこないはずだからな
jythonをjsonと間違えたと考えるのが妥当では?
ぜんぜん妥当じゃない。Jythonでは意味が通らない リスト(配列)リテラルがあって誰でも知ってるJSONだから意味が通る
↑なぜ必死?
無知がどこまで恥曝しつづけるか見物だね
Jythonが妥当!
誰でも知ってること知らねーの?だせえって 人小馬鹿にしといてよく言うよ
json知ってることを自慢したい消防が紛れ込んだ模様
>>799 いじられて悔しかったんでちゅねいい子いい子
801 :
760 :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)
に変更したいと思います。
それじゃ変わらんよ
803 :
801 :2012/10/07(日) 17:26:10.94
ネタですけど何か
SQLインジェクション知ってることを自慢したい消防が紛れ込んだ模様 なお間に合う模様
それがどうかしましたか?
807 :
760 :2012/10/07(日) 17:31:53.92
808 :
802 :2012/10/07(日) 17:33:47.67
>>807 知ったかぶりしただけだから対処法など知らんよ
>>806 さっきから粘着して下さっているのはあなたですか!?
>>807 そのページに書いてあるとおり %s じゃなくて ? を使う
811 :
809 :2012/10/07(日) 17:43:16.37
(他のデータ ベースモジュールでは変数の場所を示すのに"%s" や ":1" などの 異なった表記を用いることがあります。)
813 :
デフォルトの名無しさん :2012/10/07(日) 18:33:30.78
色々板を回ってみたが ID表示の無い板はゴミ
荒らせばID付くんじゃね?
10年荒らされてる板で何言ってるか分かってる?
816 :
デフォルトの名無しさん :2012/10/08(月) 01:26:12.96
テスト
★修学旅行、韓国から国内に変更…宮崎・日南高
日本と韓国の関係悪化を受けて、宮崎県立日南高は2年生27人が12月に予定していた韓国への
修学旅行を国内に変更した。
日南高によると、同校の修学旅行は韓国と国内の二つから選べることになっており、今年は2年生
170人のうち、143人が東京や群馬などの国内を選択。27人が同校の姉妹校・冠陽高があるソウル
などへの旅行を希望していた。
竹島問題などを巡って、日韓関係が悪化していることから、韓国への修学旅行について慎重に検討した
結果、「韓国の情勢が不透明で、生徒の安全などを考慮した」として、行き先を国内に一本化したという。
県内の別の高校も来年3月に計画している韓国への修学旅行について、変更を検討しているという。
http://www.yomiuri.co.jp/kyoiku/news/20121006-OYT8T00695.htm
>>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
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じゃなくてログイン画面が返ってくることがあるんだよね。 そういうの検出するにはどうすれば良い?
// / / バカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ 馬鹿には無理 / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
レスポンスの内容見て判断するっきゃないじゃないですか 他に判断要素ないんだし
結局そうなるなら * html = urllib2.urlopen(get_url).read() でも充分ですね
そう思うなら、そうじゃね。 好きにすればいいと思うよ。
レスポンスコードを・・・Pythonの話じゃなかったか
826 :
818 :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 でも同じことは出来ますか?
出来ないなら出来ないって率直に言った方が良いですよ
じゃあ出来る
831 :
818 :2012/10/08(月) 13:31:45.41
urlで読み込めるのは libxml2 側の機能なのでPythonから拡張するのは難しいよ。 掛かる手間を考えると良いアプローチだとは思えないので、 たいして調べてないけど、出来たとしてもコード量が増えるのは確実だと思う。 代案: res = urlopen(url) if res.geturl() == url: # != login_url にすべきかな。その辺は状況に応じて doc = lxml.html.parse(res)
何気に良スレ
クソスレ
ローマ数字を整数に変換して計算するモジュールを作成しました importしたときに予め0から1000までのローマ数字を使えるように モジュール内でインスタンス化させたいのですが Z = MyClass(0) I = MyClass(1) II = MyClass(2) … と書いていくと1000行以上のコードになってしまうため for i in range(1000): インスタンス名 = MyClass[i] というようにループなどで短くまとめたいのですが、何か方法はないでしょうか インスタンス名は >>> print(VII+III) >>> X というような処理をさせたいので、ローマ数字にしておく必要があります
数字→文字の変換ができてるなら下記を応用すればいける _module_self = sys.modules[__name__] setattr(_module_self, 'ローマ数字文字列', 数字)
Dive Into Python 3 にまんまおんなじ事するコード例あるよね。
839 :
838 :2012/10/08(月) 21:17:10.10
まちがえた。なかったことにしてくれ。
ツイッターじゃないから、そんなことは出来ない
<●><●>
>>836 globals()["I"] = MyClass(1) が多分一番手軽。(スコープに注意。top-levelなら locals() でも可。関数内なら globals())
他には {types.ModuleType でモジュールのインスタンスを作って 辞書を追加 (module.__dict__.update(mapping))という方法もある。
疑問があるのだけど I += II したりすると困らない?
>>837 ありがとうございます
なんとかなりそうです
>>842 すみません、リロードしていませんでした
単純な計算しかできないので
I+=IIというような処理はできないです
アドバイスありがとうございます
845 :
760 :2012/10/08(月) 22:56:39.81
>>818 遅くなりましたが、丁寧なアドバイスありがとうございます。
参考に修正させていただきます。
なかなか内包表記なんかは慣れませんが精進したいと思います。
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']
よく見るんだ↓ dictionary['shortcut'] = request.form.get('value')
848 :
デフォルトの名無しさん :2012/10/09(火) 16:27:09.88
関数の処理の結果を戻り値ではなく渡した引数に入れるメリットってなんでしょう? (とある3DソフトのAPIの設計がそんな感じでした)
849 :
846 :2012/10/09(火) 17:12:22.44
>>847 dictionary[str(shortcut)] = request.form.get('value')
ですね!わかりました!!ありがとうございます!!!
>>849 【審議中】
♪ ∧,, ∧ ♪
♪ ∧,, ∧ ・ω・)
∧,, ∧ ・ω・) )
♪∧,, ∧ ・ω・) )っ__フ ♪ ∧,, ∧
∧,, ∧ ・ω・) )っ__フ(_/ 彡 .∧,, ∧ )
( ・ω・) )っ__フ(_/彡 ∧,, ∧ ) )
(っ )っ__フ(_/彡 .∧,, ∧ ) ) Οノ
( __フ(_/彡 ∧,, ∧ ) ) Οノ ヽ_)
(_/彡 ( ) ) Οノ 'ヽ_)
( ) Οノ 'ヽ_)
(ゝ. Οノ 'ヽ_) ♪
♪ ミ ヽ_
>>848 CでもJavaでもそんなのはごく当たり前に行われてるだろ
副作用恐怖症の関数言語馬鹿なのか?
>>844 定数にしたくなるんじゃないかなと思ったけど、杞憂だったみたいですね。
追記: 数字 -> 文字 を MyClass の __str__ に実装してれば、辞書内包で一括登録できそうです。
globals().update({str(x):x for x in map(MyClass,range(1000))})
# ※ モジュールのトップレベルで実行する場合、2.x では内包表記の一時変数が外に残ることに注意。
>>848 内部で使ってると思われるC言語のライブラリに合わせてるんじゃないかな。(予想)
成否判定を戻り値にしてデータは引数で与えたアドレスに渡して貰うという仕様のAPIは多い。
例外をサポートしてて多値も返せるPythonでは、メリットは思い当たらない。
今日もようやく脱超初心者したばかりの初心者が煽ってるな
>>853 いいんじゃないかな。
そうやって成長していけば。
おかしいところがあればあなたが指摘してあげて。
そうすることであなたも成長できるのだから。
うぜえ消えろ
856 :
848 :2012/10/10(水) 02:20:27.25
>>852 その通りでした
C++のAPIに合わせようとして色々無理が生じてきているので
最新版でPythonらしいAPIを新たに作っているとありました
>>855 怒らないで
そうすることであなたも成長できるのだから
黙れチョン工作員
pass
p
本はともかく公式のドキュメントに目を通さないのは大間違い
そうすることであなたも成長できるのだから
utf-8で流れてくるバイナリストリームデータを、cp932に変換するにはどうしたらいいですか? codecsモジュールを使うらしいまではわかったんですが。。。 Python2.7です。
// / / バカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ 馬鹿には無理 / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
>>863 凝ったことする必要がなければ
cp932buf = u8buf.decode('utf-8').encode('cp932')
>>865 unicodeやstrではなく、ストリームデータを扱っています。
>>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が期待できます。
868 :
867 :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バイトしか届いていないときはどうしますか?
>869 行読み込みやバッファ用意して処理する。 そういった理由だったら納得。何か特殊なデータ型かと思った。ストリームの中身のデータの型はstr だよね? codecs 使えば、内部の IncrementalDecoder/Encoder がマルチバイト文字の境界を考慮したバッファ管理を行ってくれます。
あ〜あ…
873 :
デフォルトの名無しさん :2012/10/12(金) 12:06:14.18
shelveで、「書き込みが完了するまで処理を待つ」ということはできないでしょうか? メモシステムのようなものを作っているのですが、メモの保存処理をしたあとにすぐにメモ一覧を出すと、直前に保存したメモが表示されないことがあります。 一覧の更新をすると表示されるようになるので、書き込みが完了する前に読み出しを行なってのかと思われます。 ですので、保存処理を行い、その保存処理の中で書き込みが完了するまで待ち、書き込みが完了すれば一覧に遷移するという処理ができないかと思っております。 現在はとりあえずsleep()で1秒待っているのですが、1秒で書き込まれる保証もないかと思うので、なにか確実な方法があればお教え頂ければと思います。
syncとかcloseとか試してみたぁ?
875 :
873 :2012/10/12(金) 13:52:31.00
>>874 はい。デフォルトの状態だと書き込みのされるタイミングが不定だったため、writebackをTrueにした状態で書き込み直後に意図的に.sync()をするようにしておりますが、同様の症状になります。
.close()は意図的には行なっていなかったのですが、意図的に.close()を試してみたのですが同様の症状でした。
>>868 >865の方法が無理なら codecs も使えないよ。最終的には文字列に変換出来ないとだめ。
865のコードはこうなっているんだけど、
>cp932buf = u8buf.decode('utf-8').encode('cp932')
ここでu8bufやcp932bufは何オブジェクトなの?
ぱっと見で、両方ともstr (python2系) だとおもったので、
>>866 で
>unicodeやstrではなく、ストリームデータを扱っています。
と書いた。
#知りたいのはストリームのときにどうするかなのに、strでのやり方を書かれても。
// / / バカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ 馬鹿には無理 / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
867が答えを書いてるじゃん。これじゃだめなの? あとはお前さんが言う「ストリーム」をfile-likeオブジェクトとしてラップしれやればいいだけ。
879 :
デフォルトの名無しさん :2012/10/14(日) 14:46:23.99
ぬーん
>>873 ロックを使わずに並列に読み出そうとしてない?
メモ一覧を読み出すのがマルチスレッドな場合(GUI等)だったら、
ロック(fctl.flock等, windoesの場合は知らない)を使って書き込みが完了するまで待たせるようにする。
スレッド間の同期のみでいいなら、mutexでも可。
>>875 プロセス内で単一のshelve のオブジェクトを使い回ししてるのと、
読み出される処理は別の関数で、別々にshelve.open して読み出されてるとで、状況が変わってきそう。
書き込み後、*その書き込みをしてる関数内で* 一覧を表示してみて、きちんと表示されてますか?
gdbmモジュールがWindowsでも使えたらすごく便利なんだけどねぇ。 単なるkey-valueの格納にSQLiteを使うのは嫌だし、効率も悪い。
883 :
デフォルトの名無しさん :2012/10/15(月) 00:28:04.39
memcached
dict
memcached ってデータ消えなかったっけ?ファイルに保存って出来るの?
numpy
memcachedはクラサバかつ揮発性だし、 pickleはオンメモリじゃないと使えないから大きなデータは格納できない。
へ?
ほ?
>>882 どれくらいの大きさのkey-valueになるの?
SQLiteで十分じゃないの?って思う
性能の要件とかあるの?
dict and pickleで良いとも思うし
memcachedもクラサバ両方を書き出せばいいし
numpyでいいじゃん
NumPyは関係ないだろ。
>>882 2系ならbsddbがWindowsでもつかえたと思うけど
>>895 > バージョン 2.6 で撤廃: bsddb モジュールは、 Python 3.0 では削除されるので、非推奨です。
との事。手元のActivePython(win32) 2.6.5/2.7.2 には既に入ってなかった。(公式、他は未確認)
2系のソース・レポジトリには残ってるけど、ビルドする手間や後々の事を考えると、
新規の場合は、他の保守されてる データベースのモジュールをインストールした方がいいと思う。
1000ならanydbm/dumbdbmが爆速
booksという変数に外部APIから取得したデータを格納し、欲しいデータはbooks.textにあるとします ただしAPIの挙動によって「books自体が空」「booksは存在するがbooks.textは存在しない」といった事が起ります その両方に対応するために以下のコードを書きました これをもっと短く書く方法は無いでしょうか? try: book_name = books.text except: pass 上記のようなコードが20箇所程度あって見た目も保守性も悲惨な事になってしまっています
>>898 コンパクトに書くだけなら、getattr(books, "text", None) とも書ける。
コードの保守を考えるなら、関数にするかオブジェクトをwrapするクラスを作った方がいいね。
__getattribute__ 辺りで属性のカスタマイズ出来るけど、別名でメソッドかプロパティ作った方が楽。
例外を使う場合、例外を捕捉する所は except AttributeError: にしよう
>>898 読み違えた。そのコードだと text属性が無いときは book_name は未定義?
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
動くのならば 動くのならば
GAEの質問はここで良いでしょうか?
pyramidってどういう場面で使ってる?
王族のお墓として
おとなしくdjangoから見てみることにします
Flask作者の名前ってコナンからとってんのかー
Steamのアカウントでコナンの光彦の画像使ってたから、たぶんそうだね。
>>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 ""
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"]
set(list1) & set(list2)
916 :
デフォルトの名無しさん :2012/10/18(木) 13:55:09.38
よ!
>>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")) を作る。
整理しないと良くわからんな
わからんね
921 :
デフォルトの名無しさん :2012/10/18(木) 15:21:47.48
一人で大丈夫?gankいかなくていいかい?
まず、Dive Into Python 3読め 初心者用の解説に書いてあることだから、 そっちを先に読もうよ ライブラリリファレンスを参照して目的の関数を探すのは、 ある程度上級者になってからでいいのでは? 初心者の勉強の仕方ではないと思うよ
.....┏┓ ..┏┓┏┓┏━┓ ┏┓ ┏┓ ┏┓┏┓┏━┓ ...┏┓ __ i⌒i ┏┛┗┓ ┃┣┛┗┫□┣┓ ┃┃ ┏┛┗┓ ┃┣┛┗┫□┣┓ .┃┃ ./ O Oヽ | ┗┓┏╋┳━━┫┣┓┏┻━┫┃ ┏┓┃┃ ┗┓┏╋┳━━┫┣┓┏┻━┫┃ ┏┓┃┃ 〈 |―/ | ノノ┏┛┗┻╋━┓┃┣┛┗┓ ┃┃ ┃┃┗┛ ┏┛┗┻╋━┓┃┣┛┗┓ ┃┃ ┃┃┗┛ ヽ. V ノ ...┃┃┏┓┃┏┛┃┃□┏┛ ┃┗┓┗┛┏┓ ┃┃┏┓┃┏┛┃┃□┏┛ ┃┗┓┗┛┏┓ ( ̄ ̄ ノノ ┗━┛┗┛┗━┻┻━┛ ┗━┛ ┗┛ ┗━┛┗┛┗━┻┻━┛ ...┗━┛ ┗┛
卑猥
おちんちん
どしたん急に
PyChinko
おっぱい村
[%(levelname)s] [%(asctime)s] (%(threadName)-10s) %(message)s この文字列をconfigparserで読みたいんだけどどうエスケープして書けばいい??
解決済みみたいなので、余談になるけど 3系(3.2以降?) だと configparser/loggingとも {} 表記の書式でも書ける様に設定できるみたい。 デフォルトではどちらも % 表記なので、移植性・手間的にはエスケープが安易。 configparserで辞書展開が不要なら以下のように、interpolationで振る舞いを変更出来る。 config = configparser.ConfigParser(interpolation=configparser.Interpolation()) loggingの方は、logging.Formatter や logging.basicConfig の style オプションで変更出来ます。
ループ回数を示す数字を1から3まで変数に代入しながら回したい時、 for i in range(1,4)というふうに、わざわざtoの数字を +1しないといけないのがどうにも性に合わないのですが みなさんは気になりませんか?
1から3まで変数に代入しながら回したい時は for i in range(3) a = i + 1 というふうにするよ
>>933 サンクスです。
+1は避けられないのですね。
rubyみたく、1..3という表記ができれば
直感的でよいのですが。
ちょっと作者に要望出してみます。
>932 はそろそろ 0 を発見した現代人のレベルに追い付くべきだと思うの
>>934 汎用的にはシーケンスの開始は0からだし
n個、n回繰り返すということを踏まえ
for(int i = 0; i < n; i++)
から考えれば何ら不思議はない
どうしてもi<=n的にしたいのなら
好きなようにラッパー関数でも
イテレータでもwhileでも書いて
さもなくばRubyに帰ってください
>>938 不思議とは言っていません。
直感的でないということです。
1,3の形式は残して構いませんから
1..3形式も追加してくれるよう頼んでみます。
気分次第で対応してくれるかも知れません。
何事も言ってみるものですよ。
方法は一つを標榜してるのに気分で対応ってことはない
いやさあ、rangeはforと違ってただのリスト返す関数なんだから、自分で関数作れば良くね?
Python 習い初めのときは 直感的じゃないとか思ったけど 結局慣れの問題なんだよね 文字列分割するときに abcdef -> abc def s="abcdef" s[:3] s[3:] と書けるのは直感的だよね
range(0, 3) -> [0, 1, 2] これのどこが非直感的なのか分からない。数学苦手なのか?
[0, 3)
>>942 超初心者ですからそれは難しいです。
数値だけでなく、3のところが何かの変数であっても
対応できなければなりません。
おそらくPythonのソースレベルから改造が必要では?
>>945 fromとtoの両方を書かせていながら
fromは含んでtoは含まないっていうのは、そういうルールであるとは
理解しますが、直感的でないと思います。
VisualBasicのように、For i = 1 To 3と書けば3を含む言語もありますし。
…ちなみに数学は高校時代零点の常習犯でしたが
関係あるんですかね。
rangeはstart,stopでfrom,toじゃないよ
よく考えると算数の知識がまったくなければ a = b + 3 という表記も非直感的であって、 突き詰めればCOBOL流に行き着くわけですね。 ADD 3 TO b GIVING b
ADD 3 TO a GIVING b
>>949 算数知ってるだけでも直感的じゃないんでは?
= を代入って決めたのはFORTRANが最初?
>947 おおいに関係ある
乙py
末端は 最後+1 で表わすのが慣例なのよ。 Rubyの 3...5 -> [3, 4] 3..5 -> [3, 4, 5] みたいな記法は、一見便利そうに見えて、実際には 「えーっとこれはどっちだったっけ」って混乱するし、 おまけに視覚的にも判別しにくいし、最終的に精神病で死ぬ。
Pythonはスライスもおかしい。 [3:4]で文字の3つ目〜4つ目を切り出すのが直感的な動作と思います。 COBOLなんかはそうなっています。 なのにPythonでは、3つ目のみを取り出す動作となります。 これは[3:3]が空リストを返すという意味のない動作をすることから見ても 明らかにおかしな仕様と思われます。 これも一緒に要望出してきます。ではいろいろ教えてくれてありがとう。
[m:m+n] でn==0のとき空リストが返ってくるのは分かり易いじゃん
宇宙人から見れば地球人がおかしなことしてるように見えるのと同じこと
どうやって要望を出すのかは知らんが,もしその要望が出たら全力で潰しにいかないとダメだな. まあそこまでしなくても門前払いされるのがオチだと思うが.
スライスの変更なんて破壊的どころの騒ぎじゃない 1からやり直すレベル
Rubyと違って日本語じゃ要望出せないから気にしなくておk
いや、流暢な英語で要望出されても良いよ 絶対に通らないから
できればユリシーズばりに精緻を凝らした文章で頼む
この人は冗談で言ってるのか、本気で言ってるのか判断できない。
自分ビルド作っちゃいなよ
馬鹿には無理
> Pythonでは、3つ目のみを取り出す動作となります。 zero origin なので [2] が 3つ目 になります
クラスメソッドで self がある為に 引数の個数を間違えて呼んだときの エラーメッセージで出るアドバイスの 引数の個数がずれるのは慣れるまで 訳が判らなくて混乱したわ しかも省略可能引数があったりして 必須パラメータの個数が変動してるので エラーメッセージ見たために却って混乱するという
ごもっとも
973 :
デフォルトの名無しさん :2012/10/21(日) 08:51:06.20
引数の型が期待されてるものと違うときに n番目の引数の型は何何ってエラー出るけど n+1番目だかn-1番目だかのことを言ってるのだと 気付くまでに数年掛かったぜ
TypeError: foo() takes exactly 3 arguments (2 given) といったエラーメッセージは 3.3 で変更されてるよ TypeError: foo() missing 1 required positional argument 'x' と、具体的に教えてくれるようになった。 3.2 以前なら pylint で、ある程度は、同様のエラーメッセージで教えてくれます。
そうか 3になって良くなったことも少しはあるんですね(棒)
やっぱりRubyのほうがまともな言語だよな。
わざわざ他の言語スレにでてくるようなアホが取り付いてなきゃ Ruby もいい言語なのかもな…
始めて覚えた言語がRubyだったオレは上で直感的じゃないと言ってる人の気持ちはわからなくもないけど、 ただ彼は多分Ruby自体も全然勉強してないよね 他の言語もどうせ上っ面でしょ Rubyの表面をちょこっと知っただけで「直感的最高!非直感的は駄目!」という短絡的思考 それは非直感的なのではなくて、ただ彼が理解できない概念っていうだけでしょ なおかつ「頼めばなおしてくれるかも」なんていう子供みたいな発想に至るのはヤバ過ぎ
モジュロ関数でマッピングする (i % 5) のに便利 割り算でマッピングする (i / 5) のに便利 a + size * i と記述できて便利 空リストが記述しやすくて便利 ふーむ
0/1 base はそれぞれ 人間/コンピュータにとって直感的/都合がよいってのがあるけど、 それとは別に、 添字として扱うことを想定された rangeの返す数列を 数値として扱うことのギャップかな? 意味的な事を考えると indexを積算する って処理にはなんか違和感があるね。 終端+1 に馴染めなければ [offset: offset+size] という考え方はどうだろう? 例えば、1から10個分の範囲 range(1, 1+10) # 11ってマジックナンバーが出てくるのが嫌で、あえてそう記述したりする事はある。
本来、等差数列のリストを作るための関数であるrangeを ループのカウンタに流用せざるを得ないPythonのfor文には 柔軟性が欠けていると言えなくもない。 だがそんなことは作者が初心者に指摘されるまでもなく わかっているはずで、まずいと思ったらとっくに直しているだろう。 直さないということは、プログラミング上は些末な問題に過ぎないということだ。 あきらめて仕様に従うのが大人というものだ。
それはfor文の考え方を間違ってる。というかC脳に支配されすぎている リストを辿るからこそ一貫して柔軟な操作が出来るんだろ
バカでかいリストがあって最初の要素以外を列挙したい場合はどうしたらいいですか?
list[1:]
>>986 リストをスライスするとコピーが作成されるのは避けたいです
それともリストを変更するまでコピーを遅延するようなメカニズムがPythonのスライシングには組まれてるのでしょうか
ビルトインのitertoolsモジュールにisliceクラスがある でも基本的にコピーオンライトなんてどれでも普通じゃなかったっけ そもそもリスト自体要素への参照に過ぎなかった気がするが
isliceいいですね。どうもです
参照するだけならコピー作られんだろw
>>985 巨大なリストでコピーを作りたくないって意図なら itertools.islice
>>982 range(1, 1+10)
自己レスだけど、数値直書きだと
始点変えたいだけの場合、変更箇所が3箇所になるので保守性よくないね。
>991 >982 range(1, 1+10) →じゃなくて→ range(1, 10) とか range(2, 2+10) →じゃなくて→ range(2, 10) とかいう仕様にしとけば良かったのにな
is-liceと読んでしまった人がここにいます
これはおこめですか?(誤)
ボクはココにいるよ
>>992 みたいなアホってプログラミング向いてないからもうパソコン触らないほうがいいと思う
pass
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
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
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
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。