Pythonのお勉強 Part3 ..
[2ch|▼Menu]
151:デフォルトの名無しさん
09/02/22 20:10:18
lambda x, i=i: i*x

152:デフォルトの名無しさん
09/02/22 20:27:38
>>150
Pythonでもクロージャは環境をキャプチャするんだが
そのforループではiが逐次破壊的に書き換えられてしまう
(let束縛ではなくset!のイメージ)んでそういう動作になる

単一代入でない&クロージャをサポートする言語で破壊的なループを使って
そういう書き方をすると、そういう動作になるのが普通で、
JavaScriptやPerlなんかもそうなったはず

Pythonでは>>151のような方法で対処できるが、魔術的だと感じられるなら
ループの中でさらにdefで明示的にブロックを作って、その中で
クロージャを作ったりするといいと思うよ

153:152
09/02/22 20:34:39
例えばこんな風に書くということね
def make_funcs(n):
    def make_func(i): return lambda x: i * x
    fn_list = []
    for i in range(n):
        fn_list.append(make_func(i))
    return fn_list

もっと短く書く書くこともできる
def make_funcs(n):
    make_func = lambda i: lambda x: i * x
    return [ make_func(i) for i in range(n) ]

154:デフォルトの名無しさん
09/02/22 20:54:37
>> 151, 152

非常に分かりやすい説明で、問題の原因が良く理解できました。
また、正しい書き方も分かりました。
ありがとうございました。





155:デフォルトの名無しさん
09/02/22 21:13:08
…で、実際処理速度はどうなの?>パイソン
PHPより早いのかな?

156:デフォルトの名無しさん
09/02/22 21:19:48
おおむねPython>Perl>PHP>Rubyってとこじゃね?

157:デフォルトの名無しさん
09/02/22 21:33:59
URLリンク(shootout.alioth.debian.org)
その手のベンチマークで定番?になってるサイトです。
言語の種類だけでなく、プログラミングの手法によっても結構変わるみたいですね。

158:デフォルトの名無しさん
09/02/22 21:47:06
URLリンク(shootout.alioth.debian.org)

159:デフォルトの名無しさん
09/02/22 21:55:27
C++が0.08秒で、PHPが48分って・・・orz
完全にやる気なくした・・www

160:デフォルトの名無しさん
09/02/22 22:01:33
>>156
馬鹿じゃない?

161:デフォルトの名無しさん
09/02/22 22:03:23
>>142
この回答って
Error : callback_ssl_client_cert_prompt required
これの対処法の回答という認識でいいんですかね・・・?

ググってみたんですがどれが回答になるのか分からなかったんですけど・・・。
そういうレベルの人はここに来てはいけないということですかね??


162:デフォルトの名無しさん
09/02/22 22:14:19
>>159
用途に合わせて言語を選ぶ。 当たり前のことじゃないか。

163:デフォルトの名無しさん
09/02/22 22:31:45
>>160
なんで?

164:デフォルトの名無しさん
09/02/22 22:33:07
>>161
こっちで質問しる
URLリンク(gimpo.2ch.net)


165:デフォルトの名無しさん
09/02/22 22:50:42
>>157
python 3 もっとがんがれ
おれもPHPが一番鈍足だとはしらんかった



166:デフォルトの名無しさん
09/02/22 22:54:23
>>163
根拠を示さないレス乞食はそっとしてあげて。

167:デフォルトの名無しさん
09/02/22 23:04:54
pass

168:デフォルトの名無しさん
09/02/22 23:34:42
インタプリタが遅いのは当たり前田のSPAM

169:デフォルトの名無しさん
09/02/22 23:37:20
まぁ>>156自体に根拠がないけどね

170:デフォルトの名無しさん
09/02/22 23:40:26
まあ・・ウェブならスクリプト言語でも十分ですけどね
2〜3秒以上もかかる計算滅多にないし

確かにベンチマークではpythonの方が良い成績のことが多いみたいだけど
スクリプト言語である以上、ドングリの背比べのような気もしないではない

ただ、pythonってphpに取って代わるメジャーなスクリプト言語になり得るのかな?

171:デフォルトの名無しさん
09/02/22 23:41:30
>>158見ると>>156の順番通りだけど?

172:デフォルトの名無しさん
09/02/22 23:44:35
>>170
パフォーマンスを気にする必要があるのは、10K問題とかだと思う。

173:デフォルトの名無しさん
09/02/22 23:57:17
しっかしPHP6はいつ出るんだ?

WEBはDBへの接続とDB自体の処理速度が一番ボトルネックだと思う。
そこが早ければある程度なら問題ないんじゃないだろうか。

174:デフォルトの名無しさん
09/02/22 23:59:41
PHPは(言語)仕様がどうのってよりも、ビジネス戦略で広まってるだけですがな。

175:デフォルトの名無しさん
09/02/23 00:02:38
10k問題という言葉・・初めて知りましたw

一万接続なんて、スクリプトじゃむりぽ
…というか、アパッチも無理なんじゃ

176:デフォルトの名無しさん
09/02/23 00:02:43
ビジネス戦略って一体何なんだ?

177:デフォルトの名無しさん
09/02/23 00:52:54
Python 3.0の変更点を調べていると、

URLリンク(text.world.coocan.jp)'sNewInPython3.0
> callable関数は削除されました。
>『callable(f)』の代わりに、
>『hasattr(f, '__call__')』が使えます。
> operator.isCallable関数もなくなりました。

とあるのですが、後者の方が書き難いのではないかと思います。
Pythonでは複数のやり方を嫌うという説明を見ました。
しかし、より良いものが残るべきとう意見は分かります。
でも、今回の件は消す必要が無かったのでは?
と思ってしまいます。

皆さんの意見はいかがでしょうか?

178:デフォルトの名無しさん
09/02/23 01:01:28
正直 2.x でも callable なんて使ってなかったからどうでもいい。
EAFPってやつだ。

179:デフォルトの名無しさん
09/02/23 01:32:36
レスありがとうございます。
EAFPという考え方、初めて知りました。
Googleで調べたら、いろいろ勉強になりました。

