2015年8月19日水曜日

Pythonの変数スコープ

Pythonのサンプルプログラムを見ていて気になることがあった。
例外処理でtry-catch-finallyの外側で変数宣言をしていないのに、tryとfinallyそれぞれで同じ変数を参照していた。 
 
try:
    instance = SomeClass()
    instance.getSomething()

except Exception, e:
    print 'Error %s' % e

finally:
    if instance is not None:
        instance.doSomething()

JavaやC++ではこのような書き方はエラーになるので非常に違和感があった。
そこで調べてみたところ、 Pythonでは変数のスコープは基本的に

  • クラス
  • 関数

この二つしかなくif分や例外等の制御構文ではスコープは存在しないということだった。
参考:Python の名前空間とスコープ

2015年8月18日火曜日

PythonとMacPorts

Pythonを勉強中で環境を構築中。

基本的に必要なモジュールはMacPortsを使ってインストールをしているが、MacPortsでPythonをインストールするとデフォルトでMacに存在するPythonとバッティングする。

virtualenvとかを使えばうまく切り分けられるのだろうが、まだあまり理解できていない。

ひとまず、MacPorts側でどのPythonを使うのかは次のコマンドで設定ができる。
 $ sudo port select python

すると次のように選択肢を表示してくれるので使いたいものを選ぶ
 
Available versions for python:
 none
 python25-apple
 python26-apple
 python27 (active)
 python27-apple

$ sudo port select python