nseg15 一般的じゃないpython入門
TRANSCRIPT
2011/5/21 NSEG Vo l .15
一般的じゃないPython入門
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
自己紹介・名前:アベヒロキ (@hATrayflood)・職業:自宅サーバ管理者・URL:http://rayflood.org/diary/・住所:長野市 地元:東部町
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Pythonby ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
って何?by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
スクリプト言語
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
PerlとかRubyとかの仲間
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
なぜか日本ではマイナー
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
古参のPerlや国産のRubyには敵わないのか…
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
概要はWikipediaを参照
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
インストーラリファレンス作った人
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
※今回は Python-2.*系の話 Python-3.*系は
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
知らんby ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
では早速ソース
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
print("hello world.")
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
いつものヤツですが、流石にコレだけじゃ…
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
# -*- coding: utf-8 -*-
if __name__ == "__main__": print(u"こんにちは")
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
ちょっとPythonっぽくなった
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
> # -*- coding: utf-8 -*-
ソースファイルの文字コードを指定
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
指定がないとLatin-1と見なし、MB文字がソース中で使えないコンパイルエラー
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
> if __name__ == "__main__":
ifの行末は「:」。括弧は使わない明示的な閉じステートメントもない
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
__name__ == "__main__"はスクリプトとして起動したときに実行するって目印
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
> print(u"こんにちは")
if内のステートメントかどうかの判断は、次の行のインデントで決まります
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
同一レベルのインデントで同一スコープとみなすズレてるものがあるとコンパイルエラー
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
> u"こんにちは"
文字列リテラルの先頭に「u」を付けるとUnicodeとして扱う
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Pythonは基本的には内部Unicodeだけどリテラルを自動的にUnicodeに変換しない
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
なんか奇っ怪…
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
次のお題by ABE Hi rok i aka h ATrayf lood
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
2011/5/21 NSEG Vo l .15
i = 0i = 1i = 2i = 3
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
for(i = 0; i < 4; i++)みたいなforは無いrange()関数を使う
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
range()は数値の配列を生成する関数で、forのinに渡すのが主な使い方
by ABE Hi rok i aka h ATrayf lood
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
2011/5/21 NSEG Vo l .15
range()の引数を変えれば大体のことはできる> range(10, 4, -2)[10, 8, 6]
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
> "i = " + str(i)
実は妙なところで型が厳密混ぜるときは型変換が必要もちろんこの逆も然り
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
join()は有名すぎるので省略
> "-".join(["a", "b", "c"])'a-b-c'
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
正直、join()より他の言語仕様のほうが奇妙…
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
次のお題by ABE Hi rok i aka h ATrayf lood
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
2011/5/21 NSEG Vo l .15
日付計算はtimedeltaが強力
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
weeks, days,hours, minutes, seconds,milliseconds, microsecondsが使いたい放題
by ABE Hi rok i aka h ATrayf lood
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
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
2011/5/21 NSEG Vo l .15
次のお題by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
hoge.py:
def hogehoge(): print("hogehoge")
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
import hogehoge.hogehoge()
> hogehogeby ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
オブジェクトじゃないのになんかオブジェクトっぽい動きする。キモい。
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
from hoge import hogehogehogehoge()
> hogehoge
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
これはこれでimportが長いパッケージ名を省略できるので後が楽といえば楽
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
ところで、hoge.py自身はパッケージであることを明示してない
by ABE Hi rok i aka h ATrayf lood
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
2011/5/21 NSEG Vo l .15
ファイルパスがそのままパッケージのパスになるただし__init__.pyが必要。中身は空でもよい。
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
__init__.pyにも関数やクラス書ける。ただしfrom importに限る
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
fuga/__init__.py:
def fugafuga(): print("fugafuga")
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
< fuga/__init__.py
from fuga import fugafugafugafuga()
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
__init__.pyに何か書く意味は分からないけど、こんなこともできるあたり、チェック目的か?
by ABE Hi rok i aka h ATrayf lood
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
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
2011/5/21 NSEG Vo l .15
事例by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
実はライブラリ作ってました。rfZenHan
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
s = u"012ABCabc!@#アイウガダパ㈱:"rfZenHan.normalize(s)> 012ABCabc!@#アイウガダパ(株):
※詳細はソースのコメント参照
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
元ネタ仕様:Perl Unicode::Japanese実装:Python zenhan.py
車輪の再発明万歳
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
eyeD3by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
mp3のID3タグを編集するライブラリ
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
他の言語でまともに動くライブラリなかったのがそもそものきっかけ
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Pythonナイスプレー
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Google App Engine
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Googleのオレオレ仕様なWebアプリ実行環境ただしサーバ性能は強力
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
言語はJava、Python、GoフレームワークはそれぞれDBは独自で非SQL
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Tracby ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
言わずと知れたプロジェクト管理バグ追跡システム
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
プラグイン豊富svn以外にもhgやgitも使えるらしい
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Mercurialby ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
バージョン管理システムgitと同じ分散型Web画面が標準である
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Python、OpenJDKMozilla、その他多数のOSSで採用
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Firefoxビルド
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
高速化のためにプロファイル採取して最適化
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
つまりビルドの過程で自動実行
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
ブラウザなのでWebサーバが必要
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Pythonは標準でSimpleHTTPServerが使える
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Pythonナイスプレー
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
まとめby ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
奇妙な言語です
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
仕様も使う人も
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
奇妙さ故か日本ではマイナーだけど
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
ニッチなところで役には立ってるので
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
ここはあえてこの言葉で
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
Pythonナイスプレー
by ABE Hi rok i aka h ATrayf lood
2011/5/21 NSEG Vo l .15
ありがとうございました
by ABE Hi rok i aka h ATrayf lood
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
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
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