象とニシキヘビ



日本人で初めて象を見た人は一体誰なんでしょう。
それまで牛とか馬とかそんな動物しか見たことが無い人が、
象を見た時の驚きはいくばくであっただろうか。

しかし、日本に象を連れてきて、まじかにそれを観察しても、
本当の象のことは分からないかもしれない。
象を理解するには、象の住んでいるサバンナなんかに行って、
その環境や、一緒に住んでいる他の動物を見た時初めて、
ああ象ってのはこんな動物なんだとわかるのかも知れないと思う。

この『Python』と言う言語は、なにかとてつもない可能性を感じる
言語である。
プログラマと言うのは大体『C言語』が基本にあって、それから派生した
言語を学ぶことが多い。

そういう標準的なプログラマが『Python』に初めて接すると、なにか
自分がからかわれているのではないかと言う感覚に陥る。
なにかとてつもない深い罠が有って、その底いる大きなニシキヘビに
巻き付かれて、身動きが取れなくなる、そんな感覚に。

GoogleのフェイスブックはこのPythonが使われているという。
しばらくはこのニシキヘビにぐるぐる巻かれて動きが取れなくなりそう。

象を理解するように、Pythonが使われている状況なんかも、
理解しながら、最後にはこのニシキヘビを鍋にして食べようと思うのだが。
しかし気が付いてみたら逆にPythonに食べられていたりして...
  
タグ :Python


2011年10月01日 Posted by igoten at 08:00Comments(0)Python

pyscripter  __main__



PyScripterを起動すると

def main():
 pass

if __name__ == '__main__':
 main()

と言うコードが書かれていますがこれは一体何でしょうね?

__name__と言うのはビルトイン属性で、pythonのあらゆるモジュールが
必ず持っていて、自動的に以下のように設定される。

○そのファイルが起動ファイルに場合はこの属性に値として、
  __main__が指定される。

○そのファイルがインポートされる場合は、値としてモジュール
  名が指定される。

と言うことだそうです。
つまり起動ファイルで何かしたい場合はこれを使って起動ファイルか
否か調べ、特に必要が無ければ消してしまっても問題が無いと言うことです。

  


2011年05月17日 Posted by igoten at 23:56Comments(0)Python

ラムダ式


ラムダ式はC#にも有るが面倒なので放置してあった。
Pythonを学ぶにあたって少し突っ込んで調べてみた。

Wikiによると
例えば、ある数に 2 を加える関数 f() を考える。
これは通常の書き方では f(x) = x + 2 と書くことができるだろう。
この関数 f は、ラムダ計算の式(ラムダ式という)では \x. x + 2 と書かれる。
変数 x の名前は重要ではなく、 \y. y + 2 と書いても同じである。
同様に、この関数に 3 を適用した結果の数 f(3) は (\x. x + 2) 3 と書かれる。
関数の適用は左結合である。
とある。

さて、これをPythonで書いてみると。
普通の関数の場合は

def f(x):
 return x + 2

普通の関数呼び出し
print f(2)  #4を出力する


これをラムダ式で書くと
f = lambda x:x + 2
print f(2) #4を出力する


(lambda 変数:数式)(代入の値)
と書けるので上の式は
print (lambda x:x + 2)(3)    #4を出力する
と書ける。

そしてこれは式なのでコードの中に埋め込みで書けるのだ。

変数が複数の場合は
f=lambda x,y,z:x + y + z
print f(1,2,3) 
更にこれは
print(lambda x,y,z:x+y+z)(1,2,3)
書くことが出来る。

これは関数にすると
def f(x,y,z):
return (x + y + z)

をf(1,2,3)として呼び出したことになる。

このラムダ式を使うと、関数を作らなくても、数式を
計算式などの中に埋め込めると言うのである。

  


2011年05月12日 Posted by igoten at 11:58Comments(0)Python

Python事始め



