SlideShare a Scribd company logo
1 of 45
Python 3.4
Python 3.4
ふるかわとおる

@torufurukawa

39
プログラマ
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
---- 新機能追加はここまで ----
Python 3.4
•
•
•
•

2014年1月5日: beta 2
2014年1月19日: candidate 1
2014年2月2日: candidate 2
2014年2月23日: final
What's New in Python 3.4
構文/文法の変更なし
What's New in Python 3.4
What's New in Python 3.4
追加ライブラリ
• asyncio ... 非同期I/O
• enum ... 列挙型
• ensurepip ... pip インストーラの管理
• pathlib ... オブジェクト指向パス
• selectors ... 高レベルI/O マルチプレクス
• statistics ... 統計関数
• tracemalloc ... メモリ確保のトレーサ
What's New in Python 3.4
実装
• file descriptor
• Isolated mode
• Codecs for non-text encodings
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
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)
ライブラリ見ましょう
• もう新機能の追加はないし
• 内部実装のこととか難しいし
asyncio
• 「asyncore: included batteries do not fit」
• シングルスレッドで並行処理するライブラリ
– コルーチン
– I/Oマルチプレクス
– イベントループ
– etc.
asyncio
ドキュメントを見ると...
免責事項:
ドキュメントは、まだ。
Beta が終了する頃にはできてるといいな。
それまでは PEP 読んで。
asyncio
asyncio
•
•
•
•
•
•

長い
「tulip」がベースらしい
ぐぐる
リンクたらい回し
PyPI
PEP へリンク
asyncio
enum
モード、選択肢、戻り値の候補が固定されてい
て、かつ、比較が必要。
▼
定数を安全に記述できる。
〜3.3

enum
>>> RED = 1
>>> GREEN = 2
>>> SPAM = 1
>>> HAM = 2
>>> RED == SPAM
True
〜3.3

enum
>>> RED * HAM == HAM
True
>>> RED
1 # 分かりにくい
〜3.3

enum
>>> RED = "color:red"
>>> GREEN = "color:green"

# だるい
3.4

enum
from enum import Enum
class Color(Enum):
red = 1
green = 2
3.4

enum
>>> Color.red == Food.spam
False
>>> Color.red * 2
TypeError: unsupported operand type(s)
for *: 'Color' and 'int'

>>> Color.red
Color.red
3.4

enum
>>> class Color(Enum):
...
red = "#FF0000"
...
green = "#00FF00"
>>> Color.red.name
"red"
>>> Color.red.value
"#FF0000"
ensurepip
サードパーティのライブラリを使う。
▼
パッケージインストーラが事実上はいってくる。
〜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
ensurepip
• pip がインストールされた状態にする
ためのライブラリ
• make install したら呼び出されてる
• 本家の OS X 用インストーラでも呼ばれている
ensurepip
3.4

ensurepip
$ pip ipython
$ pyvenv-3.4 venv
$ venv/bin/pip install kaaedit
pathlib
パス、ディレクトリ、ファイルを操作する。
▼
パスをオブジェクトっぽく操作できる。
〜3.3

pathlib
import os.path
parent_dir = (
os.path.abspath(
os.path.dirname(
os.path.dirname(__file__)
)
)
)
〜3.3

pathlib
from os.path import dirname,
abspath
parent_dir = (
abspath(dirname(dirname(__file__))
)
〜3.3

pathlib
from os.path import (dirname,
abspath, join)
target_dir = abspath(
join(
dirname(dirname(__file__)),
'target'
)
)
〜3.3

pathlib
from glob import glob
for p in glob(os.path.join(t, '*.py')):
# do something
...
fin = open(p)
3.4

pathlib
from pathlib import Path
p = Path(__file__).parent.resolve()
t = p.joinpath('target')
t = p / 'target'
3.4

pathlib
for p in target_dir.glob('*.py'):
pass
fin = p.open()
selectors
I/Oをイベント駆動で書きたいんだけど、
select/poll/epoll の薄いラッパだとだるい
▼
I/O マルチプレクスを手軽に。
selectors
• select モジュールが低レベルすぎる
• 環境ごとに自力で選ぶ
– /dev/poll ... Solaris
– epoll ... Linux
– poll ... どこでも
– kqueue ... BSD
– select ... どこでも

• イベントの種類も個別に違うし
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))
statistics
ちょっとした統計が必要
▼
平均、標準偏差なんかを正確に計算する。
〜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
〜3.3

