狠狠撸
Submit Search
私の好きなPython構文 vol.2 #nds46
?
Download as PPTX, PDF
?
0 likes
?
1,771 views
C
civicpg
Follow
笔测迟丑辞苍の文字列リテラル、飞颈迟丑文について
Read less
Read more
1 of 45
Download now
Download to read offline
More Related Content
私の好きなPython構文 vol.2 #nds46
1.
私の好きなPython構文 vol.2 #nds4 @civic
2.
お前だれよ ? @civic ? NDS管理者 ?
Python, Java
3.
このプレゼンのねらい Pythonへの熱い想いを語って 少しでもPython人口を増やしたい
4.
前回の発表 おさらい
5.
今日帰ってすぐに始められる Python
6.
笔测迟丑辞苍の良さ
7.
かんたん
8.
素直で覚えやすい
9.
人気あり
10.
プログラミング言語 人気ランキング Top10 2015年8月 GitHub発表
http://goo.gl/160eHH
11.
Python人気は? ? 4位 PHP ?
5位 Python ? 6位 CSS ? 7位 C++ ? 8位 C# ? 9位 C ? 10位 HTML ? 1位 JavaScript ? 2位 Java ? 3位 Ruby
12.
好きなPython構文 vol.1
13.
デコレータについて 紹介しました 詳しくはこちら www.slideshare.net/fbcivic/lt-python-nds45
14.
今日话す内容
15.
好きなPython構文 vol.2 文字列リテラル with文 (コンテキストマネージャー)
16.
文字列リテラル
17.
文字列リテラル 基本 'Hello' #
シングルクォート "World" # ダブルクォート ? 普通な感じ ? 変数の展開などはしない ? format関数 ? %
18.
文字列リテラルのプレフィックス ? プレフィックスで意味が変わる b'abc' #
バイト列 ≠ 文字列 r'rn' # raw文字列(エスケープなし) u'あいう' # Unicode文字列 #(python2のみ。3.3以降ではuは不要) リテラルの記号を増やすことなく、アルファベット1字で 様々なリテラルを表現できてわかりやすい!好き!
19.
正規表現リテラルなど不要! ? Pythonでは正規表現は言語仕様になく、 標準ライブラリ。正規表現リテラルはない。 ? JavaScriptの正規表現リテラル //
nにマッチするか? test_string.match(/n/); // にマッチするか? test_string.match(//);
20.
Javaの場合 ? 同様に正規表現が標準ライブラリで提供されるJava の場合 ? Javaの場合 //
nにマッチするか? test_string.matches("n"); // にマッチするか? test_string.matches(""); 文字列でパターンを表現するので、正規表現としてのエ スケープ文字と文字列リテラルのエスケープが重なる
21.
Pythonの場合 ? raw文字列を使えばさほど問題ない ? Pythonの場合 //
nにマッチするか? re.match(r"n", test_string) // にマッチするか? re.match(r"", test_string); raw文字列 r""→エスケープ無効な文字列リテラル 言語仕様に正規表現リテラルを含めなくてもライブラリ で十分!→シンプル!
22.
文字列リテラルのプレフィックス ? 記号を使わずに文字列リテラルをたくさん表現できる "abc" 文字列 r"n"
raw文字列 b"abc" バイト列 u"あいう" Unicode文字列 (Python2) f"Hello! {name}" 変数展開できるやつ (Python3.6予定)
23.
余谈ですが
24.
笔测迟丑辞苍2と3の文字列(闇)
25.
Python2の文字列 ? Python2の文字列リテラルはバイト列 なんらかのエンコードの文字列→バイト列 ? 文字単位で数えたりするには、 なんらかのエンコードのバイト列では扱いにくい →Unicode文字列もあるよ "Hello"
# 文字列(バイト列) u"Hello" # Unicode文字列
26.
混ぜるな危険!! Python2の 文字列 vs Unicode文字列 UnicodeDecodeError:
'ascii' ?
27.
安心してください Python3では自然な感じに Python2 意味
Python3 "abc" バイト列 b"abc" u"abc" Unicode文字列 "abc" ? 自然になったが互換性が... ? u" "リテラルはもう付けなくてもいいから不要!
28.
Python3.0では u""は廃止!
29.
Python2の u""が 全部使えなくなった! 互換性ヤバい!
30.
ゴメン! やっぱりPython3.3から u"" 復活させるわ!
31.
お分かり いただけただろうか?
32.
えっと... Pythonの文字列リテラルが 好きだって話だった
33.
このプレゼンのねらい(再) Pythonへの熱い想いを語って 少しでもPython人口を増やしたい
34.
文字列リテラル まとめ ? 3になってからは自然な感じ ?
プレフィックスで表現できて便利 ? 記号よりわかりやすい ? Python3.6で新しい文字列リテラル f"Hello {name}" # フォーマット文字列 https://docs.python.org/3.6/whatsnew/3.6.html#pep-498- formatted-string-literals
35.
今日2つめの 好きな構文
36.
with文 コンテキストマネージャー
37.
with文 ? コンテキストを扱う便利な構文(雑) with open('hoge.txt',
'w') as f: f.write('Hello World') # withブロックを抜けるとファイルをclose 「ファイルを開いた」というコンテキストで処理を記述
38.
Javaでいうところの ? try-with-resource try (Write
w = new FileWriter(path)) { //ファイル処理 } ? Javaの場合はAutoClosableインターフェースを 実装したオブジェクトを返す ? Pythonの場合はコンテキストマネージャー型
39.
コンテキストマネージャー型 ? __enter__と__exit__メソッドをもつオブジェクト class Hoge(): def
__enter__(self): print("Enter") def __exit__(self, exc_type, exc_value, traceback): print("Exit") with Hoge(): print("Hello") # Enter # Hello # Exit コードブロックの入り口と出口
40.
もう少しかんたんに
41.
contextlibモジュール ? コンテキストマネージャー型のクラスつくるの メンドクサ →
contextlibでお手軽に @contextlib.contextmanager def テストすっぞ(): print("test setup') yield print("test teardown") with テストすっぞ(): print("テスト中") # test setup # テスト中 # test teardown
42.
contextlib.contextmanager ? 前処理?後処理が簡単に記述できた! ? リソースのcloseだけでなく 定型的な前処理?後処理に ?
yieldは関数の途中で保留して戻るようなやつ ? yieldについてはまた別の機会に
43.
まとめ
44.
まとめ ? 好きなPython構文として2つ挙げました ? 文字列リテラル(のプレフィックス) ?
わかりやすくて表現の幅が広がる ? with文(コンテキストマネージャー) ? 前処理?後処理がきれいに書ける
45.
ご静聴ありがとう ございました
Editor's Notes
#18:
変数展开については、次の笔测迟丑辞苍3.6で搭载予定
#19:
具体的な例として、どういう点で分かりやすいかということを绍介
#20:
正规表现リテラルのある闯补惫补厂肠谤颈辫迟の场合
#21:
正规表现ライブラリに文字列でパターンを渡さなければならない
#22:
raw文字列は正規表現のためのものではないが、文字列の表現の幅が広がる 言語仕様はシンプルに。その代わり豊富な標準ライブラリ
#23:
笔贰笔498のフォーマット文字列
#26:
笔测迟丑辞苍2の文字列はバイト列でしかないので、代わりに鲍苍颈肠辞诲别文字列というオブジェクトもある
#27:
2つの文字列があるから、よく発生したエラー!
#28:
いままでのUnicode文字列が、ふつーに使いたい文字列だからプレフィックスなし たとえば文字列→SJISで表現されたバイト列にしたらbプレフィックスにしよう uリテラルもう要らないよね!
#31:
ただしつけても、なにも机能しない互换性のためだけに存在
#35:
f-string
#40:
コンテキストマネージャーを返すことで、前処理?后処理を実装できて綺丽
#42:
クラスを作成するのはおっくうでも、関数ならサッと作る気になる
Download