第1回 python勉強会 by Softlayer ユーザ会 API分科会;pdf

第1回 python勉強会
by Softlayer ユーザ会 API分科会
株式会社MNU 下村 佳生
自己紹介
•
下村 佳生 1984/03/07
•
株式会社MNU 取締役(4月で3年目
•
使ったことがある言語
python / js / c# / php / c / c++
•
大学ではCPUシミュレータ弄ってました
分科会目標(仮)
•
softlayer APIのwapper作成
•
既存のAPIは直に叩きにくい
•
ある程度使いやすいManagerも
用意されているが網羅されていない
→Manager拡張?
今日の内容
•
インストール補足
•
python紹介
•
基本的なデータ構造
•
コードの書き方基礎
•
特殊な記述
インストール補足
pip
•
pythonのパッケージ管理アプリ
•
easy_installの強化版とのこと
•
パッケージは原則このアプリを使用して入れる
•
独自パッケージも簡単に作成できる
virtualenv
•
pipでinstallするpython環境を作成
•
globalを汚さない
•
必要ないライブラリ依存を極力なくす
•
使いやすくするためのパッケージが
virtualenvwrapper
勉強会環境用意
•
mkvirtualenvで環境を作ってみよう
python紹介
外見の特徴
•
中括弧 { , } ではなくインデントで構造を表す
•
関数や制御文の後はインデントを1つ下げる
•
中身を省略したい場合は「pass」と書く
•
タブではなくスペース4つでインデント
•
1行は80文字(100文字)以内
•
→ 誰が書いても似たような見た目になる
中身の特徴
•
データも関数も全てオブジェクト
•
1 → 数字型のオブジェクト
•
引数に関数を渡すことが可能
•
関数に属性を追加できる
組み込み定数
•
真偽値
•
•
True / False
null値
•
None
基本的なデータ構造
基本的なデータ構造
•
リスト(配列のようなもの)
•
タプル(変更できないリスト)
•
辞書(ハッシュ,連想配列のようなもの)
•
セット(集合,順序のないリスト)
リスト(list)
•
•
•
•
大括弧で宣言
• a = [1, 2, 3]
リストの追加はappendメソッドを使用
• a.append(4)
連結はextend もしくは +
• extendは元の配列に追加, + は新しい配列の作成
a[0], a[1]のように参照可能
タプル(tuple)
•
•
•
•
•
•
•
編集できないリスト
括弧で宣言
x = (1, 2, 3)
appendやextendはない
+ 演算子は使用可能 (新しいタプルができる)
要素一個のタプルを作る場合は後ろに , をつける
x[0] x[1]のように参照可能
辞書(dict)
•
•
中括弧で宣言, key: valueのペアを , で繋げる
• d = {1: 2, 2: 4, a : b }
key で参照可能
• 存在しないかもしれないkeyの取得はgetを使う
辞書オブジェクトの関数色々
•
•
•
d.get(key, default)
• d[key]の取得.なかったらdefaultを返す
key in d
• keyがdにあればTrue, なければFalseを返す
d.setdefault(key, value)
•
•
d.update(dict)
•
•
d[key]がなければvalueをセット,あれば何もしない
辞書を新しい辞書で上書き
d.items()
•
keyとvalueのタプルのリストを返す
[(key, value), (key, value), …]
集合(set)
•
•
•
順序のないリスト
中括弧で宣言
• {1, 2, 3, 4}
ユニークな値の抽出や重複のチェックなどに便利
{1}
{2, 3}
{4}
コードの書き方基礎
pythonファイルを作ろう
•
拡張子は .py
•
コメントは先頭に #
•
日本語を使う場合はファイル1行目に以下を記述
•
文字列は か
•
日本語がある場合は uをつけて囲む u こんな感じ
で囲む
記述方法
•
スペースや改行,カンマの位置などは以下を推奨
•
PEP8本家
http://legacy.python.org/dev/peps/pep-0008/
•
PEP8(日本語訳)
http://pep8-ja.readthedocs.org/ja/latest/
繰り返し文
•
構文は以下のとおり
for 代入する変数名 in イテレータ:
•
辞書は keys(), values(), items()で
keyだけ,値だけ, (key, value) が取れる
繰り返し文補足
•
辞書のfor文は以下のように書くことが多い
※タプルは a, b = (1, 2) のように代入できる
if文
•
構文は以下の通り
if 条件:
•
複数条件がある場合は and や or を使う
スコープ
•
スコープ外で定義されたObjectの参照も可能
•
スコープ内で宣言前に参照するとエラーになる
•
以下の順序で適用
•
関数
•
クラス
•
ファイル
•
グローバル
OK
NG
関数の記述
•
•
•
def の後ろに関数名
カッコの中に引数を定義
• = を付けることでデフォルト値を設定可能
•
* , ** と記述することで可変引数の取得が可能
最後に :
関数の呼び出し方
•
•
•
= を付けることで特定の引数のみ渡せる
リスト(タプル)に * を付けると一気に渡せる
辞書に ** を付けると名前付きで一気に渡せる
関数の戻り値
•
return a b のように書くことで複数個返せる
•
呼び出し元はタプルで受け取る
•
タプル,リストは a, b = arr で代入可能
クラスの記述
•
class 名前(継承元): の形で記述
•
継承元がない場合は object を書く
•
メソッドの第1引数は全てselfを取る
•
クラスメソッドの場合も同様(こっちはclsにする)
クラス記述例
コンストラクタとデストラクタ
•
__init__メソッドがコンストラクタに相当
•
__del__メソッドがコンストラクタに相当
•
__(アンダーバーを2つ)を前後に挟んだメソッドは
大体特殊な用途のメソッド
特殊な記法
リスト内包表記
•
[作成する要素 for x in list 判定式]
•
{}で囲むと辞書,()で囲むとジェネレータになる
0から9までの偶数を10倍したリストを作るコードの比較
デコレータ
•
関数をラップして関数を返す関数
•
引数や戻り値のチェックや変換が可能
•
認証処理やProxyなど,共通ロジックで使用
•
関数やメソッドの前の行に @ をつけて指定する
•
入れ子も可能(下から順番に適用される)
デコレータの例(1/4)
•
関数を受け取って,その関数をそのまま返すデコレータ
•
左右でやってることは同じ
デコレータの例(2/4)
•
関数を受け取って,全く別の関数を返すデコレータ
デコレータの例(3/4)
•
引数を増やしてみる
デコレータの例(4/4)
•
引数を装飾し,渡された関数を呼びなおす
with構文
•
•
明確なタイミングで終了処理をしたい時に利用
•
fileのopen, closeなど
•
javaなどのtry-catch-finallyに相当
__enter__,__exit__メソッドを実装することで
自作可能
htmlタグを出力するwith
おすすめのPython本
•
エキスパートPythonプログラミング
•
初めてのPython
•
Python Professional Programming(第2版)