そもそもオブジェクトの属性が持つかどうかをチェックするよりは、
try, ecept構文で実行して、例外を補足するスタイルが推奨されているんですね。

180:デフォルトの名無しさん
09/02/23 08:03:08
>>175
> 一万接続なんて、スクリプトじゃむりぽ
Erlangなんかの実績はあるよ。

181:デフォルトの名無しさん
09/02/23 08:34:59
魚病理学者って何だ?

182:デフォルトの名無しさん
09/02/23 09:57:42
pass

183:デフォルトの名無しさん
09/02/23 11:36:33
10k問題って西暦で10000年になって桁が増えるときの問題かと思ったぜ

184:デフォルトの名無しさん
09/02/23 14:29:48
10種類も苦しいことがあるなんてどんな業界だよ。

185:デフォルトの名無しさん
09/02/23 14:42:07
休憩がない、帰れない、給料安い、休暇(取れ)ない、雇用不安定
キリがない、規則が理不尽、経費が自腹、心を病む、過労死

で10kじゃね

186:デフォルトの名無しさん
09/02/23 14:51:47
>>185
おいおい、「彼女ができない」 が抜けてるぞ

187:デフォルトの名無しさん
09/02/23 14:54:28
「彼女(or結婚)できない」、すっかり忘れてたよ

188:デフォルトの名無しさん
09/02/23 20:50:30
Erlangでいけるなら
stackless + libev でいけるだろ、たぶん、きっと

189:デフォルトの名無しさん
09/02/23 20:51:29
>>157
これ見ると、概してCよりC++のほうが早いと思って良いのかなぁ。

190:デフォルトの名無しさん
09/02/23 21:04:40
>>188
有望ではあるよね。
C10K問題への対策の一つが高次並列化なんだが、stacklessが
変数使い捨てを強化すれば、並列化との相性が良くなる。

191:デフォルトの名無しさん
09/02/23 21:08:43
C10K問題対策って普通単にサーバ分散させるだけじゃねえの?

192:デフォルトの名無しさん
09/02/23 21:13:41
>>185-191
C10K: >>185 - 規則が理不尽 + 彼女ができない + コーディング規則が理不尽

193:デフォルトの名無しさん
09/02/23 21:26:10
>>191
静的コンテンツを同時に多数同時に見てもらうだけの時代はそれで済む事もあったけど、
例えば「10万人同時ログイン&互いに同じ関心を持つ者のグループをダイナミックに」
などとやろうとすると、別の手が必要。

関数型言語が並列化と相性がいいんで、stacklessみたいなのが関数型のいい所を
取り込んでくれるといいな、というのが感想。

194:デフォルトの名無しさん
09/02/23 22:06:09
10万人同時ログインってw
GLAYの幕張ライブやないねんからw

195:デフォルトの名無しさん
09/02/23 22:14:08
チャットみたいなもんか?
よくわかんねえけど
10万人で一緒にチャットする必要は感じないが……

今の大規模サービスって別にダイナミックコンテンツでも
普通にスケールさせてないか?
勿論サーバ分散させて

196:デフォルトの名無しさん
09/02/23 22:38:39
少数のサーバーに集中
     ↓
安価な多数のサーバーに分散するといいぜ
     ↓
でも、物理メンテ大変だし、あんまり安いマシンじゃなくて
ちょっと高級な中グレードのマシンで台数減らした方がよくね?
(イマココ)


197:デフォルトの名無しさん
09/02/23 23:08:25
C10K問題の先駆けは既に、Skype、Twitterなどでも出始めてる。
10万人というのは一例で、従来型サービスの延長じゃない事を
スケールさせたい場合の問題の一つ。

198:デフォルトの名無しさん
09/02/23 23:44:25
あんまり言語とは関係ない話になってるなw

199:デフォルトの名無しさん
09/02/24 00:07:49
10万人同時チャットってwww
忙しすぎw

200:デフォルトの名無しさん
09/02/24 11:41:28
ちょっと面白そうだな>10万人チャット

201:デフォルトの名無しさん
09/02/24 12:53:56
2chのスレの一番速い流れでスレあたり1000人だもんな。


202:デフォルトの名無しさん
09/02/24 13:35:13
人数の多いチャット部屋覗いたことあるが、大半はROM専
数人が発言しまくりで、残りは単発発言の奴かな
余程盛り上がる話題が無いとそんなにログ流れんし
ログが流れる時ってのは会話が成立しない祭状態で
会話したい奴は「特定の相手とのみ会話する機能」使って身内話

203:デフォルトの名無しさん
09/02/24 14:17:58
10KのKはKOBITOのK。

204:デフォルトの名無しさん
09/02/24 16:40:23
TwitterのPublic Timelineがある意味10万人チャットみたいなものか

205:デフォルトの名無しさん
09/02/24 17:50:41
聖徳太子「10Kまで同時通話おk」

206:デフォルトの名無しさん
09/02/24 20:37:20
pythonでhtmlを処理しようと思うんだがどういう方法がベターなの?

207:デフォルトの名無しさん
09/02/24 20:37:35
>>189
Linusの回答
URLリンク(tabesugi.net)
オリジナル
URLリンク(lwn.net)

208:デフォルトの名無しさん
09/02/24 20:53:57
C++のそういうネタは好きw

209:デフォルトの名無しさん
09/02/24 23:45:18
ネストした関数をunittestモジュールで外からテストにかける方法って
ない?

210:デフォルトの名無しさん
09/02/25 00:23:43
BeautifulSoupが流行ってる

211:デフォルトの名無しさん
09/02/25 01:21:36
>>206
htmlparserってのがあるけど、速度的には正規表現で処理するのがお勧め。

212:デフォルトの名無しさん
09/02/25 01:55:50
lxml

213:デフォルトの名無しさん
09/02/25 08:37:03
"substandard programmers"が書くCのコードもそれはそれは恐ろしいけどな。

214:デフォルトの名無しさん
09/02/26 02:22:46
lxmlが最強って聞いたけどそうでもないの?

215:デフォルトの名無しさん
09/02/26 14:51:02
lxmlが最強

216:デフォルトの名無しさん
09/02/26 15:21:07
lxmlが速いみたいだよ。どうしてもpure pythonが良いならBeautifulSoupだろうけど。