statistics
import numpy
a = numpy.array(data, float)
a.var()
3.4

statistics
import statistics
statistics.variance([1,2,3,4]))
statistics.variance([x+1e12 for x
in [1,2,3,4]]*100))
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)
tracemalloc
foo.py:7: size=59.4 KiB, count=1001, average=61 B
foo.py:6: size=28 B, count=1, average=28 B
おしまい

More Related Content

Viewers also liked

おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)Toru Furukawa
 
Jag201610 API Diffで見るNougat
Jag201610   API Diffで見るNougat Jag201610   API Diffで見るNougat
Jag201610 API Diffで見るNougat mokelab
 
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1Yi-Feng Tzeng
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Takuya Ueda
 
とあるBtoB企業でGoを使ってみた話
とあるBtoB企業でGoを使ってみた話とあるBtoB企業でGoを使ってみた話
とあるBtoB企業でGoを使ってみた話Aiga Matsuo
 
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践Takuya Ueda
 
Si案件でGo言語を使ってみた!
Si案件でGo言語を使ってみた!Si案件でGo言語を使ってみた!
Si案件でGo言語を使ってみた!Koichiro Nishijima
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)lestrrat
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51civicpg
 

Viewers also liked (10)

おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
Jag201610 API Diffで見るNougat
Jag201610   API Diffで見るNougat Jag201610   API Diffで見るNougat
Jag201610 API Diffで見るNougat
 
PHP7を魔改造した話
PHP7を魔改造した話PHP7を魔改造した話
PHP7を魔改造した話
 
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
 
とあるBtoB企業でGoを使ってみた話
とあるBtoB企業でGoを使ってみた話とあるBtoB企業でGoを使ってみた話
とあるBtoB企業でGoを使ってみた話
 
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践
 
Si案件でGo言語を使ってみた!
Si案件でGo言語を使ってみた!Si案件でGo言語を使ってみた!
Si案件でGo言語を使ってみた!
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51
 

More from Toru Furukawa

Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
 Twitter 広告と API を組み合わせたインタラクティブなキャンペーン Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Twitter 広告と API を組み合わせたインタラクティブなキャンペーンToru Furukawa
 
Test Failed, Then...
Test Failed, Then...Test Failed, Then...
Test Failed, Then...Toru Furukawa
 
Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012Toru Furukawa
 
Python 3.3 チラ見
Python 3.3 チラ見Python 3.3 チラ見
Python 3.3 チラ見Toru Furukawa
 
Python32 pyhackathon-201011
Python32 pyhackathon-201011Python32 pyhackathon-201011
Python32 pyhackathon-201011Toru Furukawa
 

More from Toru Furukawa (9)

Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
 Twitter 広告と API を組み合わせたインタラクティブなキャンペーン Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
 
Test Failed, Then...
Test Failed, Then...Test Failed, Then...
Test Failed, Then...
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012
 
Python 3.3 チラ見
Python 3.3 チラ見Python 3.3 チラ見
Python 3.3 チラ見
 
Python32 pyhackathon-201011
Python32 pyhackathon-201011Python32 pyhackathon-201011
Python32 pyhackathon-201011
 
Django
Django Django
Django
 
Python 2.7
Python 2.7Python 2.7
Python 2.7
 
BPStudy#34 導入
BPStudy#34 導入BPStudy#34 導入
BPStudy#34 導入
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Recently uploaded (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

Introduction to Python 3.4 as of beta 1