nseg15 一般的じゃないpython入門

91
2011/5/21 NSEG Vol.15 一般的じゃない Python入門 by ABE Hiroki aka hATrayflood

Upload: hatrayflood

Post on 28-May-2015

1.731 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

一般的じゃないPython入門

by ABE Hi rok i aka h ATrayf lood

Page 2: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

自己紹介・名前:アベヒロキ (@hATrayflood)・職業:自宅サーバ管理者・URL:http://rayflood.org/diary/・住所:長野市 地元:東部町

by ABE Hi rok i aka h ATrayf lood

Page 3: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Pythonby ABE Hi rok i aka h ATrayf lood

Page 4: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

って何?by ABE Hi rok i aka h ATrayf lood

Page 5: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

スクリプト言語

by ABE Hi rok i aka h ATrayf lood

Page 6: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

PerlとかRubyとかの仲間

by ABE Hi rok i aka h ATrayf lood

Page 7: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

なぜか日本ではマイナー

by ABE Hi rok i aka h ATrayf lood

Page 8: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

古参のPerlや国産のRubyには敵わないのか…

by ABE Hi rok i aka h ATrayf lood

Page 9: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

概要はWikipediaを参照

by ABE Hi rok i aka h ATrayf lood

Page 10: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

インストーラリファレンス作った人

by ABE Hi rok i aka h ATrayf lood

Page 11: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

※今回は Python-2.*系の話 Python-3.*系は

by ABE Hi rok i aka h ATrayf lood

Page 12: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

知らんby ABE Hi rok i aka h ATrayf lood

Page 13: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

では早速ソース

by ABE Hi rok i aka h ATrayf lood

Page 14: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

print("hello world.")

by ABE Hi rok i aka h ATrayf lood

Page 15: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

いつものヤツですが、流石にコレだけじゃ…

by ABE Hi rok i aka h ATrayf lood

Page 16: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

# -*- coding: utf-8 -*-

if __name__ == "__main__": print(u"こんにちは")

by ABE Hi rok i aka h ATrayf lood

Page 17: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

ちょっとPythonっぽくなった

by ABE Hi rok i aka h ATrayf lood

Page 18: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

> # -*- coding: utf-8 -*-

ソースファイルの文字コードを指定

by ABE Hi rok i aka h ATrayf lood

Page 19: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

指定がないとLatin-1と見なし、MB文字がソース中で使えないコンパイルエラー

by ABE Hi rok i aka h ATrayf lood

Page 20: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

> if __name__ == "__main__":

ifの行末は「:」。括弧は使わない明示的な閉じステートメントもない

by ABE Hi rok i aka h ATrayf lood

Page 21: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

__name__ == "__main__"はスクリプトとして起動したときに実行するって目印

by ABE Hi rok i aka h ATrayf lood

Page 22: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

> print(u"こんにちは")

if内のステートメントかどうかの判断は、次の行のインデントで決まります

by ABE Hi rok i aka h ATrayf lood

Page 23: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

同一レベルのインデントで同一スコープとみなすズレてるものがあるとコンパイルエラー

by ABE Hi rok i aka h ATrayf lood

Page 24: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

> u"こんにちは"

文字列リテラルの先頭に「u」を付けるとUnicodeとして扱う

by ABE Hi rok i aka h ATrayf lood

Page 25: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Pythonは基本的には内部Unicodeだけどリテラルを自動的にUnicodeに変換しない

by ABE Hi rok i aka h ATrayf lood

Page 26: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

なんか奇っ怪…

by ABE Hi rok i aka h ATrayf lood

Page 27: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

次のお題by ABE Hi rok i aka h ATrayf lood

Page 28: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

for i in range(4): print("i = " + str(i))

by ABE Hi rok i aka h ATrayf lood

Page 29: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

i = 0i = 1i = 2i = 3

by ABE Hi rok i aka h ATrayf lood

Page 30: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

for(i = 0; i < 4; i++)みたいなforは無いrange()関数を使う

by ABE Hi rok i aka h ATrayf lood

Page 31: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

range()は数値の配列を生成する関数で、forのinに渡すのが主な使い方

by ABE Hi rok i aka h ATrayf lood

Page 32: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

なので、range()をprint()するとこうなる> print(str(range(4)))[0, 1, 2, 3]

by ABE Hi rok i aka h ATrayf lood

Page 33: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

range()の引数を変えれば大体のことはできる> range(10, 4, -2)[10, 8, 6]

