Introduction to Python 3.4 as of beta 1

1,466 views
1,231 views

Published on

Python 3.4 で新規に追加されるライブラリの一部の紹介です。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,466
On SlideShare
0
From Embeds
0
Number of Embeds
99
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introduction to Python 3.4 as of beta 1

  1. 1. Python 3.4
  2. 2. Python 3.4 ふるかわとおる @torufurukawa 39 プログラマ
  3. 3. Python 3.4 • 2013年8月3日: alpha 1 • 2013年9月9日: alpha 2 • 2013年9月29日: alpha 3 • 2013年10月20日: alpha 4 • 2013年11月23日: @torufurukawa 誕生日 • 2013年11月24日: beta 1 ---- 新機能追加はここまで ----
  4. 4. Python 3.4 • • • • 2014年1月5日: beta 2 2014年1月19日: candidate 1 2014年2月2日: candidate 2 2014年2月23日: final
  5. 5. What's New in Python 3.4 構文/文法の変更なし
  6. 6. What's New in Python 3.4
  7. 7. What's New in Python 3.4 追加ライブラリ • asyncio ... 非同期I/O • enum ... 列挙型 • ensurepip ... pip インストーラの管理 • pathlib ... オブジェクト指向パス • selectors ... 高レベルI/O マルチプレクス • statistics ... 統計関数 • tracemalloc ... メモリ確保のトレーサ
  8. 8. What's New in Python 3.4 実装 • file descriptor • Isolated mode • Codecs for non-text encodings
  9. 9. What's New in Python 3.4 ライブラリの向上 • Single-dispatch generic functions in functoools • New pickle protocol 4 • SHA-3 (Keccak) support for hashlib. • TLSv1.1 and TLSv1.2 support for ssl. • multiprocessing now has option to avoid using os.fork() on Unix
  10. 10. What's New in Python 3.4 CPython implementation • Safe object finalization • Configurable memory allocators • Secure and interchangeable hash algorithm • Improve finalization of Python modules to avoid setting their globals to None, in most cases (issue 18214). • A more efficient marshal format (issue 16475). • “Argument Clinic”, an initial step towards providing improved introspection support for builtin and standard library extension types implemented in C (PEP 436)
  11. 11. ライブラリ見ましょう • もう新機能の追加はないし • 内部実装のこととか難しいし
  12. 12. asyncio • 「asyncore: included batteries do not fit」 • シングルスレッドで並行処理するライブラリ – コルーチン – I/Oマルチプレクス – イベントループ – etc.
  13. 13. asyncio ドキュメントを見ると... 免責事項: ドキュメントは、まだ。 Beta が終了する頃にはできてるといいな。 それまでは PEP 読んで。
  14. 14. asyncio
  15. 15. asyncio • • • • • • 長い 「tulip」がベースらしい ぐぐる リンクたらい回し PyPI PEP へリンク
  16. 16. asyncio
  17. 17. enum モード、選択肢、戻り値の候補が固定されてい て、かつ、比較が必要。 ▼ 定数を安全に記述できる。
  18. 18. 〜3.3 enum >>> RED = 1 >>> GREEN = 2 >>> SPAM = 1 >>> HAM = 2 >>> RED == SPAM True
  19. 19. 〜3.3 enum >>> RED * HAM == HAM True >>> RED 1 # 分かりにくい
  20. 20. 〜3.3 enum >>> RED = "color:red" >>> GREEN = "color:green" # だるい
  21. 21. 3.4 enum from enum import Enum class Color(Enum): red = 1 green = 2
  22. 22. 3.4 enum >>> Color.red == Food.spam False >>> Color.red * 2 TypeError: unsupported operand type(s) for *: 'Color' and 'int' >>> Color.red Color.red
  23. 23. 3.4 enum >>> class Color(Enum): ... red = "#FF0000" ... green = "#00FF00" >>> Color.red.name "red" >>> Color.red.value "#FF0000"
  24. 24. ensurepip サードパーティのライブラリを使う。 ▼ パッケージインストーラが事実上はいってくる。
  25. 25. 〜3.3 ensurepip $ wget https://bitbucket.org/pypa/setuptools/src/1.4.1 /ez_setup.py $ wget https://raw.github.com/pypa/pip/develop/contr ib/get-pip.py $ ez_setup.py $ get-pip.py $ pip install virtualenv http://pelican.aodag.jp/python34noensurepipsoretopyvenvnogeng-xin.html
  26. 26. ensurepip • pip がインストールされた状態にする ためのライブラリ • make install したら呼び出されてる • 本家の OS X 用インストーラでも呼ばれている
  27. 27. ensurepip
  28. 28. 3.4 ensurepip $ pip ipython $ pyvenv-3.4 venv $ venv/bin/pip install kaaedit
  29. 29. pathlib パス、ディレクトリ、ファイルを操作する。 ▼ パスをオブジェクトっぽく操作できる。
  30. 30. 〜3.3 pathlib import os.path parent_dir = ( os.path.abspath( os.path.dirname( os.path.dirname(__file__) ) ) )
  31. 31. 〜3.3 pathlib from os.path import dirname, abspath parent_dir = ( abspath(dirname(dirname(__file__)) )
  32. 32. 〜3.3 pathlib from os.path import (dirname, abspath, join) target_dir = abspath( join( dirname(dirname(__file__)), 'target' ) )
  33. 33. 〜3.3 pathlib from glob import glob for p in glob(os.path.join(t, '*.py')): # do something ... fin = open(p)
  34. 34. 3.4 pathlib from pathlib import Path p = Path(__file__).parent.resolve() t = p.joinpath('target') t = p / 'target'
  35. 35. 3.4 pathlib for p in target_dir.glob('*.py'): pass fin = p.open()
  36. 36. selectors I/Oをイベント駆動で書きたいんだけど、 select/poll/epoll の薄いラッパだとだるい ▼ I/O マルチプレクスを手軽に。
  37. 37. selectors • select モジュールが低レベルすぎる • 環境ごとに自力で選ぶ – /dev/poll ... Solaris – epoll ... Linux – poll ... どこでも – kqueue ... BSD – select ... どこでも • イベントの種類も個別に違うし
  38. 38. 3.4 selectors s = selectors.DefaultSelector() s.register(mysocket, selectors.EVENT_READ) for key, events in s.select(): if events & selectors.EVENT_READ: print(key.fileobj.recv(1024))
  39. 39. statistics ちょっとした統計が必要 ▼ 平均、標準偏差なんかを正確に計算する。
  40. 40. 〜3.3 statistics >>> def var(data): ... n = len(data) ... ss = sum(x**2 for x in data) – ... (sum(data)**2)/n ... return ss/(n-1) >>> var([1,2,3,4])) 1.6666666666666667 >>> var([x+1e12 for x in [1,2,3,4]]*100)) -1377834120.02005
  41. 41. 〜3.3 statistics import numpy a = numpy.array(data, float) a.var()
  42. 42. 3.4 statistics import statistics statistics.variance([1,2,3,4])) statistics.variance([x+1e12 for x in [1,2,3,4]]*100))
  43. 43. tracemalloc import tracemalloc tracemalloc.start() x = [str(v) for v in range(1000)] snapshot = tracemalloc.take_snapshot() for stat in snapshot.statistics('lineno'): print(stat)
  44. 44. tracemalloc foo.py:7: size=59.4 KiB, count=1001, average=61 B foo.py:6: size=28 B, count=1, average=28 B
  45. 45. おしまい

×