SlideShare a Scribd company logo
Python3のススメ
   Python京都勉強会
     2011-06-11




                  1
お前、誰よ


●
    稲田 尚也 (@naoina)
●
    株式会社SOBAプロジェクト所属

●
    Python歴はたぶん9ヶ月ぐらい (bitbucket調べ)
●
    http://www.naniyueni.org/
●
    最近は音ゲー(REFLEC BEAT、jubeat)をやってた
    りします




                                      2
アジェンダ


●
    Pythonとは
●
    特徴
●
    2系と3系
●
    機能紹介




               3
アジェンダ


●
    Pythonとは
●
    特徴
●
    2系と3系
●
    機能紹介




               4
Pythonとは

           5
Pythonとは


●
    動的型付けのオブジェクト指向プログラミング言語
●
    作者はGuido van Rossum氏
●
    名前の由来は「空飛ぶモンティ・パイソン」から
    ●
      ニシキヘビからじゃないよ!
●
    Googleの公式言語の1つ




                          6
アジェンダ


●
    Pythonとは
●
    特徴
●
    2系と3系
●
    機能紹介




               7
特徴

     8
特徴


●
    インタプリタ
●
    オフサイドルール (インデントが構文の一部)
●
    ダックタイピング
●
    batteries included




                             9
特徴




インタプリタ




         10
特徴




インタプリタ



http://ja.wikipedia.org/wiki/インタプリタ




                                      11
特徴




インタプリタ

     % cat juicy_karaage.py
     say = "No.1"
     print(say)
     % python juicy_karaage.py
     No.1




                                 12
特徴




オフサイドルール




           13
特徴




 オフサイドルール



http://ja.wikipedia.org/wiki/オフサイドルール




                                   14
特徴




オフサイドルール
     def f():
         print("running f()")

     def main():
         f()

     if __name__ == "__main__":
         main()




                                  15
特徴




ダックタイピング




           16
特徴




 ダックタイピング



http://ja.wikipedia.org/wiki/ダックタイピング




                                   17
特徴




ダックタイピング


     もしそれがアヒルのように歩き
      アヒルのように鳴くのならば
        それはアヒルである

                      18
特徴




ダックタイピング
          ソース

class Duck:
    def say(self):
        print("quack")

class Mami:
    def say(self):
        print("tiro quack!")

def quack(animal):
    animal.say()

quack(Duck())
quack(Mami())

                               19
特徴




ダックタイピング
          ソース                            実行結果
class Duck:                    % python quack.py
    def say(self):             quack
        print("quack")         tiro quack!

class Mami:
    def say(self):
        print("tiro quack!")

def quack(animal):
    animal.say()

quack(Duck())
quack(Mami())

                                                   20
マミさんはアヒルになったのだ・・・




                    21
特徴




batteries included




                     22
特徴




batteries included



 http://docs.python.org/py3k/library/


      2系は http://docs.python.org/library/




                                            23
特徴




batteries included
     ●
         ネットワーク (http(s)、ftp、smtp、pop、socket)
     ●
         XMLパーサー (DOM、SAX、XPath)
     ●
         圧縮 (gzip、bzip2、zip、tar)
     ●
         SQLite
     ●
         CSVパーサー
     ●
         ユニットテスト
     ●
         デバッガ
     ●
         AST
     ●
         email、json、thread、multiprocess、etc...
                                                 24
アジェンダ


●
    Pythonとは
●
    特徴
●
    2系と3系
●
    機能紹介




               25
2系と3系

        26
2系と3系


Python2.x




            27
2系と3系


Python2.x
  –   最新リリースは2.7.1
  –   マルチバイトを意識しないとハマる
  –   現状のサードパーティ製ライブラリはほとんど2.x向け




                               28
2系と3系


Python2.x
  –   最新リリースは2.7.1
  –   マルチバイトを意識しないとハマる
  –   現状のサードパーティ製ライブラリはほとんど2.x向け


