More Related Content Similar to Python 3.6 リリースパーティー 発表資料 Similar to Python 3.6 リリースパーティー 発表資料 (20) More from Atsuo Ishimoto (11) Python 3.6 リリースパーティー 発表資料4. PEP 498: formatted string
literals
4
>>> a=1; b=2;
>>> f'{a}+{b}は{a+b}'
'1+2は3'
フォーマット済み文字列
11. f-stringのしくみ
11
0 LOAD_CONST 1 ('C=')
2 LOAD_GLOBAL 0 (A)
4 LOAD_GLOBAL 1 (B)
6 BINARY_ADD
8 LOAD_CONST 2 ('5d')
10 FORMAT_VALUE 4 (with format)
12 BUILD_STRING 2
14 POP_TOP
16 LOAD_CONST 0 (None)
18 RETURN_VALUE
def f():
f'C={A+B:5d}'
13. パフォーマンスは?
13
f'{a:10}{b:10}{c:10}'
v.s.
'{a:10}{b:10}{c:10}'.format(
a=a,b=b,c=c)
ishimoto@MacBook-Air:~$ python3 -m timeit
"a,b,c=100,200,300;f'{a:10}{b:10}{c:10}'"
1000000 loops, best of 3: 1.56 usec per loop
ishimoto@MacBook-Air:~$ python3 -m timeit
"a,b,c=100,200,300;'{a:10}{b:10}{c:10}'.format(a=a,b=b,c
=c)"
1000000 loops, best of 3: 1.55 usec per loop
14. PEP 515 underscores in
numeric literals.
14
数字リテラルに桁区切りを追加
1234567890 → 1_234_567_890
0xaabbccdd → 0x_aa_bb_cc_dd
0b00001111 → 0b0000_1111
15. PEP 487: Simpler
customization of class creation
15
手軽にクラスオブジェクトのカスタマイズ
# カスタマイズの例
class Color(Enum):
RED=1
GREEN=2
Color.REDは、自動
的にenumオブジェク
トに置き換えられる
クラス定義時に、自動的な機能追
加、検証などを行う
22. PEP 506: Adding A Secrets
Module To The Standard Library
22
新規モジュール "secrets"
セキュリティ上、利用しても安全な乱
数やトークン生成を提供する
独自に random モジュールなどを
使っても実装できるが、それには正し
い知識が必要
23. PEP 495: Local Time
Disambiguation
datetime.time/datetime.datetimeオ
ブジェクトに、fold属性を追加
ex)
d=datetime.datetime(
2017,1,31,0,0,fold=1)
fold属性は、その時間が「何回目だっ
たか」を表す。
23
25. PEP 519: Adding a file
system path protocol
25
open()/os.stat() など、ファイル
名を引数として渡す関数に、文字列と
バイト列以外のオブジェクトを渡せる
ようになった
pathlib.Pathなどの、ファイル名として
使えるPathLikeオブジェクトは、
__fspath__()メソッドを実装する
27. PEP 528: Change Windows
console encoding to UTF-8
27
Windowsのコンソールで € を
Windowsで、コンソールへの入出力が
Unicodeで行われるようになった
従来はcp932(ShiftJIS)などの文字
セットで、最低限の日本語入出力しか
行えなかった。
29. 29
※ただしコンソールに限る
C:> python.exe -c "print('u20ac')"
€
C:> python.exe -c "print('u20ac')" > NUL
Traceback (most recent call last):
File "<string>", line 1, in <module>
UnicodeEncodeError: 'cp932' codec can't encode
character 'x20ac' in position 0: illegal multibyte sequence
入出力をリダイレクトした場合は従来通り
31. PEP 529: Change Windows
filesystem encoding to UTF-8
31
Windowsのバイト列ファイル名が解禁
os.listdir()のように、ファイル名に文字列
を指定した場合と、バイト列を指定した場
合で結果が異なるものがある
>>> os.listdir('.')
['あ']
>>> os.listdir(b'.')
[b'x82xa0']
36. 36
>>> import xxx
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named
'xxx'
>>> from sys import xxx
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'xxx'
モジュールが見つからないとき
その他のエラー
40. PEP 628: Add math.tau
40
τ
たう
τ = 2π
「180度がπで360度が2π」より、「180
度が1/2τで360度が1τ」のほうがわ
かりやすくない?ってことらしい。。。