Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to Python 3.4 as of beta 1

1,848 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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. おしまい

×