Upload
naoya-inada
View
2.976
Download
2
Embed Size (px)
Citation preview
1
Python3のススメ
Python京都勉強会2011-06-11
2
お前、誰よ
● 稲田 尚也 (@naoina)● 株式会社SOBAプロジェクト所属
● Python歴はたぶん9ヶ月ぐらい (bitbucket調べ)● http://www.naniyueni.org/● 最近は音ゲー(REFLEC BEAT、jubeat)をやってた
りします
3
アジェンダ
● Pythonとは● 特徴● 2系と3系● 機能紹介
4
アジェンダ
● Pythonとは● 特徴● 2系と3系● 機能紹介
5
Pythonとは
6
Pythonとは
● 動的型付けのオブジェクト指向プログラミング言語● 作者はGuido van Rossum氏● 名前の由来は「空飛ぶモンティ・パイソン」から
● ニシキヘビからじゃないよ!● Googleの公式言語の1つ
7
アジェンダ
● Pythonとは● 特徴● 2系と3系● 機能紹介
8
特徴
9
特徴
● インタプリタ● オフサイドルール (インデントが構文の一部)● ダックタイピング● batteries included
10
特徴
インタプリタ
11
特徴
インタプリタ
http://ja.wikipedia.org/wiki/インタプリタ
12
特徴
インタプリタ
% cat juicy_karaage.pysay = "No.1"print(say)% python juicy_karaage.pyNo.1
13
特徴
オフサイドルール
14
特徴
オフサイドルール
http://ja.wikipedia.org/wiki/オフサイドルール
15
特徴
オフサイドルール
def f(): print("running f()")
def main(): f()
if __name__ == "__main__": main()
16
特徴
ダックタイピング
17
特徴
ダックタイピング
http://ja.wikipedia.org/wiki/ダックタイピング
18
特徴
ダックタイピング
もしそれがアヒルのように歩きアヒルのように鳴くのならば
それはアヒルである
19
特徴
ダックタイピング
class Duck: def say(self): print("quack")
class Mami: def say(self): print("tiro quack!")
def quack(animal): animal.say()
quack(Duck())quack(Mami())
ソース
20
特徴
ダックタイピング
class Duck: def say(self): print("quack")
class Mami: def say(self): print("tiro quack!")
def quack(animal): animal.say()
quack(Duck())quack(Mami())
% python quack.pyquacktiro quack!
ソース 実行結果
21
マミさんはアヒルになったのだ・・・
22
特徴
batteries included
23
特徴
batteries included
http://docs.python.org/py3k/library/
2系は http://docs.python.org/library/
24
特徴
batteries included● ネットワーク (http(s)、ftp、smtp、pop、socket)● XMLパーサー (DOM、SAX、XPath)● 圧縮 (gzip、bzip2、zip、tar)● SQLite● CSVパーサー● ユニットテスト● デバッガ● AST● email、json、thread、multiprocess、etc...
25
アジェンダ
● Pythonとは● 特徴● 2系と3系● 機能紹介
26
2系と3系
27
2系と3系
Python2.x
28
2系と3系
Python2.x– 最新リリースは2.7.1– マルチバイトを意識しないとハマる– 現状のサードパーティ製ライブラリはほとんど2.x向け
29
2系と3系
Python2.x– 最新リリースは2.7.1– マルチバイトを意識しないとハマる– 現状のサードパーティ製ライブラリはほとんど2.x向け
Python3.x
30
2系と3系
Python2.x– 最新リリースは2.7.1– マルチバイトを意識しないとハマる– 現状のサードパーティ製ライブラリはほとんど2.x向け
Python3.x– 最新リリースは3.2– ほとんど意識することなくマルチバイトを扱える– 新しい機能が使える
31
2系と3系
マルチバイト文字列
Python2.xまでは
>>> u"這いよる" + "混沌"Traceback (most recent call last): File "<stdin>", line 1, in <module>UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)>>>
# coding: utf-8print "名状しがたいバールのようなもの"
32
2系と3系
マルチバイト文字列
Python3.xでは
>>> "生ける" + "炎"'生ける炎'>>>
print("名状しがたいPerlのようなもの")
33
2系と3系
マルチバイト文字列
Python3.xでは
>>> "生ける" + "炎"'生ける炎'>>>
print("名状しがたいPerlのようなもの")
UTF-8で書けばほぼ問題は出ない!
34
アジェンダ
● Pythonとは● 特徴● 2系と3系● 機能紹介
35
機能紹介
36
機能紹介
37
ここが便利だよPython3
38
ここが便利だよPython3
Python3.xにしかない便利機能を紹介
39
ここが便利だよPython3
● 集合リテラル● 内包表記● 複数with文● 順序付き辞書
40
ここが便利だよPython3
集合リテラル
41
ここが便利だよPython3
集合リテラル
>>> {1, 2, 3, 2, 1}{1, 2, 3}>>>>>> {"madoka", "ao", "mami", "anko", "hmhm", "mami"}{'mami', 'madoka', 'hmhm', 'ao', 'anko'}>>>
42
ここが便利だよPython3
集合リテラル
>>> {1, 2, 3, 2, 1}{1, 2, 3}>>>>>> {"madoka", "ao", "mami", "anko", "hmhm", "mami"}{'mami', 'madoka', 'hmhm', 'ao', 'anko'}>>>
set([1, 2, 3, 2, 1])みたいなのと同じ!
43
ここが便利だよPython3
内包表記
44
ここが便利だよPython3
内包表記
>>> [i for i in range(10)][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>>
※Python2.xでも出来る
45
ここが便利だよPython3
内包表記
>>> {i: i * 2 for i in range(5)}{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}>>>
46
ここが便利だよPython3
内包表記
辞書も内包表記出来る!
>>> {i: i * 2 for i in range(5)}{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}>>>
47
ここが便利だよPython3
内包表記
辞書も内包表記出来る!
>>> {i: i * 2 for i in range(5)}{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}>>>
さらに・・・
48
ここが便利だよPython3
内包表記
>>> a = ["知ってる?", "知らない", "ミストルティンキック"]>>> b = ["キックじゃない", "知ってる?", "知らない"]>>> {x for x in a + b}{'知らない', 'ミストルティンキック', '知ってる?', 'キックじゃない'}>>>
49
ここが便利だよPython3
内包表記
集合も内包表記出来る!
>>> a = ["知ってる?", "知らない", "ミストルティンキック"]>>> b = ["キックじゃない", "知ってる?", "知らない"]>>> {x for x in a + b}{'知らない', 'ミストルティンキック', '知ってる?', 'キックじゃない'}>>>
50
ここが便利だよPython3
複数with文
51
ここが便利だよPython3
複数with文
with open("in.txt") as infile: with open("out.txt", "w") as outfile: outfile.write(infile.read())
Python2.x
52
ここが便利だよPython3
複数with文
with open("in.txt") as infile: with open("out.txt", "w") as outfile: outfile.write(infile.read())
with open("in.txt") as infile, open("out.txt", "w") as outfile: outfile.write(infile.read())
Python2.x
Python3.x
53
ここが便利だよPython3
順序付き辞書
54
ここが便利だよPython3
順序付き辞書
>>> d = {}>>> d["Linux"] = "Arch">>> d["BSD"] = "Free">>> d["Mac"] = "Lion">>> d["Windows"] = "sucks">>> for k, v in d.items():... print(k, v)... BSD FreeWindows sucksMac LionLinux Arch>>>
組み込み型の辞書
55
ここが便利だよPython3
順序付き辞書
>>> d = {}>>> d["Linux"] = "Arch">>> d["BSD"] = "Free">>> d["Mac"] = "Lion">>> d["Windows"] = "sucks">>> for k, v in d.items():... print(k, v)... BSD FreeWindows sucksMac LionLinux Arch>>>
>>> import collections>>> d = collections.OrderedDict()>>> d["Linux"] = "Arch">>> d["BSD"] = "Free">>> d["Mac"] = "Lion">>> d["Windows"] = "sucks">>> for k, v in d.items():... print(k, v)... Linux ArchBSD FreeMac LionWindows sucks>>>
組み込み型の辞書 順序付き辞書
56
ここまでであることに気がついた方
57
Python3.xにしかない便利機能を紹介すると言ったな
58
あれは嘘だ
59
● 集合リテラル● 内包表記● 複数with文● 順序付き辞書
60
● 集合リテラル● 内包表記● 複数with文● 順序付き辞書
実はすべてPython2.7にバックポートされているという事実
61
● ただし、2.7はあくまで3.xへの移行を容易にするのが目的
62
● ただし、2.7はあくまで3.xへの移行を容易にするのが目的
● 2系の最終リリース (予定)
63
Python3.2
64
Python3.2
http://docs.python.org/py3k/whatsnew/3.2.html
65
Python3.2
● ElementTree 1.3 (xml.etree.ElementTree)● LRU cache decorator (functools.lru_cache)● Command line option parser (argparse)● Unicode 6.0.0● etc...
66
まとめ
67
まとめ
● 今から始めるならPython3● 新しい機能を使いたいならPython3● マルチバイト周りで苦労したくないならPython3● 現実的にはPython2と3の併用
68
質疑応答
69
ありがとうございました