Python3.x




                               29
2系と3系


Python2.x
  –   最新リリースは2.7.1
  –   マルチバイトを意識しないとハマる
  –   現状のサードパーティ製ライブラリはほとんど2.x向け


Python3.x
  –   最新リリースは3.2
  –   ほとんど意識することなくマルチバイトを扱える
  –   新しい機能が使える


                               30
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-8
 print "名状しがたいバールのようなもの"


                                                            31
2系と3系


マルチバイト文字列
Python3.xでは

 >>> "生ける" + "炎"
 '生ける炎'
 >>>



 print("名状しがたいPerlのようなもの")




                             32
2系と3系


マルチバイト文字列
Python3.xでは

 >>> "生ける" + "炎"
 '生ける炎'
 >>>



 print("名状しがたいPerlのようなもの")




   UTF-8で書けばほぼ問題は出ない!

                             33
アジェンダ


●
    Pythonとは
●
    特徴
●
    2系と3系
●
    機能紹介




               34
機能紹介

       35
機能紹介

       36
ここが便利だよ
 Python3
           37
ここが便利だよPython3




      Python3.xにしかない
        便利機能を紹介



                       38
ここが便利だよPython3


●
    集合リテラル
●
    内包表記
●
    複数with文
●
    順序付き辞書




                     39
ここが便利だよPython3




集合リテラル




                 40
ここが便利だよPython3




集合リテラル
>>> {1, 2, 3, 2, 1}
{1, 2, 3}
>>>
>>> {"madoka", "ao", "mami", "anko", "hmhm", "mami"}
{'mami', 'madoka', 'hmhm', 'ao', 'anko'}
>>>




                                                       41
ここが便利だよ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])みたいなのと同じ!

                                                       42
ここが便利だよPython3




内包表記




                 43
ここが便利だよPython3




