python講座 第1回
TRANSCRIPT
Python 講座2015 年版名古屋工業大学大学院工学研究科 創成シミュレーション工学専攻 2 年学籍番号 : 26413058大脇 謙太
プログラミング言語• C 言語だけがプログラミング言語ではない– 目的に沿った言語を使う– 流行りに乗るのもあり
C
C++
C#
Objective-C
LispFortranAda
Prolog
2
Python とは
• オブジェクト指向のスクリプト言語• 動的型付け• インデントによるブロック表記• Unicode での文字列処理
Python は、 Windows 、 Linux/Unix 、 Mac OS X などの主要なオペレーティングシステムはもちろん、 Java や .NET などの仮想環境でも動作するプログラミング言語です。Python は OSI に認証された オープンソースライセンス で公開されており、商用製品の開発にも無料で利用できます。
― Python Japan より (http://www.python.jp/)
他言語との大まかな比較C Java Python
プログラミング コンパイラ型 インタプリタ型(中間言語方式 )
インタプリタ型
型付け 静的 静的 動的
ソースの可読性 人による 人による 高い
クロスプラットフォーム
△ ○ ○
実行速度 超高速 高速 低速
ライブラリ ○ ◎ ◎
得意分野 ハードウェア実装 (組み込み )
WebサービスApplet
科学分野アカデミック
※ 私的な意見を含みます
Python の使いどころ• 利点– やりたいことがすぐに実現できる
• 欠点– スピードはコンパイル型の言語に劣る
• プロトタイプのスクラッチ開発に• MATLAB の代わりに• 商用利用
5
おすすめの本O’REILLY JapanPython チュートリアル 第 2 版Guido van Rossum 著鴨澤 眞夫 訳Python の作者 Guido 氏書き下ろし。第2版にて Python 3 に対応Python の使い方を学ぶ入門書まずは Python を動かせるようにしたい方(Pythonista 必携 , Python 講座より簡単かつ洗練 )
おすすめの本O’REILLY Japan初めての Python 第3版Mark Lutz 著夏目 大 訳Python という言語を比較的短い時間で学べるように作られた本です。プログラミングを初めてする方から他の言語でかなりの経験を積んでいる方まで( 非常に読み易く、おすすめプログラミングⅠよりも簡単 )
おすすめの本O’REILLY JapanPython 入門 ( 2 冊組 )Mark Lutz 著飯坂 剛一 監訳村山 敏夫戸田 英子
Python の重要な概念を網羅するためにマニュアルよりもより深く理解したい人向けプログラミングに対する一般的な知識がある読者を想定( プログラミングⅠ・Ⅱ , OS と同程度 )
共訳
※ 現在絶版 ? 図書館所蔵
Python で作られたソフトウェアCMS(コンテンツ管理システム )
• 強力なコンテンツ管理システム• 利用しているサイト
– CIA– FBI– 日本貿易振興機構– 放射光施設「 Spring-8」
Python で作られたソフトウェア P2Pソフトウェア
PYTHON の導入§1. python 本体の導入§2. エディタ・統合開発環境の導入
• Python のバージョン– Python 2.x系 (最新版は 2.7)– Python 3.x系 (最新版は 3.4) 2014.3.17 リリース
32bit 版を使うのが無難• インストール
– Windows, Mac OS X ならインストーラを利用– Linux には Python がインストール済み
• 最新版へのアップグレードは次のようなコマンドを使って ( 下のコマンドは Ubuntu)
§1.Python のインストール
$ sudo apt-get install python3.4
インストーラを使って導入(2.7.x)
Python 本家 - https://www.python.org/
Page 下部 [DownLoad] – [Latest] – [Python2.7.x] をクリックリンク先にて[Files] – [ Windows x86
MSI installer] を選択
セットアップDownLoad した [python-2.7.x.msi] を実行( 特に設定を変えることなくインストールを完了させると C:\Python27\にインストールされます。
§2. 開発環境の導入
IDLE のシェル ( 図左 ) とエディタ ( 図右 )
! Python はインストールすると、標準で IDLE という開発環境が着いてきます[Windows] – [ すべてのプログラム ] – [Python2.7] – [IDLE(Python GUI)]
• IDLE --- Python インストール時に標準搭載 , IDE
• PyScripter --- Windows 向け Python 専用 IDE
• Eclipse + PyDev( プラグイン ) --- Python 用の IDE として使える• PyCharm --- Python特化型 IDE. コミュニティ版は無償• CANOPY --- データ解析用のライブラリ付属の IDE. 無償版あり• Python xy --- 科学計算用 . Matlab ライクな環境 (spyder)
統合開発環境
• Vi/Vim --- 有名なエディタ . UNIX,LINUX 向け (?)
• Emacs --- 同じく有名なエディタ . UNIX,LINUX 向け• TextMate --- Mac OS 向けのエディタ .有償• Sublime Text --- 流行の高機能エディタ .有償• notepad --- Windows に付属 . こだわりの強い人向け
開発環境 (エディタ + ターミナル )
プログラミングにあたって§1. 構文§2. 組み込み型 ・ 演算子
• 変数は代入前に宣言が必要• 変数の型をあらかじめ指定 ( 静的型付け )• 必要な型に合わせて関数を別途用意
C 言語 / Java
int func1( int a , int b ){ int c; c = a + b; return c;}
double func2( double a , double b ){ double c; c = a + b; return c;}
• 変数の型宣言が不要• 変数の型は Python が自動的に判別 ( 動的型付け )• 関数は使い回しが利く
Python
def func( a, b ) : c = a + b return c
非常にシンプルに記述できるただし、変数が参照している型が何であるかがわかりにくい。コメントアウトや、 (慣れてきたら ) if分岐 ,例外処理など用いて 丁寧にコーディングしましょう。
ブロックの表記
C言語 Python
int func1( int a , int b ){ int c; c = a + b; return c;}
def func( a, b ) : c = a + b return c
空白によるインデントでブロックを表記
コロンで開始
{ } でブロックを囲む
If 文C言語if ( a == 0 ) { puts( “Zero” );}else if ( a > 0 ) { puts( “Positive” );}else{ puts(“Negative”);}
Python
if a == 0 : print( “Zero” )elif a > 0 : print( “Positive” )else : print( “Negative” )
else if ではなくelif
print 文に関して、 2.x系と 3.x系で違いがあります。互換性を保つためにも、上記のような書き方をおすすめします。
while/for 文While文 For文a = 1while a < 101 : print( a ) a += 1
for a in range(1 , 101) : print( a )
それぞれ 1 から 100 まで出力する( どちらのコードも出力結果は同じ )
1 for idx in range( 1 , 101 ) :2 if idx % 3 == 0 and idx % 5 == 0:3 print ("fizzbuzz“)4 elif idx % 3 == 0:5 print ("fizz“)6 elif idx % 5 == 0 :7 print ("buzz“)8 else :9 print (idx)
サンプルコードFizzBuzz問題を解くコード
§2. 組み込み型Python には次の組み込み型が用意されています。
• 数値型 (int , float, long, complex)
• イテレータ型 (iter)
• シーケンス型 (str, unicode, list, tuple, buffer, xrange)
• 集合型 (set, frozenset)
• マップ型 (dict)
• ファイルオブジェクト (file)
• コンテキストマネージャ型• その他 ( モジュール , 関数 , メソッド , コードオブジェクト ,type, None, Ellipsis, bool, 内部オブジェクト )
数値型型 リテラル 変換 Tips
整数型 int 10 , -10 int(val) Boolean は int のサブタイプ
長整数型 long 100L , 100l long(val) ‘l’ よりも’ L’ を推奨浮動小数点型 float 0.5 , 1. float(val) C 言語の double 型で実装複素数型 complex 1. + 0j complex(re, im) 実部、虚部を取り出すには
z.real() , z.imag()型混合の演算をするとき、より表現力のある型へ”暗黙のキャスト”されます。int < long < float < complex
1 / 2 0 int / int int
1. / 2 0.5float / int float
数値型は数を表現するためのデータ型です。
数値型
>>> 2014 + 1000 3014
>>> 1.4 * 2 2.8
>>> 2 ** 10 1024
>>> 1 / 2 0
>>> 1j 1j
>>> 1j ** 2 (-1+0j)
>>> (1 + 1j ) * ( 2 + 3j ) (-1 + 5j)
>>> math.e ** ( 1j * ( math.pi / 4 ) ) (0.70710678+0.70710678j)
より精度の高い型で返される
整数型の除算は整数型で返される (2.x系 )( 3.x※ 系は浮動小数点型で返される )
複素数も表せるI( アイ ) ではなく j
( ジェー )
• 数を表現するデータ型• 数値の精度によって int 型・ long 型・ float 型・ complex 型に分かれる
算術演算子・複合演算子算術演算子演算子 説明
+ 加算- 減算* 乗算/ 除算 ( “//” は商を切り捨て )
% 剰余** 累乗+x x の符号不変-x x の符号反転
複合演算子演算子 説明+= , -= , *= , … 自身の数に加算 (減
算 , … )
Python では ++( インクリメント ), - -( デクリメント ) は使えない
a += 1 , a -= 1 と書く
シーケンス型型 リテラ
ル生成・変換 変更可能 Tips
文字列型 str “hoge” str(obj) × 単引用符でも二重引用符でも OK
ユニコード型
unicode u”hoge” unicode(obj) ×
リスト型 list [a,b,c] list( obj ) ○
タプル型 tuple (a,b,c) tuple(obj) ×
バッファ型 buffer ― buffer( obj ) × 非必須 (旧 ver. との互換 )
xrange オブジェクト
xrange ― xrange(5) ×
シーケンス型は順序付きのコンテナ型 ( コレクション ) で、イテラブルです。
それぞれのオブジェクトの操作について参照をおすすめします。参考 URL - http://docs.python.jp/2.7/library/stdtypes.html
• ダブル (or シングル ) クォーテーションで囲む• 演算子に” +” と” *” を持つ
文字列型>>>”foo” + “bar” “foobar”
>>> “hoge” * 3 “hogehogehoge”
>>> print( “ Hello “World” ”) Error
>>> print (‘ Hello “World” ‘) Hello “World”
2 つの文字列を結合する文字列を 3回繰り返す“( クォーテーション )内で 同じクォーテーション は使えない違うクォーテーションを使えば OK
• 配列のようなデータ型 ( シーケンス型 )• オブジェクトを格納できる
リスト型
>>> a = [1,2,3,4,5 ]
>>> a[1, 2, 3, 4, 5]
>>> a[1] = 1
>>> a[1, 1, 3, 4, 5]
>>> a.append(6)
>>> a[1, 1, 3, 4, 5, 6]
>>> b = [ 1 , 2 , "a" , [4 , "b" ] ]
>>> b[1, 2, 'a', [4, 'b']]
>>> b.pop()[4, 'b']
>>> b[1, 2, 'a']
>>> a+b[1, 1, 3, 4, 5, 6, 1, 2, 'a']
>>> b *2[1, 2, 'a', 1, 2, 'a']
[] を使って宣言
要素の変更要素の追加
数値以外のオブジェクトも OK
要素の取り出し(取り出した要素はなくなる )
+ や * も使える
• 要素の書き換えが不可能なリスト ( シーケンス )• オブジェクトを格納できる
タプル型
>>> a = (1,2,3,4,5 )
>>> a(1, 2, 3, 4, 5)
>>> a[1]2
>>> a[1] = 1Error
>>> a.append(6)Error
>>> b = ( 1 , 2 , "a" , [4 , "b" ] )
>>> b(1, 2, 'a', [4, 'b'])
>>> b.pop()Error
>>> a+b(1, 2, 3, 4, 5, 1, 2, 'a', [4, 'b'])
>>> b *2(1, 2, 'a', [4, 'b'], 1, 2, 'a', [4, 'b'])
() を使って宣言
要素の変更は不可要素の追加も不可
数値以外のオブジェクトも OK
要素の取り出しは不可+ や * は使える
要素の参照
集合型型 リテラル 生成 変更可能 ハッシュ
化set型 set set([a,b,c,…]) set(obj) ○ ×
frozenset型 frozenset frozenset([a,b,c,…]) frozenset(obj) × ○
集合型は順序なしのコンテナ型 ( コレクション ) で、イテラブルです。
集合型オブジェクトの操作について参照をおすすめします。参考 URL - http://docs.python.jp/2.7/library/stdtypes.html
集合型の要素は重複しません。集合型の要素は変更不可 (ハッシュ可能 ) なオブジェクトでなければなりません。
frozenset 型は集合型の要素になります。 set 型はなりません。
セット型• 集合を表現• 要素の重複がない• 要素は変更不可なオブジェクト
>>> s = set( (1,2,3,3) )
>>> sset([1, 2, 3])
>>> s[0]Error
>>> 1 in sTrue
>>> s.add(4)
>>> sset([1, 2, 3, 4])
>>> s.remove(1)
>>> sset([2, 3, 4])
>>> s2 = set([3,4,5])
>>> s.add(s2)Error
オブジェクトを宣言要素は 重複なし添え字で参照 ×
要素の 検索
要素の追加・削除
set や listは追加 ×
>>> fs = frozenset( (1,2,3,3) )
>>> fsfrozenset([1, 2, 3])
>>> fs[0]Error
>>> 1 in fsTrue
フローズンセット型• 変更不可な集合• 要素の重複がない• 要素は変更不可なオブジェクト >>> fs.add(4)
Error
>>> fs.remove(1)
Error
>>> s2 = set([3,4,5])
>>> s2.add(fs)
>>> s2
set([frozenset([1, 2, 3]), 3, 4, 5])
オブジェクトを宣言要素は 重複なし添え字で参照 ×
要素の 検索
要素の追加・削除×
frozensetは追加○
マップ型型 リテラル 生成 変更可能 ハッシュ
化辞書型 dict { key : value , …} dict([arg]) ○ ×
マップ型は順序なしのコンテナ型で、イテラブル、
辞書型オブジェクトの操作について参照をおすすめします。参考 URL - http://docs.python.jp/2.7/library/stdtypes.html
辞書型のキーは、変更可能な型を用いるという制約の上で、ほぼ任意の値を割り付けることができます。辞書型の値には、変更可能な型を与えることもできます。list 型はキーにはなりません。値にはなります。
• キーと値をペアに持つシーケンス型• インデックスにはキーを指定
辞書型
>>> a = {1:2 , “foo” : “bar” }
>>> a{1: 2, 'foo': 'bar'}
>>> a[1]2
>>> a["foo"]'bar‘
>>> a["bar"]Error
>>> a[1] = 1{1: 1, 'foo': 'bar'}
>>> a[ (2,3)] = "hoge"
>>> a{1: 2, (2, 3): 'hoge', 'foo': 'bar'}
>>> a[ [2] ] = 2Error
>>> a.update( {"Hello" : "World", 1:3} )>>> a{1: 3, 'foo': 'bar', (2, 3): 'hoge', 'Hello': 'World'}
{} を使って宣言{key : value }の順
要素の参照インデックスはキー値存在しないキー値はエラー
値の変更要素の追加
リストはキーとして使えない
比較演算子・論理演算子比較演算子演算子 説明x == y x と y が等しいときに True
x != yx <> y x と y が等しくないときに True
x < yx > y x と y の大きさ比較
(x と y が等しいときは False)x >= yx <= y x と y の大きさ比較
(x と y が等しいときは True)x in y y というシーケンスに x という要
素があるとき Truex is y x と y が同一のオブジェクトであ
る
論理演算子演算子 説明x and y 論理積x or y 論理和not x T/F を逆にする Python では” &&” や” ||” は使用で
きない。 and は or よりも先に処理される
コンテナ型と for 文イテラブルなオブジェクトを用いた Python 流 ( オブジェクト指向 ) な for 文の使い方です
1 >>> li = [“Hello” , “World” , “my” , “name” , “is” , “BW Taro” ] # 文字列のリスト2 >>> for token in li : # リストから一つずつ要素を token に代入3 print( token ) # token を出力4
出力結果 1 Hello
2 World
3 my
4 name
5 is
6 BW Taro
参考 : 組み込み型一覧
注 : 英語表記されています
• Python のすすめ \\fidel\share\黒柳研資料\平成25年度\平成25年度 輪講資料\ python.pptx
• 柴田淳 (2009). みんなの Python ソフトバンク クリエイティブ株式会社\\fidel\share\黒柳研資料\SoftBankCreative_みんなのPython.pdf
• Wes Mckinney (2013). Python によるデータ分析入門 O’REILLY
• easy_install と pip を使えるようにする @Ubuntuhttp://bibouroku1105.wordpress.com/2013/06/14/easy_install%E3%81%A8pip%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8Bubuntu/
• Python を学ぼうhttp://www.isl.ne.jp/pcsp/python/python02.html
参考文献
• Python標準ライブラリhttp://docs.python.jp/2.7/library/index.html
• Python とはhttp://www.python.jp/about/
• 主成分分析 – C 言語によるサンプルソースコードhttp://www.nag-j.co.jp/naglib/examples/nag_mv_prin_comp.htm
• Python ライブラリリファレンス – 2.1 組み込み関数http://docs.python.jp/2.4/lib/built-in-funcs.html
• Python ライブラリリファレンス– 組み込み型http://docs.python.jp/2.6/library/stdtypes.html
参考文献
• Python 開発環境http://www.lifewithpython.com/p/pythonide.html
• CANOPY – ENTHOUGHThttps://www.enthought.com/products/canopy/
• 科学計算のための楽々環境 python(x,y)http://plaza.rakuten.co.jp/kugutsushi/diary/200910210000/
• Python コミュニティに無償の Python IDE 、 PyCharm 3.0 をお届けします!http://blog.jetbrains.com/jp/2013/09/25/197
参考文献
• ” 恋に落ちるエディタ”「 Sublime Text」 完全入門ガイド!http://liginc.co.jp/designer/archives/6774
• Vim を最強の Python 開発環境にする 2http://lambdalisue.hatenablog.com/entry/2013/06/23/071344
• What IDE to use for Python? – stackoverflowhttp://stackoverflow.com/questions/81584/what-ide-to-use-for-python
参考文献
次回予告次回はオブジェクト指向について