2010/01/11

Pythonでモジュールをインポートする方法

モジュールというのはとりあえずここでは .py ファイルのことだとする。
要するに他の .py ファイルで指定された変数や関数を使用するにはどうすればいいのかということ。
例えば、以下のような .py ファイルがあるとする。

# file1.py
def sample(text):
print text

この file1.py で宣言された関数である sample を対話型シェルから使いたい場合、以下のように importステートメントを使用する。

>>> import file1
>>> file1.sample("hello")
hello

このとき、関数名の頭に「file1」を付けたくなければ以下のよう fromステートメントを使用すればいい。

>>> from file1 import sample
>>> sample("hello")
hello

「file1.py」から現在の名前空間に sample という変数をコピーしてくる、という動きになる。
便利ではあるが、名前空間にすでに sample という変数が存在した場合はそれを上書きしてしまうので注意が必要。

なお Python においては、変数はオブジェクト(関数もオブジェクト)へのリファレンスを格納するものなので、すでに宣言しているsampleが関数で、名前空間にコピーした sample が「変数」ならば上書きは起こらないのではないか? という疑問に対する答えは No になる。

ちなみに、インポート対象となる .py ファイルは以下の4つの場所から探される。

  1. プログラムのホームディレクトリ

  2. 環境変数「PYTHONPATH」で指定されたディレクトリ

  3. 標準ライブラリモジュールのディレクトリ

  4. 「.pth」ファイルに記載されたディレクトリ


ここで「ホームディレクトリ」とは、importステートメントを記述しているファイルが存在するディレクトリ、または対話型シェルを実行しているディレクトリのことを示す。

2010/01/09

講演「『優しい関係』から生まれる排除」について

パルテノン多摩で企画されている連続講演「看過される日常的排除」の1回目。
講師は筑波大教授の土井隆義氏。
私の時間のルーズさは休日に拍車がかかるため、30分遅れで現地着。

・・・

かつて学校においては、画一的な価値観が押し付けられていた。
生徒たちは、そこで押し付けられた価値観を内面化した。
多様な価値観は忌避される。従うべき唯一の価値観がはっきりとしていた。

モノサシがひとつしかないから、何が正しくて何が間違っているかはただちに判断された。
間違いと判断された思想や人間は排除された。価値観は共有されていたから、排除から逃れることは容易ではなかった。どこに逃げても、そこには同一の価値観を持った人間がいたから。

しかし80年代に変化が訪れた。
均質な商品を販売するだけの戦略に限界を感じた産業界が、多様な商品を開発するために多様な価値観を持った人材を求め始めた。産業界の要請を受けた当時の首相中曽根康弘は臨時教育審議会なるものを設置した。「臨教審」と略されるこの審議会によって、多様性を重視する教育が推進されることとなった。

かくして、学校から画一的な価値観は失われた。様々な価値観が平等に評価されるようになった。多様性の尊重は人を幸福にしたように見えた。確かに抑圧的な価値観の押し付けがなくなったことで、人はある程度は自由になった。
しかし価値観とは言うなれば評価基準である。画一的な価値観が失われれば、画一的な評価もできないということである。どのようにすれば他人から評価されるのか? 価値観が多様化しても、人は他人から評価されたいという承認欲求からは自由になれない。
それに価値観の多様性と言っても、本当の意味での多様性ではない。学校や社会が容認した価値観しか認められない。多様性を装っていても、その裏では検閲のシステムが働いている。見えないところで、検閲に抵触した価値観は否定されている。
正しさのリストはないが、間違いのリストはある。つまり正解はないが、間違いだけは山ほどあるという状態になった。

モノサシが定められていれば、それに従っているだけで他者の承認を得ることができる。しかしモノサシがなくなってしまい、どのように振舞えば承認が得られるかがわからなくなった。
価値観を内面化できないのだから、他者の価値観を気にする必要が出てくる。価値観を内面化できないから、他者の批判に対して脆弱になる。でも、コストをかけずに承認とリスクヘッジを達成する方法がある。それは自分と似ている人間としか付き合わないことだ。
かくして、極度にフラットなコミュニティ。「優しい関係」とでも呼ばれるような関係が構築される。これは閉じた世界であり、その外部には何もない。実際には外部にも人がいるが、それは認識されない。「優しい関係」の内部だけが世界なのだ。コミュニティのフラットさを損なうような「他者」は、最初からコミュニティに含まない。

