Python 3.6 リリースパーティーに参加しました #pystudy¶
Python3.6 リリースパーティーに参加しました。その時のメモです。 https://pystudy.connpass.com/event/48361/
免責事項: 雑なメモなので間違ってる部分もあるかもしれません。
Python 3.6 Release Party!! (@ LODGE in 千代田区, 東京都) https://t.co/FoJoKLw48q pic.twitter.com/mze4lm6tgz
— Takayuki Shimizukawa (@shimizukawa) 2017年1月31日
パーティー¶
(@t2y)「Python 3.6 リリースおめでとー!(クラッカーぱーん!)」
パーティー感の残骸です #pystudy pic.twitter.com/ttz93fuqB5
— Takanori Suzuki (@takanory) 2017年1月31日
パーティー終了(開始数十秒w)
@atsuoishimoto Python 3.6 の新機能と改善¶
発表者: @atsuoishimoto
テーマ: Python 3.6 の新機能と改善
スライド: http://atsuoishimoto.hatenablog.com/entry/2017/01/31/202202
@atsuoishimoto「今日はオライリー帽子をかぶって発表します。オライリーさんで本を書くと、著者帽子をもらえて、こういうイベントでかぶらなければいけないんですね」(w
新機能全文はこちら: https://docs.python.org/3/whatsnew/3.6.html
f文字列(フォーマット済み文字列)
f'{式}'
で波カッコ内に計算式や変数をかける式には一通り書ける。f文字列もかける。yieldも書ける。awaitは書けなかったけどバグらしい
制約:
f'{"\t"}'
のようにバックスラッシュ文字は書けない(文字列の中の文字の扱いが面倒らしい)制約: lambda式はそのままは書けない。 : が別の意味になってしまうので。
()
で囲んだら書けるf文字列のパフォーマンスは比較するととくに速くも遅くもない
PEP 515 underscores in numeric literals
数字に
123_456_789
のように桁区切りを分かりやすく書けるようになった二進数や16進数にも使える。
0b1110_1011
など
PEP 487 Simpler customization of class creation
クラス生成器のカスタマイズがやりやすくなった
Enum型のように、属性値に1と入れたはずなのに、定義後にアクセスすると別の型になっている、など
いままではメタクラスを使ってカスタマイズしていた
複数のメタクラスを組み合わせられない問題や、Python型システムがそれなりに難しい問題などが解決?
__init_subclass__(cls, kwargs)
基底クラスに実装しておくと、サブクラス定義時に呼び出される
メタクラスなしにカスタマイズできる!
この方式なら多重継承したそれぞれの基底クラスにカスタマイズ実装をしておけば、派生クラス定義時に両方が呼び出される
(呼び出し順はmroに従うんだろうな)
__set_name__(self, cls, name)
属性に代入するクラスインスタンスがこれを持ってたら、代入時に呼び出される
(簡易デスクリプタっぽいね)
属性の登録順
クラスの
__dict__
は登録順を記録する(OrderedDict? @methane が実装したdict順序維持が使われてる?)
PEP 506 Adding A Secrets Module To The Standard Library
新規モジュール:
secrets
PEP 495 Local Time Disambiguation
date/datetime にfold属性が追加された
夏時間の終了時に時間の巻き戻しが発生する
巻き戻ってる状態で時刻重複してますよ状態 =
fold=1
PEP 519 Adding a file system path protocl
__fspath__(self)
プロトコルメソッド実装を持っているオブジェクトなら何でもopen()に渡せるpathlib.Path オブジェクトなどを渡せる
open(str(Path(__file__)))
これがopen(Path(__file__))
これでよくなる
PEP 528 Change Windows console encoding to UTF-8
従来は、日本語Windowsならcp932だった
print('\N{EURO SIGN}')
出力できない文字もある(お寿司とか)
ファイルリダイレクトすると従来通りとなる(cp932になる)
PEP 529 Change Windowsfilesystem encoding to UTF-8
os.listdir('.')
とos.listdir(b'.')
の動作の違いWindowsでは、bytesを渡すのは非推奨だった(ANSI系APIの都合)
Python-3.6 から、Pythonが自前実装した(ANSI系APIを使わなくなった)ので、Windowsだからとか気にしなくてよくなった
正規表現
group参照機能の改善:
m.group('G1')
をm['G1']
で書けるようになったフラグ指定の改善: フラグ指定を正規表現パターン内に書けるので全体適用しない使い方ができるようになった
Q&A¶
sys.path
にpathlib.Path
を入れたらパスとして認識されなかったのですが、__fspath__
がどこに使えるかという情報はどこかにまとまっていますか?(しみずかわ)あるとしたら PEP 519 にあるくらいです(いしもと)
sys.path
はPython起動処理にも絡む部分なので、__fspath__
のような複雑な仕組みは動作しないかもまだ全体的に使えるとは言えないと思うし、実装がまだ不安定な部分もあるようです(いしもと)
__fspath__
メソッド内で例外が発生したら、Pythonプロセスごと落ちてしまった(いしもと)
感想: Python3.5で十分だと思ってたけど、3.6で色々使いやすくなっていってて良い。最新を追おう
(ここで10分ほど休憩)
@Masahito PEP 526 and 周辺ツールについて¶
時間: 20:10 - 20:32
発表者: @Masahito
テーマ: PEP 526 and 周辺ツールについて
スライド: http://www.slideshare.net/masahitojp/20170131-python3-6-pep526
PEP 526 Syntax for Variable Annotations
typing
typingモジュールはPython3.5で導入
PyPIにあるので、
pip install typing
でインストールすればPython2.7以降で使えるPython3.6でのtypingの変更点: Collection, ContextManager, NamedTuple 型の追加
周辺ツール
mypy
pytype
PyCharm
(PyCharmのtype hint対応を使ってるけど、便利です(型間違えがハイライトされるとか、呼び出しが複数階層あっても伝搬するとかという普通の便利さ))
pytype
Python 3.4, 3.5 で動かすと良い
(はじめて聞いた)
MyPy
MyPyが持っている typeshed はまだPython-3.6対応できてないようだ
MyPy自体が新しいPython文法に未対応な部分もある
Protocol
typingの中身ダックタイピングな関数の動作に対して型を指定できる仕組みがtyping内部にありそう
Q&A¶
typingの使い方について、Tupleの場合全要素を型指定指定しないといけない(aodag)
リストの例:
List[str]
リストの要素全部がstrだよという意味タプルの例:
List[str, str, str]
3要素のstrのタプルはこう書かないと行けない(まさひと)今のところ良い方法はなさそう
感想:
ちょっと要点が分かりづらかったかな(´・ω・`)
pytypeを使うメリットはなんですか?って聞こうと思ったけど時間の都合で聞けなかった残念
@methane 新dict実装の話, New dict implementation¶
本日家族の都合で参加できなくなってしまいました。申し訳ありません。
— INADA Naoki (@methane) 2017年1月31日
発表資料だけ共有しておきます。 #pystudy
New dict implementation in Python 3.6 https://t.co/tQFUm2PrLL
@t2y async関連, PEP 525, PEP 530¶
時間: 20:33 - 21:00
発表者: @t2y
スライド: https://speakerdeck.com/t2y/python-3-dot-6-release-party-async-guan-lian
はい
非同期/並行処理の背景
マルチスレッド vs イベント駆動
例: Apache vs Nginx
並行と並列 -> 厳密な定義はない
並行: 1CPUでタイムシェアして動くやつ
並列: マルチコアで動いてるやつ
実行単位: プロセス、スレッド、コルーチン
コルーチン
ファイバーとかジェネレータとか
処理を一時中断したり復元したりしながら実行
ジェネレータ: yield とか yield from を使って定義した関数
コルーチン
ネイティブコルーチン: async def で実装
ジェネレーターベースのコルーチン: ジェネレータ構文で書ける
Python3の非同期処理の変遷
ユースケース
producer-consumer pattern
ネイティブ: async def と awit <func call> で実装する
ジェネレータ:
@asynciocoroutine
デコレータをジェネレータ関数に付けることでasync def
相当になる
非同期ジェネレータ PEP 525
3.6で
async def
+yield
で済むようになった
非同期内包表記 PEP 530
[await afun(i) async for i in agen()]
のように書く... ごちゃごちゃしてるwlist, set, dict, generator 各内包表記で使える
async関数内でしかつかえません
@mitsuhiko (ARMIN) のブログ
twistedから概念を持ってきている
ジェネレータの設計ミスがあるという指摘
3.3 から
yield
とreturn
を両方使えるようになったジェネレータの
return
はStopIteration
を発行するだけで、返値は無視されるreturn [1]
なんて書いても呼出元には値が渡らないので分かりにくいバグの原因になるね
asyncioの最悪なところは、がんばって書いても大して速くない
IO待ちのある細かい大量の並列処理がないと効果が出ないかも
まとめ
非同期は難しい
難しいから言語処理系が記法をサポートする
Py2 -> Py3 に移行するモチベーション?(Py2には無いから)
Py3.6 でasyncioの開発は一段落したっぽい
Q&A¶
これはZen of Pythonに抵触しているのでは?(お名前不明)
threadやmultiprocessでできていることを言語レベルで導入した理由が理解できない(質問者)
アプローチの違い、という理解(t2y)
イベント駆動のほうが最近のトレンドかなと思う(t2y)
マルチスレッドは人類には早すぎる、タスクを細切れにしたasync的モデルが推奨されている (いしもと)
スレッドは2000年頃まで。2000年以降はQueueを使うなどの非同期方面へシフトしてきた(いしもと)
計算モデルが異なるので、まったく同じ用途という感じでもない(いしもと)
感想: 非同期難しい
LT: @cardinalxaro Effective PythonとPython 3.6, Python 3.6における『Effective Python』 項目33はこう変わる¶
時間: 21:05 - 21:10
発表者: @cardinalxaro
テーマ: Effective PythonとPython 3.6, Python 3.6における『Effective Python』 項目33はこう変わる
スライド: https://speakerdeck.com/hayaosuzuki/effective-python-in-python-3-dot-6
Python3.5まで: デスクリプタ実装でやった
Python3.6から: メタクラス使わなくてもできる!
LT: @terapyon この10年のPython¶
時間: 21:10 - 21:15
発表者: @terapyon
テーマ: この10年のPython
スライド: https://speakerdeck.com/terapyon/kofalse10nian-false-python
(会場に質問)みんないつから使い始めた?
2.4以前から: 10人弱
3.0以降から: 1人
感想: 1年ごとにPythonになにが起きたかを振り返るスタイルのLTおもしろいw
LT: @aodag Python3移行への軌跡¶
時間: 21:15 - 21:20
発表者: @aodag
テーマ: Python3移行への軌跡
(@aodag)「満席だけどLTやるなら来ても良いよ、と言われてLT作ってきたけどキャンセル結構出たからLTしなくても来れたんじゃねえかこれ」たしかにw
2010年頃にPython3対応してないライブラリを晒し上げしてたサイト PYTHON 3 WALL OF SHAME (今はWALL OF SUPERPOWERS)
six.u めっちゃがんばって入れてたけどPython3.3でuリテラル復活したからいらなくなった(ほんとね...)
Linuxディストリは2020年以降も2.7をサポートするらしいんで独自に頑張ってください
PYTHON 3 WALL OF SUPERPOWERS だいぶグリーン!赤いのは、主に、moz(mozilla)って書いてあるやつ
感想:
安定のaodag LT
おもいっきりネタバレtweetしてしまった。ごめんなさい
おー、Python 3 WALL OF SHAME の画像どっからもってきたんだろ。今は同じURLでPYTHON 3 WALL OF SUPERPOWERSというサイトになってる https://t.co/XLZOHAuZOw #pystudy
— Takayuki Shimizukawa (@shimizukawa) 2017年1月31日
LT: @koedoyoshida PyCon JP 2017の宣伝¶
時間: 21:20 - 21:25
発表者: @koedoyoshida
テーマ: PyCon JP 2017の宣伝
スライド:
PyCon JP歴は若い方ですが、今年は座長をやります
これまでほぼ全部ボランティアスタッフで運営してきました
今日はボランティアスタッフの募集に来ました
スゴイ
— Takuro Wada (@taxpon) 2017年1月31日
右肩上がり #pystudy pic.twitter.com/UxM5hdWF4C
おわりに(@t2y)¶
Go リリースパーティーを参考に、Pythonでもやってみたくて主催しました
Goは短い期間で新しいバージョンがでますが、Pythonの場合バージョンが上がるのが1年後とかなので、また1年後にやるかもしれません(w
ビジターカードちゃんと返して帰ってね
はい。
全体的な感想¶
100人くらい参加者きた
スタッフとして最初期に@t2yから声かけてもらったけど、ちょっとしたアドバイスと当日の受付少々くらいしか手伝えなかった
Yahoo LODGE の迷宮感。18Fまでエレベータで上がってフロア中央の階段で降りて回り込んで・・
言語アップデートというテーマなので、話のレベルが高めだった。付いて来れなかった人けっこういるんじゃないかな
Python-3.6 の新機能についていっぺんに知ることができたので面白かった
主催者の@t2yさん、会場を貸してくれたYahoo Japanさん、ありがとうございました!
最後残ってた人たちの飲み会には不参加(今週飲み会多くて自重した・・)またこんど参加します!
で、歩いて帰りました
- 2/1更新
スライドURL追加、togetterリンク追加