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