by ABE Hi rok i aka h ATrayf lood

Page 34: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

> "i = " + str(i)

実は妙なところで型が厳密混ぜるときは型変換が必要もちろんこの逆も然り

by ABE Hi rok i aka h ATrayf lood

Page 35: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

join()は有名すぎるので省略

> "-".join(["a", "b", "c"])'a-b-c'

by ABE Hi rok i aka h ATrayf lood

Page 36: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

正直、join()より他の言語仕様のほうが奇妙…

by ABE Hi rok i aka h ATrayf lood

Page 37: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

次のお題by ABE Hi rok i aka h ATrayf lood

Page 38: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

t = datetime.now()t += timedelta(weeks=1)t.strftime("%Y/%m/%d")> '2011/05/28'

by ABE Hi rok i aka h ATrayf lood

Page 39: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

日付計算はtimedeltaが強力

by ABE Hi rok i aka h ATrayf lood

Page 40: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

weeks, days,hours, minutes, seconds,milliseconds, microsecondsが使いたい放題

by ABE Hi rok i aka h ATrayf lood

Page 41: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

各項目併用可能マイナス値も使用可能

t += timedelta(weeks=1, days=-1)> '2011/05/27'

by ABE Hi rok i aka h ATrayf lood

Page 42: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

こんなこともいける

t -= timedelta(weeks=1) / 3t.strftime("%Y/%m/%d %H:%M:%S")> '2011/05/19 07:20:00'

by ABE Hi rok i aka h ATrayf lood

Page 43: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

次のお題by ABE Hi rok i aka h ATrayf lood

Page 44: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

hoge.py:

def hogehoge(): print("hogehoge")

by ABE Hi rok i aka h ATrayf lood

Page 45: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

import hogehoge.hogehoge()

> hogehogeby ABE Hi rok i aka h ATrayf lood

Page 46: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

オブジェクトじゃないのになんかオブジェクトっぽい動きする。キモい。

by ABE Hi rok i aka h ATrayf lood

Page 47: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

from hoge import hogehogehogehoge()

> hogehoge

by ABE Hi rok i aka h ATrayf lood

Page 48: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

これはこれでimportが長いパッケージ名を省略できるので後が楽といえば楽

by ABE Hi rok i aka h ATrayf lood

Page 49: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

ところで、hoge.py自身はパッケージであることを明示してない

by ABE Hi rok i aka h ATrayf lood

Page 50: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

< fuga/__init__.py< fuga/hoge.py

import fuga.hogefuga.hoge.hogehoge()

by ABE Hi rok i aka h ATrayf lood

Page 51: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

ファイルパスがそのままパッケージのパスになるただし__init__.pyが必要。中身は空でもよい。

by ABE Hi rok i aka h ATrayf lood

Page 52: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

__init__.pyにも関数やクラス書ける。ただしfrom importに限る

by ABE Hi rok i aka h ATrayf lood

Page 53: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

fuga/__init__.py:

def fugafuga(): print("fugafuga")

by ABE Hi rok i aka h ATrayf lood

Page 54: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

< fuga/__init__.py

from fuga import fugafugafugafuga()

by ABE Hi rok i aka h ATrayf lood

Page 55: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

__init__.pyに何か書く意味は分からないけど、こんなこともできるあたり、チェック目的か?

by ABE Hi rok i aka h ATrayf lood

Page 56: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

fuga/__init__.py:

raise("error") #print("error")

def fugafuga(): print("fugafuga")

by ABE Hi rok i aka h ATrayf lood

Page 57: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

import fuga.hoge

> raise("error") #print("error")> Traceback (most recent call last):> File "test.py", line 4, in <module>> import fuga.hoge> File "fuga/__init__.py", line 1, in <module>> raise("error") #print("error")> error

by ABE Hi rok i aka h ATrayf lood

Page 58: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

事例by ABE Hi rok i aka h ATrayf lood

Page 59: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

実はライブラリ作ってました。rfZenHan

by ABE Hi rok i aka h ATrayf lood

Page 60: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

s = u"012ABCabc!@#アイウガダパ㈱:"rfZenHan.normalize(s)> 012ABCabc!@#アイウガダパ(株):

※詳細はソースのコメント参照

by ABE Hi rok i aka h ATrayf lood

Page 61: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

元ネタ仕様:Perl Unicode::Japanese実装:Python zenhan.py

車輪の再発明万歳

by ABE Hi rok i aka h ATrayf lood

Page 62: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

