1. 2011/5/21 N SEG V o l .15
一般的じゃない
Python入門
by A B E H i rok i a k a h A Tra y f l ood
2. 2011/5/21 N SEG V o l .15
自己紹介
・名前:アベヒロキ (@hATrayflood)
・職業:自宅サーバ管理者
・URL:http://rayflood.org/diary/
・住所:長野市 地元:東部町
by A B E H i rok i a k a h A Tra y f l ood
3. 2011/5/21 N SEG V o l .15
Python
by A B E H i rok i a k a h A Tra y f l ood
4. 2011/5/21 N SEG V o l .15
って何?
by A B E H i rok i a k a h A Tra y f l ood
5. 2011/5/21 N SEG V o l .15
スクリプト言語
by A B E H i rok i a k a h A Tra y f l ood
6. 2011/5/21 N SEG V o l .15
Perlとか
Rubyとか
の仲間 by A B E H i rok i a k a h A Tra y f l ood
7. 2011/5/21 N SEG V o l .15
なぜか
日本では
マイナー by A B E H i rok i a k a h A Tra y f l ood
8. 2011/5/21 N SEG V o l .15
古参のPerlや
国産のRubyには
敵わないのか…
by A B E H i rok i a k a h A Tra y f l ood
9. 2011/5/21 N SEG V o l .15
概要は
Wikipedia
を参照 by A B E H i rok i a k a h A Tra y f l ood
10. 2011/5/21 N SEG V o l .15
インストーラ
リファレンス
作った人 by A B E H i rok i a k a h A Tra y f l ood
11. 2011/5/21 N SEG V o l .15
※今回は
Python-2.*系の話
Python-3.*系は
by A B E H i rok i a k a h A Tra y f l ood
12. 2011/5/21 N SEG V o l .15
知らん
by A B E H i rok i a k a h A Tra y f l ood
13. 2011/5/21 N SEG V o l .15
では早速
ソース
by A B E H i rok i a k a h A Tra y f l ood
14. 2011/5/21 N SEG V o l .15
print("hello world.")
by A B E H i rok i a k a h A Tra y f l ood
15. 2011/5/21 N SEG V o l .15
いつものヤツ
ですが、流石に
コレだけじゃ…
by A B E H i rok i a k a h A Tra y f l ood
16. 2011/5/21 N SEG V o l .15
# -*- coding: utf-8 -*-
if __name__ == "__main__":
print(u"こんにちは")
by A B E H i rok i a k a h A Tra y f l ood
17. 2011/5/21 N SEG V o l .15
ちょっとPython
っぽくなった
by A B E H i rok i a k a h A Tra y f l ood
18. 2011/5/21 N SEG V o l .15
> # -*- coding: utf-8 -*-
ソースファイルの
文字コードを指定
by A B E H i rok i a k a h A Tra y f l ood
19. 2011/5/21 N SEG V o l .15
指定がないとLatin-1
と見なし、MB文字が
ソース中で使えない
コンパイルエラー
by A B E H i rok i a k a h A Tra y f l ood
20. 2011/5/21 N SEG V o l .15
> if __name__ == "__main__":
ifの行末は「:」。括弧は使わない
明示的な閉じステートメントもない
by A B E H i rok i a k a h A Tra y f l ood
21. 2011/5/21 N SEG V o l .15
__name__ == "__main__"は
スクリプトとして起動した
ときに実行するって目印
by A B E H i rok i a k a h A Tra y f l ood
22. 2011/5/21 N SEG V o l .15
> print(u"こんにちは")
if内のステートメントか
どうかの判断は、次の行の
インデントで決まります
by A B E H i rok i a k a h A Tra y f l ood
23. 2011/5/21 N SEG V o l .15
同一レベルのインデントで
同一スコープとみなす
ズレてるものがあると
コンパイルエラー
by A B E H i rok i a k a h A Tra y f l ood
24. 2011/5/21 N SEG V o l .15
> u"こんにちは"
文字列リテラルの
先頭に「u」を付けると
Unicodeとして扱う
by A B E H i rok i a k a h A Tra y f l ood
25. 2011/5/21 N SEG V o l .15
Pythonは基本的には
内部Unicodeだけど
リテラルを自動的に
Unicodeに変換しない
by A B E H i rok i a k a h A Tra y f l ood
26. 2011/5/21 N SEG V o l .15
なんか奇っ怪…
by A B E H i rok i a k a h A Tra y f l ood
27. 2011/5/21 N SEG V o l .15
次のお題
by A B E H i rok i a k a h A Tra y f l ood
28. 2011/5/21 N SEG V o l .15
for i in range(4):
print("i = " + str(i))
by A B E H i rok i a k a h A Tra y f l ood
29. 2011/5/21 N SEG V o l .15
i = 0
i = 1
i = 2
i = 3 by A B E H i rok i a k a h A Tra y f l ood
30. 2011/5/21 N SEG V o l .15
for(i = 0; i < 4; i++)
みたいなforは無い
range()関数を使う
by A B E H i rok i a k a h A Tra y f l ood
31. 2011/5/21 N SEG V o l .15
range()は数値の配列を
生成する関数で、forの
inに渡すのが主な使い方
by A B E H i rok i a k a h A Tra y f l ood
32. 2011/5/21 N SEG V o l .15
なので、range()を
print()するとこうなる
> print(str(range(4)))
[0, 1, 2, 3]
by A B E H i rok i a k a h A Tra y f l ood
33. 2011/5/21 N SEG V o l .15
range()の引数を変えれば
大体のことはできる
> range(10, 4, -2)
[10, 8, 6]
by A B E H i rok i a k a h A Tra y f l ood
34. 2011/5/21 N SEG V o l .15
> "i = " + str(i)
実は妙なところで型が厳密
混ぜるときは型変換が必要
もちろんこの逆も然り
by A B E H i rok i a k a h A Tra y f l ood
35. 2011/5/21 N SEG V o l .15
join()は有名すぎるので省略
> "-".join(["a", "b", "c"])
'a-b-c'
by A B E H i rok i a k a h A Tra y f l ood
36. 2011/5/21 N SEG V o l .15
正直、join()より
他の言語仕様の
ほうが奇妙…
by A B E H i rok i a k a h A Tra y f l ood
37. 2011/5/21 N SEG V o l .15
次のお題
by A B E H i rok i a k a h A Tra y f l ood
38. 2011/5/21 N SEG V o l .15
t = datetime.now()
t += timedelta(weeks=1)
t.strftime("%Y/%m/%d")
> '2011/05/28'
by A B E H i rok i a k a h A Tra y f l ood
39. 2011/5/21 N SEG V o l .15
日付計算は
timedeltaが強力
by A B E H i rok i a k a h A Tra y f l ood
40. 2011/5/21 N SEG V o l .15
weeks, days,
hours, minutes, seconds,
milliseconds, microseconds
が使いたい放題
by A B E H i rok i a k a h A Tra y f l ood
41. 2011/5/21 N SEG V o l .15
各項目併用可能
マイナス値も使用可能
t += timedelta(weeks=1, days=-1)
> '2011/05/27'
by A B E H i rok i a k a h A Tra y f l ood
42. 2011/5/21 N SEG V o l .15
こんなこともいける
t -= timedelta(weeks=1) / 3
t.strftime("%Y/%m/%d %H:%M:%S")
> '2011/05/19 07:20:00'
by A B E H i rok i a k a h A Tra y f l ood
43. 2011/5/21 N SEG V o l .15
次のお題
by A B E H i rok i a k a h A Tra y f l ood
44. 2011/5/21 N SEG V o l .15
hoge.py:
def hogehoge():
print("hogehoge")
by A B E H i rok i a k a h A Tra y f l ood
45. 2011/5/21 N SEG V o l .15
import hoge
hoge.hogehoge()
> hogehoge by A B E H i rok i a k a h A Tra y f l ood
46. 2011/5/21 N SEG V o l .15
オブジェクトじゃないのに
なんかオブジェクトっぽい
動きする。キモい。
by A B E H i rok i a k a h A Tra y f l ood
47. 2011/5/21 N SEG V o l .15
from hoge import hogehoge
hogehoge()
> hogehoge
by A B E H i rok i a k a h A Tra y f l ood
48. 2011/5/21 N SEG V o l .15
これはこれでimportが長い
パッケージ名を省略できる
ので後が楽といえば楽
by A B E H i rok i a k a h A Tra y f l ood
49. 2011/5/21 N SEG V o l .15
ところで、hoge.py自身は
パッケージであることを
明示してない
by A B E H i rok i a k a h A Tra y f l ood
50. 2011/5/21 N SEG V o l .15
< fuga/__init__.py
< fuga/hoge.py
import fuga.hoge
fuga.hoge.hogehoge()
by A B E H i rok i a k a h A Tra y f l ood
51. 2011/5/21 N SEG V o l .15
ファイルパスがそのまま
パッケージのパスになる
ただし__init__.pyが必要。
中身は空でもよい。
by A B E H i rok i a k a h A Tra y f l ood
52. 2011/5/21 N SEG V o l .15
__init__.pyにも関数や
クラス書ける。
ただしfrom importに限る
by A B E H i rok i a k a h A Tra y f l ood
53. 2011/5/21 N SEG V o l .15
fuga/__init__.py:
def fugafuga():
print("fugafuga")
by A B E H i rok i a k a h A Tra y f l ood
54. 2011/5/21 N SEG V o l .15
< fuga/__init__.py
from fuga import fugafuga
fugafuga()
by A B E H i rok i a k a h A Tra y f l ood
55. 2011/5/21 N SEG V o l .15
__init__.pyに何か書く意味は
分からないけど、こんなことも
できるあたり、チェック目的か?
by A B E H i rok i a k a h A Tra y f l ood
56. 2011/5/21 N SEG V o l .15
fuga/__init__.py:
raise("error") #print("error")
def fugafuga():
print("fugafuga")
by A B E H i rok i a k a h A Tra y f l ood
57. 2011/5/21 N SEG V o 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 A B E H i rok i a k a h A Tra y f l ood
58. 2011/5/21 N SEG V o l .15
事例 by A B E H i rok i a k a h A Tra y f l ood
59. 2011/5/21 N SEG V o l .15
実はライブラリ
作ってました。
rfZenHan
by A B E H i rok i a k a h A Tra y f l ood
60. 2011/5/21 N SEG V o l .15
s = u"012ABCabc!@#アイウガダパ㈱:"
rfZenHan.normalize(s)
> 012ABCabc!@#アイウガダパ(株):
※詳細はソースのコメント参照
by A B E H i rok i a k a h A Tra y f l ood
61. 2011/5/21 N SEG V o l .15
元ネタ
仕様:Perl Unicode::Japanese
実装:Python zenhan.py
車輪の再発明万歳
by A B E H i rok i a k a h A Tra y f l ood
62. 2011/5/21 N SEG V o l .15
eyeD3
by A B E H i rok i a k a h A Tra y f l ood
63. 2011/5/21 N SEG V o l .15
mp3のID3タグを
編集するライブラリ
by A B E H i rok i a k a h A Tra y f l ood
64. 2011/5/21 N SEG V o l .15
他の言語でまともに動く
ライブラリなかったのが
そもそものきっかけ
by A B E H i rok i a k a h A Tra y f l ood
65. 2011/5/21 N SEG V o l .15
Python
ナイスプレー
by A B E H i rok i a k a h A Tra y f l ood
66. 2011/5/21 N SEG V o l .15
Google App Engine
by A B E H i rok i a k a h A Tra y f l ood
67. 2011/5/21 N SEG V o l .15
Googleのオレオレ仕様な
Webアプリ実行環境
ただしサーバ性能は強力
by A B E H i rok i a k a h A Tra y f l ood
68. 2011/5/21 N SEG V o l .15
言語はJava、Python、Go
フレームワークはそれぞれ
DBは独自で非SQL
by A B E H i rok i a k a h A Tra y f l ood
69. 2011/5/21 N SEG V o l .15
Trac by A B E H i rok i a k a h A Tra y f l ood
70. 2011/5/21 N SEG V o l .15
言わずと知れた
プロジェクト管理
バグ追跡システム
by A B E H i rok i a k a h A Tra y f l ood
71. 2011/5/21 N SEG V o l .15
プラグイン豊富
svn以外にもhgや
gitも使えるらしい
by A B E H i rok i a k a h A Tra y f l ood
72. 2011/5/21 N SEG V o l .15
Mercurial
by A B E H i rok i a k a h A Tra y f l ood
73. 2011/5/21 N SEG V o l .15
バージョン管理システム
gitと同じ分散型
Web画面が標準である
by A B E H i rok i a k a h A Tra y f l ood
74. 2011/5/21 N SEG V o l .15
Python、OpenJDK
Mozilla、その他
多数のOSSで採用
by A B E H i rok i a k a h A Tra y f l ood
75. 2011/5/21 N SEG V o l .15
Firefoxビルド
by A B E H i rok i a k a h A Tra y f l ood
76. 2011/5/21 N SEG V o l .15
高速化のために
プロファイル採取
して最適化
by A B E H i rok i a k a h A Tra y f l ood
77. 2011/5/21 N SEG V o l .15
つまりビルドの
過程で自動実行
by A B E H i rok i a k a h A Tra y f l ood
78. 2011/5/21 N SEG V o l .15
ブラウザなので
Webサーバが必要
by A B E H i rok i a k a h A Tra y f l ood
79. 2011/5/21 N SEG V o l .15
Pythonは標準で
SimpleHTTPServer
が使える
by A B E H i rok i a k a h A Tra y f l ood
80. 2011/5/21 N SEG V o l .15
Python
ナイスプレー
by A B E H i rok i a k a h A Tra y f l ood
81. 2011/5/21 N SEG V o l .15
まとめ
by A B E H i rok i a k a h A Tra y f l ood
82. 2011/5/21 N SEG V o l .15
奇妙な
言語です
by A B E H i rok i a k a h A Tra y f l ood
83. 2011/5/21 N SEG V o l .15
仕様も
使う人も by A B E H i rok i a k a h A Tra y f l ood
84. 2011/5/21 N SEG V o l .15
奇妙さ故か
日本では
マイナーだけど
by A B E H i rok i a k a h A Tra y f l ood
85. 2011/5/21 N SEG V o l .15
ニッチなところで
役には立ってるので
by A B E H i rok i a k a h A Tra y f l ood
86. 2011/5/21 N SEG V o l .15
ここはあえて
この言葉で
by A B E H i rok i a k a h A Tra y f l ood
87. 2011/5/21 N SEG V o l .15
Python
ナイスプレー
by A B E H i rok i a k a h A Tra y f l ood
88. 2011/5/21 N SEG V o l .15
ありがとう
ございました
by A B E H i rok i a k a h A Tra y f l ood
89. 2011/5/21 N SEG V o l .15
リンク集
twitter hATrayflood
http://twitter.com/hATrayflood
Wikipedia Python
http://ja.wikipedia.org/wiki/Python
Python インストーラ
http://www.python.org/download/
Python 日本語リファレンス
http://www.python.jp/Zope/links/python_documents
作った人 グイド・ヴァンロッサム
http://ja.wikipedia.org/wiki/グイド・ヴァンロッサム
by A B E H i rok i a k a h A Tra y f l ood
90. 2011/5/21 N SEG V o l .15
rfZenHan
http://rayflood.org/diary-temp/rfZenHan-0.2.zip
元ネタ 仕様
半角←→全角変換,Unicode::Japanese に
未公開機能が… daily dayflower
http://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 A B E H i rok i a k a h A Tra y f l ood
91. 2011/5/21 N SEG V o l .15
eyeD3
http://eyed3.nicfit.net/
Google App Engine
http://code.google.com/intl/ja/appengine/
Trac
http://trac.edgewall.org/
Mercurial
http://mercurial.selenic.com/
by A B E H i rok i a k a h A Tra y f l ood