217:デフォルトの名無しさん
09/02/26 20:08:27
人の書いた作例とどう動くかが多数解説されたサイトを教えて下さい
解説サイトの理論を見ても理解できません
つーかPrologしかやったことないです

218:デフォルトの名無しさん
09/02/26 20:58:40
>>217
俺はむしろPrologのほうが分からんぜ…。

・ドキュメントのチュートリアルを一通り読む
>>1のまとめwikiにある問題集とドキュメントを照らし合わせながら読む
・とにかく書く

辺りかなぁ。
他の手続き型言語からの人なら
「自分の前に書いてたコードを今の言語に書き直してみる」
ってのも結構有効なのだろうけれど、Prologは毛色が違い過ぎて難しいだろうなぁ…。
特にユニフィケーションをフル活用するようなコードは言語としてサポートしてるPrologのほうが楽だろうし。

小さな練習問題が欲しいなら「練習問題 Python」辺りでググると大量に出てくると思う。

219:デフォルトの名無しさん
09/02/27 04:08:54
作例で数が多いとこならcookbook。でも、詳細な解説は期待できないかな。
いろんな人が投稿してるので質はバラバラだけど、
コードをベースに議論したりするので、他よりは割とコメント(解説)多めだと思う。
URLリンク(code.activestate.com)



220:デフォルトの名無しさん
09/02/27 08:52:56
generator について一言で言うと何なんでしょうか?

221:デフォルトの名無しさん
09/02/27 09:02:06
>>220
魔法

222:デフォルトの名無しさん
09/02/27 09:08:31
関数をイテレータ化するための魔法

223:デフォルトの名無しさん
09/02/27 14:28:57
今 URLリンク(www.python.jp)

4.7.1 デフォルトの引数値 の中の

def f(a, L=[]):
L.append(a)
return L

print f(1)
print f(2)
print f(3)

このコードを打とうとしてたんだけど、eclipseに
「.」ピリオド打つと固まってしまう。
コピペすると落ちないんだけど、直接「.」打つ方法ありませんか?

環境は
Eclipse Classic(SDK)3.4.1
Pydev 1.4.4.2636
Python 2.6
です。

お分かりの方いらっしゃいますか?


224:デフォルトの名無しさん
09/02/27 15:04:14
>>223
> 「.」ピリオド打つと固まってしまう。
「.」を入力した瞬間に、メソッド一覧を表示しようとしてると推測。

225:デフォルトの名無しさん
09/02/27 15:16:14
>>223
1日ほっとく

226:デフォルトの名無しさん
09/02/27 15:37:35
>>223
もっと早いマシン買えよ底辺ドカタ。

227:デフォルトの名無しさん
09/02/27 16:00:44
pass

228:デフォルトの名無しさん
09/02/27 17:58:08
>>220
遅延リスト

229:デフォルトの名無しさん
09/02/27 17:59:40
新しくpythonを勉強する際に、3.0対応の書籍・サイト・マニュアルはありますか?

230:デフォルトの名無しさん
09/02/27 18:36:20
>>229
はじめてのPython3
中身読んでないのでどのくらい使えるのかわからんけど。

231:デフォルトの名無しさん
09/02/27 19:08:48
URLリンク(www.catonmat.net)
URLリンク(inkhorn.org)

根性 types, object, attributes, method 理解

232:デフォルトの名無しさん
09/02/27 22:27:08
んじゃぁ

比較的新しいいい本は?

233:デフォルトの名無しさん
09/02/28 01:11:09
西尾さんが書いたJython本だな

234:デフォルトの名無しさん
09/02/28 01:34:54
>>229
スレリンク(tech板)

235:デフォルトの名無しさん
09/02/28 01:48:17
>>229
URLリンク(www.amazon.co.jp)

この本が一番日本語のPython本として一番よく出来ている。
他のがかすんで見えてしまうほどだ。この一冊さえあれば
Pythonについて完璧にマスターできるだろう。

236:デフォルトの名無しさん
09/02/28 02:47:46
>>235
その本を買って初心者を脱出したいと思います。
良著紹介ありがとうございました。

237:デフォルトの名無しさん
09/02/28 04:00:27
>>236
どういたしまして

238:デフォルトの名無しさん
09/02/28 07:30:36
>>235
Python関係ないだろ

239:デフォルトの名無しさん
09/02/28 09:29:57
>>238
はあ?
言語自体はPythonだろ

240:デフォルトの名無しさん
09/02/28 09:39:32
つか、Jythonってジャイソンって読むのか。ジェイソンだと思ってたw

241:デフォルトの名無しさん
09/02/28 09:48:20
爺さんって読むんだよ

242:デフォルトの名無しさん
09/02/28 09:48:25
>218-219
thx
パズル感覚でやってみます

243:デフォルトの名無しさん
09/02/28 11:55:31
>>239
Jthon本に対するコメントだよ
言語自体はPythonだけどその本に
Python的内容を期待してたら外れ