Python(パイソン)とはニシキヘビの事である。
最近特にPythonに関する記事が多くなった気がする。
Googleが力を入れ始めたことや、FacebookがPythonを
使っていることなどから急に脚光を浴び始めたのだろう。

プログラム言語のC、C++、C#、Java、JavaScript、Perl、Rubyなんて皆
親戚の様に思える。
私にすれば言語構造なんてどうでも良いし、継承やデリゲート、
クラスだって無くても有ってもそんなに変わらない。

言語の良し悪しは、開発環境とライブラリーによるのだ。
その意味から言えば有料だけあってC#が一番使い良いと思っているが、
サーバー上で動作させようとすると、環境が限られてしまう。

ところがであるPythonのライブラリーは既にC#を凌駕していると言うのだ。
C#で困るのがUSBのプログラムである。
たぶん今のところC#用のUSBのライブラリってのは無いんじゃないのかな。
そこで『Python USB Lib』でググってみた。
その結果『PyUSB』なるものが有ることがわかった。

うーん!これは結構いけるかも、しかもpyscripterなるものが有って
何と無料で、統合環境が提供されていると言うのだ。

これはもうやるっきゃ無いでしょう。
と言うことで今日からPythonを始めたのだ。

先ずPythonのダウンロードだが、Pythonのホームページから
ダウンロードするのが一番なのだ。


(画像をクリックするとPythonのホームページに飛ぶ)

この左側にあるメニューの中から DOWNLOAD をクリックして
32bit版のWindowsなら
Python 2.7.1 Windows Installer (Windows binary -- does not include source)
64bit版のWindowsなら
Python 2.7.1 Windows X86-64 Installer (Windows AMD64 / Intel 64 / X86-64 binary [1] -- does not include source)
をダウンロードしよう。

ちょっと気になるのは、
Python 3.2 Windows x86 MSI Installer
なるものが有ることだ。
こちが新しいバージンなのではと思うのが普通であるが、2と3は互換性の無い
バージョンで将来は3になるのだがとりあえず今回は2で行く。

ダウンロードをすると『python-2.7.1.msi』と言うファイルが出来るので
これをダブルクリックしてPythonをインストールする。
インストールは通常何の問題も無く行われるはずである。

インストールが終了すると、『C:¥(Cドライブのルート)』の下に
『Python27』と言うフォルダーが出来て、DLLs、Doc、include、Lib..
等のフォルダーとLICENSE.txt、python.exeなどのファイルが出来ている。

試しに『python.exe』の実行ファイルをダブルクリックすると、懐かしい
DOS窓が開く。
試しにお約束の『>>>print "Hello,Python!』と入力してリターンを
押すと、『>>>Hello,Python!』と表示されて、Pythonが問題なく
動作していることがわかる。


さてWindowsの左下のスタートメニューを見ると『Python2.7』と言う項目が
出来ていて、その中に
IDLE(Python GUI)
Module Docs
Python Manuals
Uninstall Python
と言うファイルまたはフォルダーが出来ている。
IDLE(Python GUI)をクリックすると下のエディターが表示される。
そこでお決まりの『>>>print "Hello,Python!』と入力してリターンを
もちろんその結果は間違いなく表示される。



しかしこれで終わったわけではない。
Python開発統合環境のpyscripterなるものが有る、これも
インストールするのだ。

(pyscripterは上の画像をクリックしてください)
このページの左側のDownloadメニューで
PyScripter-v2.4.1-Setup.exe
をダウンロードして、インストールする。

たぶんこれも全く問題なくインストールされるはずである。
そしてWindowsのスタートアイコンを押すと


こんなエディターが表示された。
ここに下のコードを打ち込んで、GoogleのHTMLを、
読み込んでみた。

import urllib
url = "http://www.google.co.jp/"
fd = urllib.urlopen(url)
data = fd.read()
print data
fd.close()




GoogleのページのHTMLがいとも簡単に表示された。

これは使える! 
もしかしたらPythonづけになる予感。
  


2011年05月11日 Posted by igoten at 23:40Comments(0)Python