「優しい関係」は絶対的にフラットである必要があるため、無意識のうちに相互監視が働く。フラットさを傷つけるようなことを誰かしていないか? 全ての構成員が他のすべての構成員を見ている。全ての構成員が他の構成員から見られている。この視線に、人は耐えられない。
視線から逃れる必要がある。そこで誰かに視線を集中させることで、自分が見られることから逃れようとする。敵を捏造し、そこに視線を集中させる。でも「優しい関係」の外部に人はいないから、コミュニティの内部の誰かがその「敵」になる必要がある。そしてあからさまな排除的行為は、フラットさに傷をつける。だから排除は遊びの体裁でラッピングされる。
これが「優しい関係」から生まれる排除の構造だ。コミュニティがフラットであることは、自己の存在に関わる重大事である。だからフラットさを保つために排除を実行するのは、自己を守るために必要不可欠な行為なのだ。この排除はある種の「正当防衛」の様相を帯びている。誰もが本質的には被害者であるような排除。

2010/01/05

Pythonとジェネレータとフィボナッチ数列

実行するたびにフィボナッチ数列をひとつずつ返す。そんな関数を実装したい。

まずはフィボナッチ数列を返す関数の基本的な実装。

def fib(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)

# print fibonacci number 1st to 10th
for i in range(10):
print fib(i)

素朴なやりかたとして皮を一枚かぶせてみる。

def fib(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)

def fib2(n=0):
while True:
yield fib(n)
n += 1;

fibonacci = fib2()
# print fibonacci number 1st to 10th
for i in range(10):
print fibonacci.next()

とりあえず当初の目的は達成されたものの、あまり琴線に触れるコードじゃないな。
しかしPythonは書きやすくていいな。

2010/01/02

精神疾患擬人化本

会社で働いていると事あるごとに計画を立てることの重要さを痛感させられるが、そんなものは無いほうが上手くいくことだってある。面白い本との出逢いなどはその代表例で、Amazonで目当ての本を一本釣りするのもいいけれど、当てもなく本屋をぶらついてる時に限って良質な本を発見したりするものだ。予想外のものこそ面白いのだから、面白いモノが計画の外側にあるのは当然のことではないか。

昨年末に参加したコミックマーケットについてもそれは同じだ。参加者の中にはカタログで事前に巡回するサークルのアタリをつけておいてそれらを回りきったら早々と会場を後にする、という計画的な人もいるようだが、コミケで事前に計画などしてどうする。無計画に時間いっぱいまで会場を彷徨い歩く中での(怪しげな)本との一期一会こそがコミケの醍醐味ではないか。

というわけで、今回もそんな「計画の外側」に何冊か面白い本を見つけたが、その中で色々と考えさせられたのが以下。



タイトルは『精神疾患擬人化本』。発行サークルは「鴨屋」。
擬人化(というか萌えキャラ化)モノこそ最近では多く目にするようになったけれど、確かに「精神病」はまだ擬人化されてないかも。まあ「精神病患者」自体は擬人化する前から人間なんだけど。



内容的には一般的な擬人化本と同じような構成になっており、病気を擬人化したイラストとその内容についての簡単な解説のセットが大部分を占める。黄色い救急車の都市伝説についての考察や、詐病と「ミュンヒハウゼン症候群」の違いや、「対人恐怖症」は日本人に固有の「文化依存症候群」であり、英語表記も「Taijin kyofusho symptoms (TKS)」となっているといったことはこの本で初めて知れてなかなか面白かった。正気と狂気の間がグラデーションになっており、精神病の世界は健常者のそれと陸続きになっていることを指摘することも忘れていない。
精神病については色々と思うところがあるが、文章にまとめられるだけの知識がまだないのでまたの機会に。