タグ

ブックマーク / atsuoishimoto.hatenablog.com (2)

  • UnicodeDecodeError/UnicodeEncodeErrorに悩まないPython 2.x プログラミング - atsuoishimoto's diary

    最近、ときどきTwitterで「Python」を検索して眺めていたのだが、Pythonの分かりにくいところとして「UnicodeDecodeErrorが出てうざい」という不満をよく見かけるようだ。 確かに、Pythonでは、数字やアルファベット以外のユニコード文字を使おうとすると、対応する処理を書かなければUnicodeEncodeErrorやUnicodeDecodeErrorが出てしまう。Python3では色々改善されているのだが、Python2では分かりにくい点も多い。 このUnicodeDecodeErrorを見て、「Pythonは日語が苦手だ」と考えてしまう人も多いだろう。確かにそう思ってしまっても仕方がないが、それは正しくない。日人だけでなく、アメリカ人でもフランス人でもドイツ人でも、ユニコードを使う時はみんな等しく平等にこのエラーを出しているのである。 もちろん、慣れてし

    UnicodeDecodeError/UnicodeEncodeErrorに悩まないPython 2.x プログラミング - atsuoishimoto's diary
  • クロージャのひみつ - atsuoishimoto's diary

    やっとPythonのクロージャの仕組みを少しは理解した件 で、清水川先生がクロージャを返すとき実行中のフレームオブジェクトが保存されるのか?という疑問を呈されている。 結論から言うと、フレームオブジェクトは保存されず、クロージャが必要とするオブジェクトだけが残される。この辺の仕組みがを簡単に解説してみよう。尚、以下の解説はPython2のものであり、Python3については未調査である。 例として、こんな関数を考えてみよう。 def func(): a = 100 b = 200 c = 300 def func2(): return a, b a = 400 return func2 この例では、func2 は func のローカル変数 a と b を参照するクロージャである。実行すると、(400, 200) を返す。 さて、関数を実行中、そのローカル変数は "セル"(cell)というオ

    クロージャのひみつ - atsuoishimoto's diary
  • 1