知能システム論 1 (3) 2009.4.21 情報システム学研究科情報メディアシステム学専攻知能システム学講座末廣尚士
- 講義資料の HP http://www.taka.is.uec.ac.jp/ から右のメニューの class をクリック または http://www.taka.is.uec.ac.jp/class200 9/class2009.html を直接入力
2. Python 入門 - Python の特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ 段付けによるブロック構造 柔軟なデータ型 リスト 辞書 拡張性 C 言語インタフェース内観機能 プログラムの中から変数などの情報を得ることができる 参考 : 日本 Python ユーザ会 <http://www.python.jp/>
- Python のどこが良いか
- 参考書 オンラインドキュメント http://www.python.jp/zope/links/python_ documents チュートリアル http://www.python.jp/doc/release/tut/ Python デスクトップリファレンス ( オライリー ジャパン) はじめてのPython ( オライリー ジャパン )
- Python のインストール Python のインストール VPython のインストール バージョンを合わせる必要がある Windows インストーラによるインストール Linux インストールはディストリビューション依存インストール済みVMware Image VMware Player が必要 <http://www.vmware.com/jp/products/player/>
- Windows でのインストール <http://vpython.org/win_download25.html> から以下をダウンロード Python-2.5.1.msi VPython-Win-Py2.5-3.2.11.exe pythonから順にそれぞれのファイルをダブルクリックしてインストール pythonは c:\python25 にインストールすること ( デフォールトはそうなっている )
- Vine Linux でのインストール (1) linux の場合インストールはディストリビューション依存 ここでは例として Vine まずVine4.2をフルインストール パッケージを最新し 開発キットを入れる # apt-get update. # apt-get upgrade. # apt-get script install-devel.lua. python2.4.4 が入った状態になっている
- Vine Linux でのインストール (2) libboost-python, libboost-python-devel, python-numeric, python-numeric-devel を apt-get または synaptic で入れる libboost_python-gcc33.so に libboost_python.so からリンクを張る # cd /usr/lib # ln -s libboost_python-gcc33.so libboost_python.so
- Vine Linux でのインストール (2) <http://vpython.org/linux_download.html> から gtkglarea-1.2.3.tar.gz, visual-3.2.9.tar.bz2 をダウンロードして展開 それぞれのディレクトリで make してインストール configure のときに --prefix=/usr を忘れないこと $ cd gtkglarea-1.2.3 $./configure prefix=/usr $ make $ su # make install $ exit $ cd visual-3.2.9 $./configure prefix=/usr $ make $ su # make install $ exit これで完成 ただしgtkのwarningがでる
- VMware イメージの使い方 Vine4.2にVPyhonまでインストールしたものをVMware Image ( 約 3.5G) として用意してある これを使うには VMware Playerなどが必要 <http://www.vmware.com/jp/products/player/> から VMware Player 2.5.1 のインストーラをダウンロードしてインストールする VMware Image をダウンロードして My Virtual Machines のフォルダに置く VMware Player から走らせる
- Python 入門 Hello World 変数データ型演算子制御構造関数オブジェクト内観機能モジュール
- Hello World(1) インタラクティブにやるのは とても簡単 >>> print "Hello World!" Hello World! スクリプトファイル :hello.py の場合 #!/usr/bin/env python # -*- Python -*- print "Hello World" unix の場合のおまじない # は一般にはコメント でもファイルの先頭の #! はシェルコマンドを指定する
- Hello World(2) Windows の場合で実行 コマンド窓でやる でないと一瞬で消える または python idle で開いてモジュール実行 C:...> hello.py Hello World Linux の場合 $./hello.py Hello World $ python hello.py Hello World この前に $ chmod a+x hello.py などとして実行可能にしておく必要がある こちらだと おまじない も 実行属性 もなしでも OK
- 変数 変数は宣言なしで使える変数にはいろいろな型のデータを代入することができる >>> a=1 >>> b=2 >>> b=2.0 >>> c="abc" >>> d="def" >>> a+b 3.0 >>> c+d 'abcdef'
- データ型 数値 ( 整数 実数など ) 文字列 リスト タプル 辞書 真偽
- リスト (list) とてもフレキシブルなデータ構造 >>> a=[1,2,[5,6],3.4,[3,5.6]] >>> a [1, 2, [5, 6], 3.3999999999999999, [3, 5.5999999999999996]] >>> a[2] [5, 6] >>> a[-1] [3, 5.5999999999999996] >>> a[1:3] [2, [5, 6]] >>> a[3:] [3.3999999999999999, [3, 5.5999999999999996]] >>> a[3]=[1,2] >>> a [1, 2, [5, 6], [1, 2], [3, 5.5999999999999996]]
- タプル (tuple) 変更のできないリスト >>> a=(1,2,3) >>> a[1]=3 Traceback (most recent call last): File "<pyshell#95>", line 1, in <module> a[1]=3 TypeError: 'tuple' object does not support item assignment >>>
- 文字列 文字の一次元タプルのようなもの abc と abc の2つの表現が可能 >>> a='abc' >>> b="def" >>> c=a+b >>> c 'abcdef' >>> c[2:5] 'cde' >>> c[2]='a' Traceback (most recent call last): File "<pyshell#115>", line 1, in <module> c[2]='a' TypeError: 'str' object does not support item assignment >>>
- 辞書 キーワードでデータにアクセスできる >>> a={'key1':123, 1:'item1', 3.5:'item2', 'key2':[1,2,3]} >>> a {3.5: 'item2', 1: 'item2', 'key1': 123, 'key2': [1, 2, 3]} >>> a[3.5] 'item2' >>> a['key2'] [1, 2, 3] >>> a[1]='item1' >>> a[1]={'a1':3, 'a2':5} >>> a {3.5: 'item2', 1: {'a1': 3, 'a2': 5}, 'key1': 123, 'key2': [1, 2, 3]} >>>
- 真偽 基本は True と False 条件分岐では0, None,[], {} も偽 その他は真 True は 1 と同じ False は 0 と同じ >>> 1 == True True >>> 2 == True False >>> >>> 0 == False True >>> [] == False False
- 演算子 Cなどと似ている四則 :+, -, *, /,. 論理 :==,!=, >, <>, 文字列やリストも演算の対象 >>> [1] + [2] [1, 2] >>> >>> [1,1] < [1]+[2] True >>>
- 条件分岐 if と else >>> a=true >>> if a : ブロックの段付けに注意! else : print 1 print 2 コロン 注意 : else の段付けが変なのはインタプリタのプロンプト出力が原因 1 >>> a=false >>> if a : print 1 else : print 2 2
- 条件分岐 (and と or) A and B A 式を実行 真ならば B 式も実行 偽ならば B 式は実行しない >>> a = True >>> a and 1 1 >>> a = False >>> a and 1 False A or B A 式を実行 偽ならば B 式も実行 真ならば B 式は実行しない >>> a = True >>> a or 1 True >>> a = False >>> a or 1 1
- 制御構造 ( ループ ) for ループ while ループ >>> i = 0 >>> sum = 0 >>> while i< 10 : sum = sum + i i = i + 1 >>> sum = 0 >>> i = 0 >>> for i in range(10): sum = sum + i >>> sum 45 >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ブロックの段付けに注意! コロン >>> sum 45
- 制御構造 ( ループからの脱出 ) break を使う >>> i = 0 >>> sum = 0 >>> while True : sum = sum + i i = i + 1 if i >= 10 : break >>> sum 45
- 関数定義 def と return >>> def test(x, y) : return 2 * x + y >>> test(3,2) 8 return がないと値が返らない >>> def test(x, y) : 2*x+y >>> test(2,3) >>> a=test(2,3) >>> a >>>
- 関数についての補足 仮引数はローカル変数呼び出しは値渡し return で複数の値を戻すことができる 戻された値はタプルとして戻る 1つの変数で全体を受けるか 同数の複数の変数で別々に受けることができる 変数のアドレスを渡すことはできない 一般には戻り値を代入するどうしても変数に値を入れて戻ってきたいときは構造体を渡す
- オブジェクト class 定義 class N_multiply : def init (self, n) : self._n = n def multiply(self, x) : return self._n*x オブジェクトの利用 >>> a = N_multiply(5) >>> a.multiply(4) 20 >>> a._n 5 >>> a._n=10 >>> a.multiply(3) 30 >>>
- 内観機能 それが何であるかを調べる dir 関数 >>> a < main.n_multiply instance at 0x00CC8BC0> >>> dir(a) [' doc ', ' init ', ' module ', '_n', 'multiply'] >>> N_multiply <class main.n_multiply at 0x00CB3810> >>> dir(n_multiply) [' doc ', ' init ', ' module ', 'multiply']
- モジュール 他のファイルを module として読み込むことができる N_multiply の定義が my_module.py にあるとすると import my_module >>> a = my_module.n_multiply(5) >>> a.multiply(4) 20 >>> a._n 5 >>> a._n=10 >>> a.multiply(3) 30 >>> from my_module import * >>> a = N_multiply(5) >>> a.multiply(4) 20 >>> a._n 5 >>> a._n=10 >>> a.multiply(3) 30 >>>
- 次回予告 python でベクトル 行列 座標系の演算