オライリーシリーズのPython本だ。初めての、とついてはいるが入門書という感じはしないな。ある程度pythonをいろいろ書いたあとなので、「へーアレって裏ではこういう風になってたのね」みたいな楽しみ方をしてる。気分は豆知識の収集。好きな言語なので、冒頭の言語紹介の部分からもう面白い。前半をさらっとなぞった段階でのメモをずらずら書く。いやマジでさらっとだぜ。700ページ級の技術書をじっくり読むのは緑さんには辛いよ。

  • pythonのソースが実行されるときは、まずバイトコードという中間形式にコンパイルされる。ライブラリフォルダのpycファイルがそれ。これのおかげで二度目からは読み込みが速くなる。
  • プログラムの階層は次のようになる。 プログラム <- モジュール <- 文 <- 式
  • raw.input() を使うとシェルがすぐ消えない。
  • 多次元配列のことを行列、マトリクスという。
  • ポリモーフィズムというのは多態性のことで、たとえば + が数値についていれば足し算を意味し、文字列についていれば結合を意味すること。
  • 小数は浮動小数点数と違い、桁数を決められる。
  • リファレンスとは変数からオブジェクトへのリンクのこと。これまでずっと、変数という箱のなかにオブジェクトが入っているイメージだったんだけれど、それは違ったんだな。実際は変数の領域に変数が、オブジェクトの領域にオブジェクトが存在しており、両者をリファレンスが繋いでいるという図式だった。
  • is は同一(ひとつのオブジェクトにふたつのリファレンスが繋がっている)を意味し == は同等(ふたつの同じオブジェクトにそれぞれのリファレンスが繋がっている)を意味する。
  • \0 を文字列に混入させてもpythonは文字列読み込みを終了したりしない。
  • str[:] でオブジェクトのコピーができる。
  • "%(n)d" % {"n":1} こんな文字列フォーマットが可能。
  • vars() は存在する変数をディクショナリで返す。
  • イテレータというのは繰り返し処理のこと。
  • lis.append(foo) というのは元のリストの更新で lis = lis + lis2 というのは新しいオブジェクトの作成を意味する。
  • タプルは list(tuple) でリストに変換できる。これはもちろん新しいオブジェクトの作成がされる。
  • 誰でも一度は抱く疑問「タプルってなんに使うの?」タプルはディクショナリのキーになれる。
  • リファレンスがなくなったときオブジェクトは廃棄される。
  • オブジェクトのコピーは copy() でもできる。copyモジュールとかいうのも存在しており、ふたつは別物。
  • 別々に定義したとしても、それが短い文字列の場合同一のオブジェクトにリファレンスが繋がる。えー…。
  • 文字列を比較するとき、アルファベットのあとのほうの文字ほどデカいとされる。
  • 次のようなことをすると循環オブジェクトができるが、処理が止まってしまったりはせず [...] と出力される。
lis = []
lis.append(lis)
  • 要素がひとつだけのタプルを作る場合 (1,) というようにコンマが必要。
  • リストにリストを追加するときは + で結合するより .append() のほうが高速。後者は上書きだから、らしいがなにがだからなのかわからん。
  • 拡張代入 += などは実は結合ではなく上書きが起きている。
  • 行の最後にバックスラッシュを置くと行をまたげる。
  • 知らなかったif文の書き方。
a = y if x else z
  • 文字列へのアクセスも配列へのアクセスのように str[0] とできる。
  • LEGBルールとはスコープの種類のこと。ローカル、外側の関数、グローバル、ビルトイン。
  • スコープというのは変数が見える範囲という意味。
  • 関数内の global はpython唯一の「宣言」といえる。宣言しているのは名前空間の宣言。
  • グローバル変数を関数内で変更したりするんでなければ global は使わんでいい。これは知らなかった。いっつも global していた。
  • ふつう関数内でグローバル変数のオブジェクトは上書きできないが、可変性オブジェクトは上書きができる。これは、可変性オブジェクトの引数は、値渡しではなくポインタ渡しのため。
def foo(a):
    a.append(2)
a = [0, 1]
foo(a)
print(a)         # [0,1,2]になっていやがる!
  • キーワード引数とは、その、次のようなやり方のことである! うん知らなかった。デフォルト値は知っていたがこんなこともできたのか。
def foo(x, y, z):
    ...
foo(z=2, x=0, y=1)
  • 仮引数にアスタリスクを使うやり方。何かに使えそうな気はするが何に使えばいいかまだ思いつかないな。
def foo(*args):  print(args)
foo(1, 2, 3)                 # (1,2,3)
def bar(**args): print(args)
bar(a=1,b=2)                 # {a:1,b:2}

分量でいえば半分読み終えたところだが、後半には関数についての高度なテクニックや、クラスの奴が待ち構えていやがる。あまりまじめにならずさくさく進んでがぶがぶ咬まれていこう。

  1. http://www.longchampbag.us.com/ longchamp le pliage
    http://www.airmax90shoes.us.com/ nike air max 2017
    http://www.nikeairmax-90.us.com/ air max 90
    http://www.kyrie-4.us.com/ kyrie 2 shoes
    http://www.curry4-shoes.us.com/ curry 4
    http://www.nikeairvapormaxflyknit.us.com/ nike air vapormax
    http://www.pandora-jewelrysale.us.com/ pandora
    http://www.pumafentyrihannashoes.us.com/ puma suede
    http://www.salomonspeedcross3.us.com/ salomon shoes
    http://www.pandorajewelryscharms.us.com/ pandora jewelry official site
    http://www.louboutinredbottoms.us.com/ christian louboutin mens sneakers
    http://www.jordans11shoes.us.com/ jordan shoes
    http://www.pandorajewelryrings.us.com/ pandora necklace
    http://www.yeezyboost350shoes.us.com/ yeezy shoes
    http://www.fitflops-sale.us.com/ fitflop sale
    http://www.birkenstocksandalssale.us.com/ birkenstock outlet
    http://www.kd10-shoes.us.com/ nike kd
    http://www.katespadepurses.us.com/ kate spade bags
    http://www.adidasnmdrunnerr1.us.com/ adidas boost
    http://www.hermesbirkin-handbags.us.com/ hermes wallets
    http://www.jordan11spacejams.us.com/ jordan 11 retro
    http://www.lebron15-shoes.us.com/ kevin durant shoes
    http://www.fitflopsshoes.us.com/ fitflops clearance
    http://www.adidasyeezy-350.us.com/ yeezy boost 350 v2
    http://www.adidas-ultraboost.us.com/ adidas ultra boost women
    ドリフトliuyuzhen