244:デフォルトの名無しさん
09/02/28 11:59:56
>>243
どっちかっつーとありゃJavaの本だ
ターゲット読者の絞込みが中途半端なんだよ
Java使いにとってはJavaのインストールとかEclipseとか
わざわざ説明してるのは馬鹿じゃないかと思う訳で
Python使いにとっては何が嬉しくてわざわざ
Javaインストールしてまで(ry


245:デフォルトの名無しさん
09/02/28 12:11:42
CPython から Java を呼び出して使えますか?

246:デフォルトの名無しさん
09/02/28 12:30:08
これから槍始める人は3.0かそれ以前をやるべきなのか・・・

247:デフォルトの名無しさん
09/02/28 12:40:18
2.5の日本語ドキュメントを利用できて、3.0の雰囲気も味わえる2.6

248:デフォルトの名無しさん
09/02/28 13:00:38
Guidoによると2.2の頃に書かれて改訂されたクソ本は買わない方がよいらしいよ。

249:デフォルトの名無しさん
09/02/28 13:06:40
クイックリファレンス一冊でオケ
ただし古すぎみたいな

250:デフォルトの名無しさん
09/02/28 13:19:37
Jython本をいつも推薦してくれるjava-jaの非モテ君ありがとう。

251:デフォルトの名無しさん
09/02/28 13:23:38
ジャイソン以外の良本はないのか

252:デフォルトの名無しさん
09/02/28 13:30:13
>>249の2.6/3.0対応版がもうすぐ出るよ
ピアソンがんばってくれないかね

253:デフォルトの名無しさん
09/02/28 13:49:19
すいませんアドバイスください m__m

コマンドプロンプト上でPythonを実行して
待機秒数を表示させたりする場合、
待機するループ内でprintやsys.stdoutの出力を行うと
データがどんどん流れていってしまうのですが、
それを防ぐ方法はありませんか?

254:デフォルトの名無しさん
09/02/28 13:54:03
import sys, time
for i in range(10):
    sys.stderr.write("%d\r" % i)
    time.sleep(1)

255:デフォルトの名無しさん
09/02/28 14:00:45
なるほど!!
どうもありがとうございます。

256:デフォルトの名無しさん
09/02/28 14:11:28
西尾さんのブログを読むべきだと思うけどな

257:デフォルトの名無しさん
09/02/28 14:12:14
>>254
すみません、ピコ秒単位で制御したいのですがどうすればいいんでしょうか

258:スルー力が足りない!
09/02/28 14:20:02
本人装った荒らし乙。

259:スルー力が足りない!
09/02/28 14:28:27
>>257
本人装った荒らし乙。

260:258 (!= 259)
09/02/28 14:38:09
図星だったwww


261:デフォルトの名無しさん
09/02/28 15:03:29
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

262:デフォルトの名無しさん
09/02/28 16:24:57
pass

263:デフォルトの名無しさん
09/02/28 18:15:08
ぬるぽ

264:デフォルトの名無しさん
09/02/28 19:28:41
try:
    ガッ

265:スルー力が足りない!
09/02/28 23:07:40
except ちんぽ as e:

266:デフォルトの名無しさん
09/02/28 23:37:00
俺の息子がexceptionalにepsironってことですね

267:デフォルトの名無しさん
09/03/01 15:15:27
SHA-1を計算するのに

f = open(target,'rb)
b = f.read()
f.close()
hashlib.sha1(b)

で計算はできたのですが
これをループを使って複数のファイルに対して行うと
途中でメモリエラーが出てしまいます(OutOfMemoryException)。
強制的にメモリを開放させるようなことはできないでしょうか?

b = ''
というようなこともしてみましたが無駄でした。
環境はIronPython 2.0.0.1、Windows Vista SP1です。


268:デフォルトの名無しさん
09/03/01 16:52:43
URLリンク(d.hatena.ne.jp)

269:デフォルトの名無しさん
09/03/01 17:04:45
入力されたフォームデータをsqliteでデータベースに溜め込むCGIをPythonで実現しようとしてるんですが
同時アクセスが有った場合にコリジョンを回避するにはどうしたらいいでしょうか?キューにしたいんですが。

270:デフォルトの名無しさん
09/03/01 17:07:42
import Queue

271:デフォルトの名無しさん
09/03/01 17:16:06
CGIじゃプロセスがそれぞれ異なるから無理でしょ。

あと、SQLiteに書き込むならロックされるはずだから
同時アクセスは気にしなくてもいいと思うよ。

272:デフォルトの名無しさん
09/03/01 17:26:26
aritayaki

273:269
09/03/01 17:26:54
下げ忘れてた。失礼。
ということは、例外を捕まえてtime.sleep(1)とかやった方がスマートですかね。
アクセスが集中したときは順番ゴチャゴチャになるかもしれないけれど。
マヌケな話で申し訳ないんですがコリジョンを意図的に発生させる方法を教えて貰えますか?
実際に例外出して見ないと不安で。

274:デフォルトの名無しさん
09/03/01 18:11:59
sqlite コマンド側からテーブルにロックかけたままにしておいて
CGI実行してみればどう?
タイムアウトはconnect時に指定できる。

あと、タイムアウトが発生してるような状態なら
時間をおいて再実行とかは、あまり意味がないだろう。
すぐにエラーにしてしまったほうがいいと思うけど。


275:デフォルトの名無しさん
09/03/01 18:44:49
ちょっと聞いてみたいことがある。

ある辞書の中から、いくつかのキーを持つ要素だけを取り出した部分辞書を作
りたい。

>>> request = {'hoge':1, 'fuga':2, 'piyo':3, ...}
>>> a = {}
>>> for key in ('hoge', 'fuga'):
...   a[key] = request[key]
...
>>> a
{'fuga': 2, 'hoge': 1}

これをもっと簡潔に書く方法は無いだろうか?


276:デフォルトの名無しさん
09/03/01 18:58:39
簡潔か微妙な気もするけど

dict([(key, request[key]) for key in ('hoge', 'fuga')])

277:デフォルトの名無しさん
09/03/01 19:15:26
リスト内包表記を map にしてみた。

dict(map(lambda x: (x, request[x]), ('hoge', 'fuga')))
なんだこの微妙さは。


278:デフォルトの名無しさん
09/03/01 19:37:35
dict([(x,request[x]) for x in request if x in ('hoge', 'fuga')])

279:デフォルトの名無しさん
09/03/01 19:41:54
英語的な連中には
コレが構文的に分かりやすいのかね?


280:デフォルトの名無しさん
09/03/01 20:28:58
内包表記って便利といえば便利だけど
python の魅力・長所である、
「記述内容が形(インデント)で見える」って
ところを完全に無視しているのが何と言うか…

281:デフォルトの名無しさん
09/03/01 21:16:08
え?内包表記、読みやすいじゃん・・・
トリッキーなことやりすぎるとあれだけど。


282:デフォルトの名無しさん
09/03/01 21:17:53
forの左に書けるのが文だけで式が書けないから色々微妙なことをしないといけなくなる

283:デフォルトの名無しさん
09/03/01 21:24:04
>>280
個人的には内包表記は「記述内容が形で見える」ものの最たるものだと思うなあ。

Z = [(x / y if y != 0 else None) for x, y in zip(X, Y)]

となっていたら Z はリストで要素は x / y か None だということが一目で分かるから。

たぶん問題なのは内包表記を入れ子にすると一気に難読化するということかと。
個人的には入れ子にして読みにくくなるぐらいならバラして for 文なりにするかな。

284:デフォルトの名無しさん
09/03/01 22:10:34
276と277の比較なら276のが読みやすい。

285:デフォルトの名無しさん
09/03/01 22:24:53
>>276-278共通して
('hoge', 'fuga')
なんだけど
['hoge', 'fuga']
じゃだめなの?


286:デフォルトの名無しさん
09/03/01 22:34:59
偏向する必要がないならタプルを使う。

287:269
09/03/01 23:05:54
じゃ俺はちょっと違った切り口で。
>>276とほぼ一緒だけどfilter使えばコメント無くても何やってるか分かりやすい。
あとrequestに無いキー持ってこようとしてもエラー吐かない。

request = {'hoge':1, 'fuga':2, 'piyo':3}
def f(x): return x in ('fuga','hoge')
dict([k,request[k]] for k in filter(f,request))

288:デフォルトの名無しさん
09/03/01 23:44:01
遅くね?

289:デフォルトの名無しさん
09/03/01 23:46:22
dict([k,request[k] if k in request else None] for k in ('fuga','hage'))

290:デフォルトの名無しさん
09/03/01 23:54:14
dict{[(k, v) for k, v in request.items() if k in ('fuga','hoge')]}

3.xであれば

{(k, v) for k, v in request.items() if k in ('fuga','hoge')}

291:デフォルトの名無しさん
09/03/01 23:57:35
ごめん、↑のdict{}はdict()だ

292:デフォルトの名無しさん
09/03/02 00:10:11
見つからないkeyは結果からは無くなった方が良いのかな

293:デフォルトの名無しさん
09/03/02 00:14:25
部分辞書だからな

294:デフォルトの名無しさん
09/03/02 09:44:29
URLリンク(blog.livedoor.jp)

>本書を見てびびった人は、以前紹介した「実践Python」を薦めておく。

勧めるなよ(wwwwWwwWwwwWWwwww


295:デフォルトの名無しさん
09/03/02 09:56:50
この本が一番いいんだけどな
URLリンク(www.amazon.co.jp)

296:デフォルトの名無しさん
09/03/02 10:00:33
URLリンク(blog.livedoor.jp)

子飼が紹介するとクソ本認定?

297:デフォルトの名無しさん
09/03/02 15:22:57
Windowsにpythonインストールしたら
付属でついてるpython editorのデバック環境が充実してておどろき
しかしemacs key-bindになれてるからemacs ぽく使える環境で便利なのないでしょうか?
emacsのpython.elはbreak pointの設定が右クリック一発でできなくて使いにくい

298:デフォルトの名無しさん
09/03/02 15:50:51
>>294
その本出版社が潰れて買えなくなってるよ。

299:デフォルトの名無しさん
09/03/02 16:08:32
>>297
じゃぁ右クリック一発でできるように改造すれば?


300:デフォルトの名無しさん
09/03/02 17:00:12
どうみてもクソ本認定です
本当にありが(ry

301:デフォルトの名無しさん
09/03/02 17:06:56
age

302:デフォルトの名無しさん
09/03/02 17:08:06
>>297
xkeymacs入れてしまえ

303:デフォルトの名無しさん
09/03/02 21:22:48
hoge.__setitem__(key, value)

無理やりreduceで書くなら例えば
reduce(lambda d, x: d.__setitem__(x, request[x]) or d, ['hoge','fuga'],{})
こんな書き方になると思うけど、Python使いはこの例を普通こんな風には書かない

dict((k, request[k]) for k in ['hoge','fuga'])
のほうがずっと素直で短く読みやすいからね

304:デフォルトの名無しさん
09/03/02 23:26:46
はぁ?

305:デフォルトの名無しさん
09/03/02 23:35:41
複素演算の構文調べてたら、とあるSEの書いたブログが引っかかったが
そこのサンプルはNameErrorとTypeErrorの出力ばっか張ってあって役に立たなかった

306:デフォルトの名無しさん
09/03/03 00:07:05
reduce とか lambda とかそのうちなくなるだろ。

307:デフォルトの名無しさん
09/03/03 00:34:39
それはそうかもしれないけど、3.0を生き残ったことで想定寿命は激延びな希ガス

308:デフォルトの名無しさん
09/03/03 00:51:03
lambdaって無くなるのかな

309:デフォルトの名無しさん
09/03/03 01:08:45
>>297
IDLEのこと?
OptionsのConfigure IDLEを開いて、KeysでClassic Unixにすれば
C-aで行頭とかになるよ。
C-x C-s みたいなキーシーケンスもできる。

310:デフォルトの名無しさん
09/03/03 01:29:17
lambdaの中で代入とか複数の文とか出来るようになるのはいつ?

311:デフォルトの名無しさん
09/03/03 01:52:36
mapとfilterは最悪消えてもリスト内包表記で書けるけど
reduceって代用あるっけ?

312:デフォルトの名無しさん
09/03/03 01:54:42
どっちみちreduceはfold_left相当でfold_rightはないし
unfoldもないけどな

313:デフォルトの名無しさん
09/03/03 01:56:01
>>310
つーか全部式にしてほしいという発想にはならんのか
文が存在する関数型言語ってあるっけ

314:デフォルトの名無しさん
09/03/03 04:53:23
Haskellのwhereって式?

315:デフォルトの名無しさん
09/03/03 08:02:01
⊂二二二( ^ω^)二⊃

316:デフォルトの名無しさん
09/03/03 09:02:51
>314-315
ナ、ナンダッテー>ΩΩΩ

317:デフォルトの名無しさん
09/03/03 09:53:35
Haskellのwhereはcase式の一部
URLリンク(www.haskell.org)

318:デフォルトの名無しさん
09/03/03 12:15:02
URLリンク(www.atmarkit.co.jp)

319:デフォルトの名無しさん
09/03/03 12:54:49
URLリンク(www.oreilly.com)
この本の日本語版ってありますか?

320:デフォルトの名無しさん
09/03/03 13:34:23
>>245
JCC

321:デフォルトの名無しさん
09/03/03 14:53:57
>>319
この表紙は人を選ぶな…

322:デフォルトの名無しさん
09/03/03 16:16:11
>>321
俺も初めて見たときはこれはさすがにどうかと思ったよ

323:デフォルトの名無しさん
09/03/03 16:23:05
>>319
> URLリンク(www.oreilly.com)

グロ
閲覧注意


324:デフォルトの名無しさん
09/03/03 17:39:28
ただの模様じゃん
なんも樹に成らん

325:デフォルトの名無しさん
09/03/03 23:36:22
俺は樹になる

326:デフォルトの名無しさん
09/03/04 01:06:21
カバーをひっくり返して、好きな絵を描くといいよ。

327:デフォルトの名無しさん
09/03/04 07:15:06
へび(そのものあるいはその絵)を嫌うひとは心理的に

328:デフォルトの名無しさん
09/03/04 09:21:27
そもそも蛇嫌いはpythonでアウトな気がする。

329:デフォルトの名無しさん
09/03/04 12:36:48
Python の由来は Monty Python であって、ヘビは関係ないと Guido は言って
たんだがなー。まあ O'Reilly の表紙にパイソンズ出すわけに行かないか。


330:デフォルトの名無しさん
09/03/04 17:52:34
>>329
Guido的には、元ネタ的にはそうなんだが
オライリーのPython本の絵が蛇になっちゃうのはそりゃ仕方ないよなーってことで
諦めた(受け入れた)、みたいな感じだったかと

331:デフォルトの名無しさん
09/03/04 18:34:07
日本語版はおっぱいでおk

332:デフォルトの名無しさん
09/03/04 20:03:47
>>331
エロ本コーナーに並びそうだな。

333:デフォルトの名無しさん
09/03/04 21:15:19
ジャイソンかサイソン
   どっち?

334:デフォルトの名無しさん
09/03/05 15:44:46
get 333

335:デフォルトの名無しさん
09/03/05 17:29:58
URLリンク(www.python.com)

336:デフォルトの名無しさん
09/03/05 18:16:01
Firefoxでアドレスバーにpythonと打つとpython.jpにつながるのでそれを期待して古いMozillaでやったら
大学のワークステーションでpython.comにアクセスしてしまったでござる

337:デフォルトの名無しさん
09/03/06 02:04:38
アイコンの蛇って名前とか付いてないの?

338:デフォルトの名無しさん
09/03/06 02:11:47
やっぱ時代はRubyだよな

339:デフォルトの名無しさん
09/03/06 02:33:09
ぱいちんこ

340:デフォルトの名無しさん
09/03/06 14:43:06
>>336
俺も間違えたことあるw
.comのほうは海外のエロサイトなんだよな

341:デフォルトの名無しさん
09/03/06 15:47:07
間違えてwww.goo.co.jpを開いちゃったみたいな感じか

342:デフォルトの名無しさん
09/03/06 18:31:59
Webポータルのハズがクルマ、はまだ良いだろ
python〜の場合、技術資料のハズがエロサイトだぜ?
自宅で誰も居ないなら別に良いが、会社や学校、家族の目の前で間違えた時は…

343:デフォルトの名無しさん
09/03/06 18:38:36
>>342
いや、goo.co.jpもエロサイトだったんだが(今は無いが)

344:デフォルトの名無しさん
09/03/06 23:17:06
>>335
我が家でBフレッツ導入した時に、「セキュリティ対策ツール」という名前で
マイクロトレンドのOEMでウイルスバスター相当のセキュリティソフトが
1ユーザ分ついてくるのだが、このサイト、しっかりと、プロックしてくれました。
めんどくさいので、プロック解除してまでみたいとは思わん。

345:デフォルトの名無しさん
09/03/07 00:24:10
こういうアドレスを買収しようとしたら
いくらぐらいかかるんかね


346:デフォルトの名無しさん
09/03/07 01:37:51
2万円

347:デフォルトの名無しさん
09/03/07 11:26:51
既に取られてるドメインは2万じゃキツかろう
逆にまだ取られてないドメインならもっと安いが

348:デフォルトの名無しさん
09/03/07 21:48:43
3万円

349:デフォルトの名無しさん
09/03/07 22:37:25
逆にまだ取られてないドメインなら買収とは言わん罠

350:デフォルトの名無しさん
09/03/08 10:16:38
def f(hoge=3, fuga=7):
print (hoge, fuga)
または
f = lambda hoge=3, fuga=7: print (hoge, fuga)
という関数に対して
d1 = {'fuga': 8, 'hoge': 4}
という辞書で
f(**d1)
を実行すると期待通りになるのですが
d2 = {'kane': 1, 'fuga': 8, 'hoge': 4}
という辞書で
f(**d2)
を実行すると'kane'が無いと怒られます
どうすればうまくいくのでしょう

351:デフォルトの名無しさん
09/03/08 10:19:53
訂正します

誤 f = lambda hoge=3, fuga=7: print (hoge, fuga)
正 f = lambda hoge=3, fuga=7: (hoge, fuga)

352:デフォルトの名無しさん
09/03/08 15:09:33
def f(hoge=3, fuga=7, **kwargs):
  print (hoge, fuga)

353:デフォルトの名無しさん
09/03/08 15:49:40
eval("foo(param)")
はうまく動くのに
eval("bar.foo(param)")
が動いたりうごかなかったり
特に

#file a.py
def f():
eval("bar.foo(param)")

#file b.py
a.f()

としたときに動いてくれない

354:デフォルトの名無しさん
09/03/08 16:59:02
質問してるのか、
問題を喚起しているのか、
ツンデレなのか、
はっきりしなさい!

355:デフォルトの名無しさん
09/03/08 17:39:14
eval関係無く動くまい

356:デフォルトの名無しさん
09/03/08 18:00:41
ツンデレです

357:デフォルトの名無しさん
09/03/08 20:43:28
適切に sys.path.append していないと予想

358:デフォルトの名無しさん
09/03/09 01:13:08
通常の仕事にevalなんて使う事ないなぁ。
皆どんな高度なことやってるの?

359:デフォルトの名無しさん
09/03/09 01:32:46
アプリのコマンドライン。
emacsだとM-xに相当か。
制作中はアプリ自身のデバッグにも使える。

360:デフォルトの名無しさん
09/03/09 14:10:34
>>353
#a.py
class Handletest:
def handle(self, methodstr):
result=eval(methodstr,globals(),locals())
return result

if __name__ == "__main__":
import numpy
handletest=Handletest()
print handletest.handle("numpy.linalg.norm([1,2])")#動く




#b.py
import numpy
import a
if __name__ == "__main__":
h= a.Handletest()
print h.handle("numpy.linalg.norm([1,2])")#動かない
-------------
golbals localsに違うものいれないといけないみたいなのだけど
どう入れればいいのかわからない

361:デフォルトの名無しさん
09/03/09 17:10:33
print h.handle("import numpy; numpy.linalg.norm([1,2])")

362:デフォルトの名無しさん
09/03/09 18:39:03
h.handle("numpy.linalg.norm([1,2])", globals(),locals())
h.handle("numpy.linalg.norm([1,2])", {"numpy":numpy}, {})

363:デフォルトの名無しさん
09/03/09 19:35:25
>>360
bでimport numpyしただけだと
bからはnumpyという名前が見えるが
aからは見えないのさ

importはインタプリタにモジュールをロードするだけでなく、
カレントのモジュールにシンボルをインポートするという意味を持っている

364:363
09/03/09 19:47:41
こんだけじゃ説明足りんかな
Pythonのグローバル変数(グローバル環境フレーム)ってのは
インタプリタグローバルじゃなくて、モジュールスコープで別れてるんだよ

モジュールのトップレベルの束縛=グローバル変数
だと思っていい
globals()関数が返すのも、あくまで「そのモジュールの」グローバル変数

365:デフォルトの名無しさん
09/03/09 20:55:55
>>353
#a.py
class Handletest:
def handle(self, methodstr):
import numpy
result=eval(methodstr,globals(),locals())
return result

if __name__ == "__main__":
handletest=Handletest()
print handletest.handle("numpy.linalg.norm([1,2])")

366:デフォルトの名無しさん
09/03/09 21:40:14
import sys
class Handletest:
    def handle(self, methodstr):
        frame = sys._getframe(1)
        return eval(methodstr, frame.f_globals, frame.f_locals)

367:デフォルトの名無しさん
09/03/09 22:01:48
sys._getframeを呼び出してるメソッドは継承すると酷いことになる

368:デフォルトの名無しさん
09/03/10 10:49:07
ウーパールーパーって食えるんだな
URLリンク(www.fnn-news.com)

369:デフォルトの名無しさん
09/03/10 23:18:16
おまえら、金融系とか経済系の
ゲーム作るプロジェクトやりたい?

370:デフォルトの名無しさん
09/03/10 23:33:20
>>369
自分で勉強しろ

371:デフォルトの名無しさん
09/03/10 23:51:17
やりたい

372:デフォルトの名無しさん
09/03/10 23:56:48
プロジェクトというからにはキッチリドキュメントがそろってるんだろうな?

373:デフォルトの名無しさん
09/03/11 00:01:34
>>370
どっちの意味?

プログラムを勉強しろっていみ?
それとも、金融知識を勉強しろっていみ?

374:デフォルトの名無しさん
09/03/11 00:04:55
>>371
金融系のプロジェクトでプログラマー募集したら、
なぜか応募してきたのがpythonのプログラマーなんだよね。

他にも自分が見聞きしてる範囲内で、
「学校を作ろう」とかいう、ふざけたプロジェクトに応募
してたのもpythonのプログラマーだったし、ひょっとして
pythonって、せっかく学んでも、いじるアプリがないから
参加するプロジェクトを探してる状態なんじゃないかなーって
思ったわけだ。

もしこれがPHPだったら、wordpressはあるし、joomlaはあるし、
phpbbはあるし、mediawikiはあるし、で、いくらでもアプリも
プロジェクトもあるし、いじり倒すおもちゃは豊富にあるしで、
プルグラマー募集してもきてくんないんだよね。

でもpythonだったら、いじるおもちゃがない状態だから、
プログラマーが余っていて、わりかし捕獲しやすい
状態なのかなと。

375:デフォルトの名無しさん
09/03/11 00:08:59
>>374
学校を作ろうを馬鹿にするな!!

376:デフォルトの名無しさん
09/03/11 01:13:02
すまんが、真面目な話してるんだ、馬鹿は黙ってくれないか

377:デフォルトの名無しさん
09/03/11 01:20:54
そりゃphpなんかと比べてしまえば
pythonを存分に使わせてもらえるところは少ないだろうね

378:デフォルトの名無しさん
09/03/11 01:36:52
そもそもPythonはRubyより劣るからな。利用価値がまったくない。

379:デフォルトの名無しさん
09/03/11 01:41:20
仕事でゲーム作る人募集って事?

380:デフォルトの名無しさん
09/03/11 02:25:34
>>379
Rubyは優秀だからな。

381:デフォルトの名無しさん
09/03/11 02:49:52
面白そうならなんでもやるぜ

382:デフォルトの名無しさん
09/03/11 03:00:21
ドモホルンリンクルの計測なんてどうだ

383:デフォルトの名無しさん
09/03/11 06:49:10
>>377
phpは優秀だからな。

384:デフォルトの名無しさん
09/03/11 17:52:44
Uncyclopedia項目リンク
わろた

385:デフォルトの名無しさん
09/03/12 08:31:02
日本語のプロジェクトじゃなければ結構あるんじゃね

386:デフォルトの名無しさん
09/03/12 13:19:39
はじパイの第2版が中古で売ってたんだけど今のバージョンって3.0なの?
第2版は2.3までだからもうちょっと新しいのかったほうがいい?

387:デフォルトの名無しさん
09/03/12 13:57:08
>>386
個人的には2.4以降じゃないと嫌だなw
generatorなくてなんのPythonよ

388:デフォルトの名無しさん
09/03/13 01:55:16
UNICODEの扱いがちゃんと載ってるのにしなよ

389:デフォルトの名無しさん
09/03/13 02:56:44
JapaneseCodecsがあれば10年は戦える

390:デフォルトの名無しさん
09/03/13 13:40:57
Windowsで、2.5.2使ってるんだが、code(codeop)の動きがどうもおかしいんだ。

普通にコンソールでは、u''が使えるんだ。

>>> 'あ'
'\x82\xa0'
>>> u'あ'
u'\u3042'

だけど、InteractiveConsoleを使うと、

>>> import code
>>> code.InteractiveConsole().interact()
Python 2.5.2 (r252:60911, Mar 27 2008, 17:57:18) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 'あ'
'\x82\xa0'
>>> u'あ'
u'\x82\xa0'

と、u''を正しくdecodeしてくれない。

どうもcodeop.compile_CommandCompilerがこういう動作をしているようで、
IPythonでu''が化けるのも同じ原因のようだ。
Windows版のコンソールは、何か特別なパッチが当たってるんだろうか。
どこか設定をいじってやればコンソールと同じ動きするんだろうか。

まぁunicode('あ')とか書けばいいんだけどなんかくやしい。


391:デフォルトの名無しさん
09/03/13 13:54:02
>>390
2.6.1 amd64 で、 code.InteractiveConsole() では上手く動いたよ。
それでもIPythonはダメ。

392:デフォルトの名無しさん
09/03/13 14:49:33
>>391
2.6.1でやってみた。

>>> 'あ'
'\x82\xa0'
>>> u'あ'
u'\u3042'
>>> import code
>>> code.InteractiveConsole().interact()
Python 2.6.1 (r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 'あ'
'\xe3\x81\x82'
>>> u'あ'
u'\u3042'
>>> unicode('あ')
Traceback (most recent call last):
File "<console>", line 1, in <module>
UnicodeDecodeError: 'cp932' codec can't decode byte 0x82 in position 2: incomplete multibyte sequence
>>> unicode('あ', 'utf8')
u'\u3042'

なぜUTF-8www

2.5でも、codeop.CommandCompilerにunicode渡すとこんな動きになるんで、
ようするに2.6ではraw_inputがunicodeを返すようになっただけでCommandCompilerの挙動は変わってないみたいだ。
IPythonは、渡す前にsys.stdin.encodingでencodeしてるので、2.5と同じ動きになる。

コンソールで使ってるCommandCompilerの正体はいったいどこにあるんだ!?
ソースを読めばいいんだろうが、どこを読めばいいのかすら分からん。

393:デフォルトの名無しさん
09/03/13 15:00:15
【Python】Pylons Web Frameworkスレ
スレリンク(php板)

394:デフォルトの名無しさん
09/03/13 15:03:12
組み込みのcompileを使うと問題がよく分かる。

>>> exec compile("'あ'", '<input>', 'single')
'\x82\xa0'
>>> exec compile("u'あ'", '<input>', 'single')
u'\x82\xa0'
>>> exec compile(unicode("'あ'"), '<input>', 'single')
'\xe3\x81\x82'
>>> exec compile(unicode("u'あ'"), '<input>', 'single')
u'\u3042'
>>>

どうしろってんだ・・・

395:デフォルトの名無しさん
09/03/13 15:57:47
あんまりいい方法ではないと思うけど

import code
import sys

class MyInteractiveConsole(code.InteractiveConsole):
  def __init__(self, *args, **kw):
    code.InteractiveConsole.__init__(self, *args, **kw)
    self.__compile = self.compile
    self.compile = self.mycompile
  def mycompile(self, source, *args, **kw):
    if sys.stdin.encoding:
      if isinstance(source, unicode):
        source = source.encode(sys.stdin.encoding)
      source = "# coding: %s\n%s" % (sys.stdin.encoding, source)
    return self.__compile(source, *args, **kw)

if __name__ == "__main__":
  MyInteractiveConsole().interact()

396:デフォルトの名無しさん
09/03/13 16:15:11
>>395
それだと、結局最初の(2.5の)

>>> 'あ'
'\x82\xa0'
>>> u'あ'
u'\x82\xa0'

って挙動になるだけだよね。



397:391
09/03/13 16:23:50
なおした
URLリンク(dsas.blog.klab.org)

398:395
09/03/13 16:33:49
>>396
自分の環境(Windows)では2.5, 2.6でも↓のようになるのを確認したけど、ならない?
(MyInteractiveConsole)
>>> 'あ'
'\x82\xa0'
>>> u'あ'
u'\u3042'

399:デフォルトの名無しさん
09/03/13 18:55:32
ならない
sys.stdin.encoding

どこでも同じとは限らない

400:デフォルトの名無しさん
09/03/13 19:57:05
>>397
うん、それでsys.setdfaultencoding("utf-8")すれば使えるようにはなるんだ。
でもそれだとWindows環境でpysh使ったとき、にほんごファイル名が通らなくなる。(UTF-8に変換されるため。)

UTF-8Cygwin使う、ってのも一長一短だしなあ…

401:デフォルトの名無しさん
09/03/13 19:58:11
>>398
ならないなあ…
環境設定でなんとかなるのなら是非教えてほしい

402:デフォルトの名無しさん
09/03/13 20:42:48
>>400
sys.setdefaultencoding('utf-8') するのは何故?
>>397 の修正だけで、全く問題ないよ?
/open u"ソ.txt"
こんなのも余裕。

403:デフォルトの名無しさん
09/03/13 21:01:23
>>397の修正だとcp932の環境でstrの'あ'が'\x82\xa0'になって欲しいところ
utf8の'\xe3\x81\x82'になっちゃう

404:デフォルトの名無しさん
09/03/13 21:12:13
>>403
なるほど。日本語をcp932でstrで使うなんて発想が無かった。
from __future__ import unicode_literals
して、strと決別しちゃえ。

405:デフォルトの名無しさん
09/03/14 10:25:26
>>402
>sys.setdefaultencoding('utf-8') するのは何故?
cp932だとunicode('あ')でエラーになるからじゃないか?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5401日前に更新/114 KB
担当:undef