eyeD3by ABE Hi rok i aka h ATrayf lood

Page 63: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

mp3のID3タグを編集するライブラリ

by ABE Hi rok i aka h ATrayf lood

Page 64: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

他の言語でまともに動くライブラリなかったのがそもそものきっかけ

by ABE Hi rok i aka h ATrayf lood

Page 65: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Pythonナイスプレー

by ABE Hi rok i aka h ATrayf lood

Page 66: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Google App Engine

by ABE Hi rok i aka h ATrayf lood

Page 67: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Googleのオレオレ仕様なWebアプリ実行環境ただしサーバ性能は強力

by ABE Hi rok i aka h ATrayf lood

Page 68: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

言語はJava、Python、GoフレームワークはそれぞれDBは独自で非SQL

by ABE Hi rok i aka h ATrayf lood

Page 69: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Tracby ABE Hi rok i aka h ATrayf lood

Page 70: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

言わずと知れたプロジェクト管理バグ追跡システム

by ABE Hi rok i aka h ATrayf lood

Page 71: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

プラグイン豊富svn以外にもhgやgitも使えるらしい

by ABE Hi rok i aka h ATrayf lood

Page 72: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Mercurialby ABE Hi rok i aka h ATrayf lood

Page 73: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

バージョン管理システムgitと同じ分散型Web画面が標準である

by ABE Hi rok i aka h ATrayf lood

Page 74: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Python、OpenJDKMozilla、その他多数のOSSで採用

by ABE Hi rok i aka h ATrayf lood

Page 75: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Firefoxビルド

by ABE Hi rok i aka h ATrayf lood

Page 76: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

高速化のためにプロファイル採取して最適化

by ABE Hi rok i aka h ATrayf lood

Page 77: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

つまりビルドの過程で自動実行

by ABE Hi rok i aka h ATrayf lood

Page 78: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

ブラウザなのでWebサーバが必要

by ABE Hi rok i aka h ATrayf lood

Page 79: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Pythonは標準でSimpleHTTPServerが使える

by ABE Hi rok i aka h ATrayf lood

Page 80: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Pythonナイスプレー

by ABE Hi rok i aka h ATrayf lood

Page 81: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

まとめby ABE Hi rok i aka h ATrayf lood

Page 82: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

奇妙な言語です

by ABE Hi rok i aka h ATrayf lood

Page 83: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

仕様も使う人も

by ABE Hi rok i aka h ATrayf lood

Page 84: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

奇妙さ故か日本ではマイナーだけど

by ABE Hi rok i aka h ATrayf lood

Page 85: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

ニッチなところで役には立ってるので

by ABE Hi rok i aka h ATrayf lood

Page 86: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

ここはあえてこの言葉で

by ABE Hi rok i aka h ATrayf lood

Page 87: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

Pythonナイスプレー

by ABE Hi rok i aka h ATrayf lood

Page 88: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

ありがとうございました

by ABE Hi rok i aka h ATrayf lood

Page 89: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

リンク集twitter hATrayfloodhttp://twitter.com/hATrayfloodWikipedia Pythonhttp://ja.wikipedia.org/wiki/PythonPython インストーラhttp://www.python.org/download/Python 日本語リファレンスhttp://www.python.jp/Zope/links/python_documents作った人 グイド・ヴァンロッサムhttp://ja.wikipedia.org/wiki/グイド・ヴァンロッサム

by ABE Hi rok i aka h ATrayf lood

Page 90: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

rfZenHanhttp://rayflood.org/diary-temp/rfZenHan-0.2.zip元ネタ 仕様 半角←→全角変換,Unicode::Japanese に 未公開機能が… daily dayflowerhttp://d.hatena.ne.jp/dayflower/20060530/1148951624元ネタ 実装 blogSetomits Python 全角/半角変換モジュール zenhan.py アルファベット・記号・数字・カタカナの全角・半角変換をするhttp://straitmouth.jp/blog/setomits/148 Firefox PGOビルドhttp://mxr.mozilla.org/mozilla2.0/source/build/pgo/profileserver.py

by ABE Hi rok i aka h ATrayf lood

Page 91: Nseg15 一般的じゃないpython入門

2011/5/21 NSEG Vo l .15

eyeD3http://eyed3.nicfit.net/Google App Enginehttp://code.google.com/intl/ja/appengine/Trachttp://trac.edgewall.org/Mercurialhttp://mercurial.selenic.com/

by ABE Hi rok i aka h ATrayf lood