[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/09 11:17 / Filesize : 114 KB / Number-of Response : 569
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Pythonのお勉強 Part32



1 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 01:45:30 ]
Pythonオフィシャルサイト
www.python.org/
日本Pythonユーザ会
www.python.jp/Zope/
まとめWiki
python.rdy.jp/
関連スレ
find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python
前スレ
pc11.2ch.net/test/read.cgi/tech/1230821097/

275 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:58:39 ]
簡潔か微妙な気もするけど

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

277 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 19:15:26 ]
リスト内包表記を map にしてみた。

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


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

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


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

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


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

283 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:10:34 ]
276と277の比較なら276のが読みやすい。

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


286 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:34:59 ]
偏向する必要がないならタプルを使う。

287 名前:269 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 23:44:01 ]
遅くね?

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

290 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 23:57:35 ]
ごめん、↑のdict{}はdict()だ

292 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:10:11 ]
見つからないkeyは結果からは無くなった方が良いのかな

293 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:14:25 ]
部分辞書だからな



294 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:44:29 ]
ttp://blog.livedoor.jp/dankogai/archives/51183459.html

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

勧めるなよ(wwwwWwwWwwwWWwwww


295 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:56:50 ]
この本が一番いいんだけどな
www.amazon.co.jp/dp/4839922829

296 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:00:33 ]
っ ttp://blog.livedoor.jp/dankogai/archives/51040648.html

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

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

298 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:50:51 ]
>>294
その本出版社が潰れて買えなくなってるよ。

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


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

301 名前:デフォルトの名無しさん [2009/03/02(月) 17:06:56 ]
age

302 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 17:08:06 ]
>>297
xkeymacs入れてしまえ

303 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:26:46 ]
はぁ?

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

306 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 00:07:05 ]
reduce とか lambda とかそのうちなくなるだろ。

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

308 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 00:51:03 ]
lambdaって無くなるのかな

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

310 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:29:17 ]
lambdaの中で代入とか複数の文とか出来るようになるのはいつ?

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

312 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:54:42 ]
どっちみちreduceはfold_left相当でfold_rightはないし
unfoldもないけどな

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



314 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 04:53:23 ]
Haskellのwhereって式?

315 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 08:02:01 ]
⊂二二二( ^ω^)二⊃

316 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 09:02:51 ]
>314-315
ナ、ナンダッテー>ΩΩΩ

317 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 09:53:35 ]
Haskellのwhereはcase式の一部
ttp://www.haskell.org/onlinereport/exps.html#sect3.13

318 名前:デフォルトの名無しさん [2009/03/03(火) 12:15:02 ]
ttp://www.atmarkit.co.jp/club/print/print.php

319 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:54:49 ]
ttp://www.oreilly.com/catalog/covers/twistedadn.s.gif
この本の日本語版ってありますか?

320 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 13:34:23 ]
>>245
JCC

321 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 14:53:57 ]
>>319
この表紙は人を選ぶな…

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

323 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 16:23:05 ]
>>319
> ttp://www.oreilly.com/catalog/covers/twistedadn.s.gif

グロ
閲覧注意




324 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 17:39:28 ]
ただの模様じゃん
なんも樹に成らん

325 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:36:22 ]
俺は樹になる

326 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:06:21 ]
カバーをひっくり返して、好きな絵を描くといいよ。

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

328 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 09:21:27 ]
そもそも蛇嫌いはpythonでアウトな気がする。

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


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

331 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 18:34:07 ]
日本語版はおっぱいでおk

332 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 20:03:47 ]
>>331
エロ本コーナーに並びそうだな。

333 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 21:15:19 ]
ジャイソンかサイソン
   どっち?



334 名前:デフォルトの名無しさん [2009/03/05(木) 15:44:46 ]
get 333

335 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 17:29:58 ]
ttp://www.python.com

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

337 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 02:04:38 ]
アイコンの蛇って名前とか付いてないの?

338 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 02:11:47 ]
やっぱ時代はRubyだよな

339 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 02:33:09 ]
ぱいちんこ

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

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

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

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



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

345 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:24:10 ]
こういうアドレスを買収しようとしたら
いくらぐらいかかるんかね


346 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 01:37:51 ]
2万円

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

348 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:48:43 ]
3万円

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

350 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 10:19:53 ]
訂正します

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

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

353 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/03/08(日) 16:59:02 ]
質問してるのか、
問題を喚起しているのか、
ツンデレなのか、
はっきりしなさい!

355 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:39:14 ]
eval関係無く動くまい

356 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 18:00:41 ]
ツンデレです

357 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 20:43:28 ]
適切に sys.path.append していないと予想

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

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

360 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:10:33 ]
print h.handle("import numpy; numpy.linalg.norm([1,2])")

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

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

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



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

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

365 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:01:48 ]
sys._getframeを呼び出してるメソッドは継承すると酷いことになる

368 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 10:49:07 ]
ウーパールーパーって食えるんだな
ttp://www.fnn-news.com/news/video/wmv/sn2009030908_hd_300.asx

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

370 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:33:20 ]
>>369
自分で勉強しろ

371 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:51:17 ]
やりたい

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

373 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 00:01:34 ]
>>370
どっちの意味?

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



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

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

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

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

375 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 00:08:59 ]
>>374
学校を作ろうを馬鹿にするな!!






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<114KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef