(続き)「エキスパートPythonプログラミング読書会 第二期 02」参加してきました。

感想は前回述べたので、今回は本編についてのまとめ
●リスト内包表記
    -mapより速い
        前はmapを使っていたが、mapはあくまで関数
        リスト内包表記は内部処理としてあるので、リストの方が早い
    -enumerate関数
        ループ処理でインデックスやカウンタを使いたい時に便利
    -リスト内包表記は慣れると書きやすて便利
        だけど可読性が低くなるときはfor文などの読みやすい方にする
        そのほうがPythonic
●Pythonic
    -Pythonのインタラクティブシェルで、
    import this
    と打つとそのThe Zen of Python、その世界観に触れることができる
●イテレータ
    -nextメソッド、__iter__メソッド
        プロトコルに問い合わせる関数
    -「プロトコル = アダプター」
        lenもアダプター
        シンタックスの分かりやすさを、
        ”アダプターをかましている”という考えだとしっくりくるかなと
    -イテレータプロトコルはどこで誰が定義したの?
        →リファレンスマニュアルに規約が乗っている
        →いまだとabc(抽象基底クラス)や仮想クラスのような形で、
        に乗っている
        ここを満たしていると、よりモダンな感じになる
    -たとえると、
        単にラップされていて、
        必要なものに必要な処理をするための橋渡しをしている
        コンセントのアダプタを意識すると分かりやい
        (海外にいくと必要)
        プロトコルに対応されていると、
        それはイテレータであることを保証している
        (ダックタイピングの話)
        ただそれだとゆるすぎるから、
        isインスタンスで証明できるようにしている
        改行コードを受けった時に改行単位で、行読み出しなど
        好きな単位でnextで読み込みできる組み込みでもある
        関数など使わなくても、for文回せばいいのねという認識になる
●ジェネレータ
    -yield
        yieldがあるとジェネレータになる関数ではない
        returnだと関数になるが、
        yieldだとジェネレータの中にreturn書くなと怒られる
    -StopIterationはお約束で、ループを抜けるために必要

   -ジェネレータはイテレータプロトコルを実装しているので、
     多段にyieldとかやるとメモリをほとんど食わずに、
     ほぼ無限長のものを扱える
     20GBのログなども落ちずにできると思う
    -フィルタ条件とか色々かましたくなってくると便利になってくる
    -sendメソッド
        ジェネレータを外からコントロールすることは不可能だったけど
        Python2.5でsendメソッドを搭載したので、
        コントロールできるようになった
        初期化の時はsendは使えない
        最初にnext使ってやらないといけない
        ジェネレータのそれ以降の動きを方向転換することができるのが、
        sendのいいところ
    -closeメソッド
        close()を渡すとexceptionを発生させる→finallyで拾う
●PEP
    -Python Enhancement Proposal(Python拡張提案)
    -PEPはPythonのモダンな仕組みを取り入れるためのもの
    -PEP8はPythonのコーディング規約を書いたもの
    -組み込みだとタスク
    -スレッドだとデッドロックを考慮する必要がある
●ジェネレータ式
    -リスト内包表記だと最初にメモリを食ってしまうため、
     順次処理ならジェネレーターで
    -順次処理系だとDBで1行(カーソル)を取り出していって、
     ジェネレーターでやると10万行一気に読みこまないで済むので便利
●range()とxrange()の違い
    -xrange()はオブジェクトを返している
    -xrange()はPython3でrange()になるためいらないと思われ
    -清水川せんせはほとんど使っていない
    -10万のrange() を作る時は有効ではある
取っていたメモを元に書いてみました。
過不足ありそうですが、ひとまずこれにて振り返り終了。
@tfmagicianさんのツイートにもあったけど、
清水川せんせのライブコーディングのログがあったらなあと。
ブログ書いてて思い出せない所があったりして、
もどかしい思いもしたので次回からは是非残して欲しいと思う。

(感想)「エキスパートPythonプログラミング読書会 第二期 02」参加してきました。