内包表記
>>> [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

※Python2.xでも出来る




                                 44
ここが便利だよPython3




内包表記
>>> {i: i * 2 for i in range(5)}
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
>>>




                                   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




内包表記
>>> a = ["知ってる?", "知らない", "ミストルティンキック"]
>>> b = ["キックじゃない", "知ってる?", "知らない"]
>>> {x for x in a + b}
{'知らない', 'ミストルティンキック', '知ってる?', 'キックじゃない'}
>>>




                                             48
ここが便利だよPython3




内包表記
>>> a = ["知ってる?", "知らない", "ミストルティンキック"]
>>> b = ["キックじゃない", "知ってる?", "知らない"]
>>> {x for x in a + b}
{'知らない', 'ミストルティンキック', '知ってる?', 'キックじゃない'}
>>>



          集合も内包表記出来る!




                                             49
ここが便利だよPython3




複数with文




                 50
ここが便利だよPython3




複数with文
Python2.x
with open("in.txt") as infile:
    with open("out.txt", "w") as outfile:
        outfile.write(infile.read())




                                            51
ここが便利だよPython3




複数with文
Python2.x
with open("in.txt") as infile:
    with open("out.txt", "w") as outfile:
        outfile.write(infile.read())



Python3.x
with open("in.txt") as infile, open("out.txt", "w") as outfile:
    outfile.write(infile.read())




                                                                  52
ここが便利だよPython3




順序付き辞書




                 53
ここが便利だよPython3




順序付き辞書
>>> d = {}
>>> d["Linux"] = "Arch"
>>> d["BSD"] = "Free"
>>> d["Mac"] = "Lion"
>>> d["Windows"] = "sucks"
>>> for k, v in d.items():
...      print(k, v)
...
BSD Free
Windows sucks
Mac Lion
Linux Arch
>>>


    組み込み型の辞書                 54
ここが便利だよPython3




順序付き辞書
>>> d = {}                   >>> import collections
>>> d["Linux"] = "Arch"      >>> d = collections.OrderedDict()
>>> d["BSD"] = "Free"        >>> d["Linux"] = "Arch"
>>> d["Mac"] = "Lion"        >>> d["BSD"] = "Free"
>>> d["Windows"] = "sucks"   >>> d["Mac"] = "Lion"
>>> for k, v in d.items():   >>> d["Windows"] = "sucks"
...      print(k, v)         >>> for k, v in d.items():
...                          ...      print(k, v)
BSD Free                     ...
Windows sucks                Linux Arch
Mac Lion                     BSD Free
Linux Arch                   Mac Lion
>>>                          Windows sucks
                             >>>

    組み込み型の辞書                          順序付き辞書                     55
ここまでであることに気がついた方



               56
Python3.xにしかない
便利機能を紹介すると言ったな



                   57
あれは嘘だ

        58
●
    集合リテラル
●
    内包表記
●
    複数with文
●
    順序付き辞書




              59
●
    集合リテラル
●
    内包表記
●
    複数with文
●
    順序付き辞書


      実はすべてPython2.7に
    バックポートされているという事実

                    60
●
    ただし、2.7はあくまで3.xへの移行を容易にするの
    が目的




                             61
●
    ただし、2.7はあくまで3.xへの移行を容易にするの
    が目的
●
    2系の最終リリース (予定)




                             62
Python3.2


            63
Python3.2




http://docs.python.org/py3k/whatsnew/3.2.html




                                                64
Python3.2


●
    ElementTree 1.3 (xml.etree.ElementTree)
●
    LRU cache decorator (functools.lru_cache)
●
    Command line option parser (argparse)
●
    Unicode 6.0.0
●
    etc...




                                                65
まとめ


      66
まとめ


●
    今から始めるならPython3
●
    新しい機能を使いたいならPython3
●
    マルチバイト周りで苦労したくないならPython3
●
    現実的にはPython2と3の併用




                                67
質疑応答


       68
ありがとうございました


              69

More Related Content

What's hot (19)

PPTX
パケットジェネレータipgenから見るnetmap
furandon_pig
 
PDF
Lisp Tutorial for Pythonista Day 6
Ransui Iso
 
PDF
Ylug 110th kpatch code reading
Masami Hiramatsu
 
PDF
GPD WINでStretchを動かす
Yuma Ohgami
 
PDF
Mincs 日本語版
Masami Hiramatsu
 
PDF
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
aoshiman
 
PDF
静的解析を使った開発ツールの開発
Takuya Ueda
 
PDF
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
 
PDF
Tricky implementation of Go ARM soft float
Tetsuyuki Kobayashi
 
PPTX
190925 python-windows
Takuya Nishimoto
 
PDF
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
moto2g
 
PDF
Pythonでゲーム作る
amusementcreators
 
PDF
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Kenichiro MATOHARA
 
PDF
golang binary hacks
yaegashi
 
PDF
Patch101
Tetsuyuki Kobayashi
 
PDF
本当はこわいエンコーディングの話
Masahiro Tomita
 
ODP
仕事で使えるシェルスクリプト
bsdhack
 
PDF
覚えておきたい! zypper コマンドの使い方
Fuminobu Takeyama
 
PDF
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
Hirotaka Kawata
 
パケットジェネレータipgenから見るnetmap
furandon_pig
 
Lisp Tutorial for Pythonista Day 6
Ransui Iso
 
Ylug 110th kpatch code reading
Masami Hiramatsu
 
GPD WINでStretchを動かす
Yuma Ohgami
 
Mincs 日本語版
Masami Hiramatsu
 
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
aoshiman
 
静的解析を使った開発ツールの開発
Takuya Ueda
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
 
Tricky implementation of Go ARM soft float
Tetsuyuki Kobayashi
 
190925 python-windows
Takuya Nishimoto
 
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
moto2g
 
Pythonでゲーム作る
amusementcreators
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Kenichiro MATOHARA
 
golang binary hacks
yaegashi
 
本当はこわいエンコーディングの話
Masahiro Tomita
 
仕事で使えるシェルスクリプト
bsdhack
 
覚えておきたい! zypper コマンドの使い方
Fuminobu Takeyama
 
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
Hirotaka Kawata
 

Similar to Python Kyoto study (20)

PDF
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
 
ODP
Introduction of Python
Tomoya Nakayama
 
PDF
LLdeade Python Language Update
Atsushi Shibata
 
PPTX
2017/12/21 虎の穴 Python勉強会
虎の穴 開発室
 
PPT
Python languageupdate (2004)
泰 増田
 
PDF
Python01
XMLProJ2014
 
KEY
Hello World Python featuring GAE
Maito Kuwahara
 
PDF
Introduction to Numpy (and Python) [JPN]
MasaruOinaga
 
PPTX
Introduction to Python 3.4 as of beta 1
Toru Furukawa
 
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
 
PDF
PyPy 紹介
shoma h
 
PDF
Python入門
Shohei Okada
 
PDF
エキ Py 読書会02 2章前半
Tetsuya Morimoto
 
KEY
ひのきのぼうだけで全クリ目指す
AromaBlack
 
PDF
Pythonで始めるDropboxAPI
Daisuke Igarashi
 
PDF
Introduction Pycon2010
(shibao)芝尾 (kouichiro)幸一郎
 
PPTX
Wacode5thでのpython講義資料
丈 宮本
 
PDF
第36回NDS 発表資料 ちょこっとpython
civic Sasaki
 
PPT
Pythonintro
Mikio Kubo
 
PDF
Wrapping a C++ library with Cython
fuzzysphere
 
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
 
Introduction of Python
Tomoya Nakayama
 
LLdeade Python Language Update
Atsushi Shibata
 
2017/12/21 虎の穴 Python勉強会
虎の穴 開発室
 
Python languageupdate (2004)
泰 増田
 
Python01
XMLProJ2014
 
Hello World Python featuring GAE
Maito Kuwahara
 
Introduction to Numpy (and Python) [JPN]
MasaruOinaga
 
Introduction to Python 3.4 as of beta 1
Toru Furukawa
 
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
 
PyPy 紹介
shoma h
 
Python入門
Shohei Okada
 
エキ Py 読書会02 2章前半
Tetsuya Morimoto
 
ひのきのぼうだけで全クリ目指す
AromaBlack
 
Pythonで始めるDropboxAPI
Daisuke Igarashi
 
Introduction Pycon2010
(shibao)芝尾 (kouichiro)幸一郎
 
Wacode5thでのpython講義資料
丈 宮本
 
第36回NDS 発表資料 ちょこっとpython
civic Sasaki
 
Pythonintro
Mikio Kubo
 
Wrapping a C++ library with Cython
fuzzysphere
 
Ad

More from Naoya Inada (7)

PDF
べき等データベースマイグレーションツールmigu
Naoya Inada
 
PDF
Tokyo Otaku Mode での PayPal 活用事例
Naoya Inada
 
PDF
シンプルなシステム構成フレームワークalnair
Naoya Inada
 
PDF
kyotovim#1
Naoya Inada
 
PDF
HTML5-pronama-study
Naoya Inada
 
PDF
dvcs-kyoto
Naoya Inada
 
PDF
rucs_vim LT
Naoya Inada
 
べき等データベースマイグレーションツールmigu
Naoya Inada
 
Tokyo Otaku Mode での PayPal 活用事例
Naoya Inada
 
シンプルなシステム構成フレームワークalnair
Naoya Inada
 
kyotovim#1
Naoya Inada
 
HTML5-pronama-study
Naoya Inada
 
dvcs-kyoto
Naoya Inada
 
rucs_vim LT
Naoya Inada
 
Ad

Recently uploaded (7)

PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 

Python Kyoto study