第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版)
© Copyright 2024