python講座 第1回

45
Python 講講 2015 講講 講講講講講講講講講講 講講講講講 講講講講講講講講講講講講講講 2 講 講講講講 : 26413058 講講 講講

Upload: kenta-owaki

Post on 12-Apr-2017

5.147 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Python講座 第1回

Python 講座2015 年版名古屋工業大学大学院工学研究科 創成シミュレーション工学専攻 2 年学籍番号 : 26413058大脇 謙太

Page 2: Python講座 第1回

プログラミング言語• C 言語だけがプログラミング言語ではない– 目的に沿った言語を使う– 流行りに乗るのもあり

C

C++

C#

Objective-C

LispFortranAda

Prolog

2

Page 3: Python講座 第1回

Python とは

• オブジェクト指向のスクリプト言語• 動的型付け• インデントによるブロック表記• Unicode での文字列処理

Python は、 Windows 、 Linux/Unix 、 Mac OS X などの主要なオペレーティングシステムはもちろん、 Java や .NET などの仮想環境でも動作するプログラミング言語です。Python は OSI に認証された オープンソースライセンス で公開されており、商用製品の開発にも無料で利用できます。

― Python Japan より (http://www.python.jp/)

Page 4: Python講座 第1回

他言語との大まかな比較C Java Python

プログラミング コンパイラ型 インタプリタ型(中間言語方式 )

インタプリタ型

型付け 静的 静的 動的

ソースの可読性 人による 人による 高い

クロスプラットフォーム

△ ○ ○

実行速度 超高速 高速 低速

ライブラリ ○ ◎ ◎

得意分野 ハードウェア実装 (組み込み )

WebサービスApplet

科学分野アカデミック

※ 私的な意見を含みます

Page 5: Python講座 第1回

Python の使いどころ• 利点– やりたいことがすぐに実現できる

• 欠点– スピードはコンパイル型の言語に劣る

• プロトタイプのスクラッチ開発に• MATLAB の代わりに• 商用利用

5

Page 6: Python講座 第1回

おすすめの本O’REILLY JapanPython チュートリアル 第 2 版Guido van Rossum 著鴨澤 眞夫 訳Python の作者 Guido 氏書き下ろし。第2版にて Python 3 に対応Python の使い方を学ぶ入門書まずは Python を動かせるようにしたい方(Pythonista 必携 , Python 講座より簡単かつ洗練 )

Page 7: Python講座 第1回

おすすめの本O’REILLY Japan初めての Python 第3版Mark Lutz 著夏目 大 訳Python という言語を比較的短い時間で学べるように作られた本です。プログラミングを初めてする方から他の言語でかなりの経験を積んでいる方まで( 非常に読み易く、おすすめプログラミングⅠよりも簡単 )

Page 8: Python講座 第1回

おすすめの本O’REILLY JapanPython 入門 ( 2 冊組 )Mark Lutz 著飯坂 剛一 監訳村山 敏夫戸田 英子

Python の重要な概念を網羅するためにマニュアルよりもより深く理解したい人向けプログラミングに対する一般的な知識がある読者を想定( プログラミングⅠ・Ⅱ , OS と同程度 )

共訳

※ 現在絶版 ? 図書館所蔵

Page 9: Python講座 第1回

Python で作られたソフトウェアCMS(コンテンツ管理システム )

• 強力なコンテンツ管理システム• 利用しているサイト

– CIA– FBI– 日本貿易振興機構– 放射光施設「 Spring-8」

Page 10: Python講座 第1回

Python で作られたソフトウェア P2Pソフトウェア

Page 11: Python講座 第1回

PYTHON の導入§1. python 本体の導入§2. エディタ・統合開発環境の導入

Page 12: Python講座 第1回

• 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

Page 13: Python講座 第1回

インストーラを使って導入(2.7.x)

Python 本家 - https://www.python.org/

Page 下部 [DownLoad] – [Latest] – [Python2.7.x] をクリックリンク先にて[Files] – [ Windows x86

MSI installer] を選択

Page 14: Python講座 第1回

セットアップDownLoad した [python-2.7.x.msi] を実行( 特に設定を変えることなくインストールを完了させると C:\Python27\にインストールされます。

Page 15: Python講座 第1回

§2. 開発環境の導入

IDLE のシェル ( 図左 ) とエディタ ( 図右 )

! Python はインストールすると、標準で IDLE という開発環境が着いてきます[Windows] – [ すべてのプログラム ] – [Python2.7] – [IDLE(Python GUI)]

Page 16: Python講座 第1回

• IDLE --- Python インストール時に標準搭載 , IDE

• PyScripter --- Windows 向け Python 専用 IDE

• Eclipse + PyDev( プラグイン ) --- Python 用の IDE として使える• PyCharm --- Python特化型 IDE. コミュニティ版は無償• CANOPY --- データ解析用のライブラリ付属の IDE. 無償版あり• Python xy --- 科学計算用 . Matlab ライクな環境 (spyder)

統合開発環境

Page 17: Python講座 第1回

• Vi/Vim --- 有名なエディタ . UNIX,LINUX 向け (?)

• Emacs --- 同じく有名なエディタ . UNIX,LINUX 向け• TextMate --- Mac OS 向けのエディタ .有償• Sublime Text --- 流行の高機能エディタ .有償• notepad --- Windows に付属 . こだわりの強い人向け

開発環境 (エディタ + ターミナル )

Page 18: Python講座 第1回

プログラミングにあたって§1. 構文§2. 組み込み型 ・ 演算子

Page 19: Python講座 第1回

• 変数は代入前に宣言が必要• 変数の型をあらかじめ指定 ( 静的型付け )• 必要な型に合わせて関数を別途用意

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;}

Page 20: Python講座 第1回

• 変数の型宣言が不要• 変数の型は Python が自動的に判別 ( 動的型付け )• 関数は使い回しが利く

Python

def func( a, b ) : c = a + b return c

非常にシンプルに記述できるただし、変数が参照している型が何であるかがわかりにくい。コメントアウトや、 (慣れてきたら ) if分岐 ,例外処理など用いて 丁寧にコーディングしましょう。

Page 21: Python講座 第1回

ブロックの表記

C言語 Python

int func1( int a , int b ){ int c; c = a + b; return c;}

def func( a, b ) :  c = a + b  return c

空白によるインデントでブロックを表記

コロンで開始

{ } でブロックを囲む

Page 22: Python講座 第1回

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系で違いがあります。互換性を保つためにも、上記のような書き方をおすすめします。

Page 23: Python講座 第1回

while/for 文While文 For文a = 1while a < 101 :  print( a )  a += 1

for a in range(1 , 101) :  print( a )

それぞれ 1 から 100 まで出力する( どちらのコードも出力結果は同じ )

Page 24: Python講座 第1回

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問題を解くコード

Page 25: Python講座 第1回

§2. 組み込み型Python には次の組み込み型が用意されています。

• 数値型 (int , float, long, complex)

• イテレータ型 (iter)

• シーケンス型 (str, unicode, list, tuple, buffer, xrange)

• 集合型 (set, frozenset)

• マップ型 (dict)

• ファイルオブジェクト (file)

• コンテキストマネージャ型• その他 ( モジュール , 関数 , メソッド , コードオブジェクト ,type, None, Ellipsis, bool, 内部オブジェクト )

Page 26: Python講座 第1回

数値型型 リテラル 変換 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

数値型は数を表現するためのデータ型です。

Page 27: Python講座 第1回

数値型

>>> 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 型に分かれる

Page 28: Python講座 第1回

算術演算子・複合演算子算術演算子演算子 説明

+ 加算- 減算* 乗算/ 除算 ( “//” は商を切り捨て )

% 剰余** 累乗+x x の符号不変-x x の符号反転

複合演算子演算子 説明+= , -= , *= , … 自身の数に加算 (減

算 , … )

Python では ++( インクリメント ), - -( デクリメント ) は使えない

a += 1 , a -= 1 と書く

Page 29: Python講座 第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

Page 30: Python講座 第1回

• ダブル (or シングル ) クォーテーションで囲む• 演算子に” +” と” *” を持つ

文字列型>>>”foo” + “bar” “foobar”

>>> “hoge” * 3 “hogehogehoge”

>>> print( “ Hello “World” ”) Error

>>> print (‘ Hello “World” ‘) Hello “World”

2 つの文字列を結合する文字列を 3回繰り返す“( クォーテーション )内で 同じクォーテーション は使えない違うクォーテーションを使えば OK

Page 31: Python講座 第1回

• 配列のようなデータ型 ( シーケンス型 )• オブジェクトを格納できる

リスト型

>>> 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

要素の取り出し(取り出した要素はなくなる )

+ や * も使える

Page 32: Python講座 第1回

• 要素の書き換えが不可能なリスト ( シーケンス )• オブジェクトを格納できる

タプル型

>>> 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

要素の取り出しは不可+ や * は使える

要素の参照

Page 33: Python講座 第1回

集合型型 リテラル 生成 変更可能 ハッシュ

化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 型はなりません。

Page 34: Python講座 第1回

セット型• 集合を表現• 要素の重複がない• 要素は変更不可なオブジェクト

>>> 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は追加 ×

Page 35: Python講座 第1回

>>> 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は追加○

Page 36: Python講座 第1回

マップ型型 リテラル 生成 変更可能 ハッシュ

化辞書型 dict { key : value , …} dict([arg]) ○ ×

マップ型は順序なしのコンテナ型で、イテラブル、

辞書型オブジェクトの操作について参照をおすすめします。参考 URL - http://docs.python.jp/2.7/library/stdtypes.html

辞書型のキーは、変更可能な型を用いるという制約の上で、ほぼ任意の値を割り付けることができます。辞書型の値には、変更可能な型を与えることもできます。list 型はキーにはなりません。値にはなります。

Page 37: Python講座 第1回

• キーと値をペアに持つシーケンス型• インデックスにはキーを指定

辞書型

>>> 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 }の順

要素の参照インデックスはキー値存在しないキー値はエラー

値の変更要素の追加

リストはキーとして使えない

Page 38: Python講座 第1回

比較演算子・論理演算子比較演算子演算子 説明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 よりも先に処理される

Page 39: Python講座 第1回

コンテナ型と 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

Page 40: Python講座 第1回

参考 : 組み込み型一覧

注 : 英語表記されています

Page 41: Python講座 第1回

• 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

参考文献

Page 42: Python講座 第1回

• 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

参考文献

Page 43: Python講座 第1回

• 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

参考文献

Page 44: Python講座 第1回

• ” 恋に落ちるエディタ”「 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

参考文献

Page 45: Python講座 第1回

次回予告次回はオブジェクト指向について