参加された皆さんお疲れ様でした。
今回参加されなかった皆さん次回にお会いしましょー。
さて今回学んだ内容は後ほどまとめるとして、
ところどころ思ったところについて書き連ねてみます。
今回は仕事が忙しくていけるかどうかわかりませんでした。
20:00までかかりそうだったので
今回はちょっと厳しいかなと思ったのですが、
しっかり報告をしてきて5分遅れで到着。
ほんとは10分くらい遅れると思ったけど、
道がわかってたからまっすぐこれた。
(途中 @usaturn さんと一緒になりました。)
今回からは前期にのっとって、自己紹介からスタート。
とはいっても30人全員だとそれだけで時間が終わってしまうので、
5分ほどの間各島(しま)、テーブルごとに自己紹介でアイスブレイク。
自分は @shomah4a さん、 @kanonji さん、 @takanory さん、
@tfmagician さん、 @Akira_Kito さんと自己紹介させて頂きました。
その後読書会。
今回は清水川せんせも、
「第2章と3章はこの本では言語として一番難しいところ」
とおっしゃっていたこともあり質問の数も少なかったように思う。
今回やった範囲は
「第2章 構文ベストプラクティス-クラス以外」の前半、
●リスト内包表記
●イテレータとジェネレータ
自分も後追いで理解するのに必死すぎて他になかなか頭が回らない……
もっと具体的な使い所はPythonでプログラム書き続けていくと、
「あ、ここ使える」
というポイントがでてくるのかなと思いました。
今は頭ではわかっていても実際どうするというところまでいけてない。
ここについてまた改めてまとめます。
そして全体の所感ですが、
●LTやっぱおもしろい。
今回は@usaturnさんもLTした。
ただLTはLTで面白かったけど周りと話す時間がなくなり、
若干物足りないところもあった。
最初30分懇談時間で、
最後30分に4, 5人でLTとすると丁度いいのかなと思った。
参加の際に「LT希望されますか」の欄があったらいいかも。
お館様 のご尊顔把握(ただし実は影武者らしい)
●世界の小宮、LT枠(ピザ枠 or すし枠)で登場。流石。
●帰りの電車で @yosida 95と一緒に。イケメン。
「イケメンですね」と聞いたら、
「はい。よく言われます。」と言われた。
切り返しもイケメン。
●もしLTやりたくなった時にGoogle DocsのPresentationだと
物足りないから、とりあえずKeynote買っとこう。
最後に、
清水川せんせと世界の小宮さんの写メり合い面白かったです(笑)
あれを写真に取れなかったのだけは悔やまれる!
既に次回の予定も決まってます。参加予定です。
その他にも時間内にでてきた参考リンクです。
(nightly版ですが、2.7ja1もあります。 こちら
やはりこのエキPy読書会は鍛えられている感じがあっていいですね。
皆勤賞達成して、その頃にはPythonistaになりたいです。

エキスパートPythonプログラミング

posted with
at 11.12.13
Tarek Ziade
アスキー・メディアワークス
売り上げランキング: 18862

Pythonの仮想開発環境作成ツール-virtualenv1.7-での変更点

気がついたら virtualenv が1.6.4から1.7にバージョンアップしていた。
(virtualenvについては こちら でも書いてみた。)
以下変更点。
-  Updated embedded Distribute release to 0.6.24. Thanks Alex Grönholm.
-  Made  `--no-site-packages` behavior the default behavior.
   The  `--no-site-packages` flag is still permitted, but displays a
   warning when used. Thanks Chris McDonough.
-  New flag:  `--system-site-packages`; this flag should be passed to
   get the previous default global-site-package-including behavior back.
-  Added ability to set command options as environment variables and
   options in`virtualenv.ini` file.
-  Fixed various encoding related issues with paths. Thanks Gunnlaugur
   Thor Briem.
-  Made  `virtualenv.py` script executable.
特に大きいなと思ったのが2つ目の変更点
virtualenv1.7は指定しなくても
–no-site-packagesを勝手に指定してくれるようになった。
–no-site-packagesはインストール済みのモジュールを、
全て外した状態で仮想環境を作成できるオプション。
これをつければ、
virtualenv内のパッケージのみのリストを得ることができる。
しかし今までは、
python virtualenv.py --no-site-packages env1
といちいち指定しなければならないので面倒だった。
これが
python virtualenv.py env1
で済むのだから快適と言わざるを得ない。
人によっては、
  • インストールするPythonのバージョン(2.5, 2.6, 2.7, etc)

  • パッケージ管理ツール distribute

など指定するオプションも多いはず。
(例)
python virtualenv.py --distribute --python=python2.5 --no-site-packages env2
distributeは既にデフォルトで設定する方法もあるようなので、
virtualenv1.7で–no-site-packagesもデフォルトにできるようになったのは大きいと思う。
ちなみに確認のため–no-site-packagesを付けて試してみたところ、
インストールが始まる前に
The --no-site-packages flag is deprecated; it is now the default behavior.
と表示された。
確かにインストールしてくれているようだ。
より使いやすく便利になったね!