python の代入は値を返さないので、下記のような書き方はエラーになる。
だけど、多重代入 (マルチターゲット代入 / chained assignment) はできる。
何となく納得いかない感があるけど、多重代入だけは特別らしい。
下記のような書き方でも多重代入は可能。(自分がかつてやっていた方法)
左辺変更時に修正点多いし、あまりリーダブルじゃないと思うので使わない方がいい・・・
>>> # ファイルから少しずつ読み込んで処理
...
>>> f = open('hoge.txt', 'rb')
>>> while chunk = f.read(4096):
File "", line 1
while chunk = f.read(4096):
^
SyntaxError: invalid syntax
だけど、多重代入 (マルチターゲット代入 / chained assignment) はできる。
>>> a = b = 'test'
>>> a, b
('test', 'test')
何となく納得いかない感があるけど、多重代入だけは特別らしい。
下記のような書き方でも多重代入は可能。(自分がかつてやっていた方法)
左辺変更時に修正点多いし、あまりリーダブルじゃないと思うので使わない方がいい・・・
>>> a, b = ('test',) * 2
>>> a, b
('test', 'test')
おまけ
最初の例を綺麗に書きたい場合、iter と functools.partial を組み合わせて使う。
>>> # ファイルから少しずつ読み込んで処理
...
>>> f = open('hoge.txt', 'rb')
>>> for chunk in iter(functools.partial(f.read, 4096), b''):
... print(chunk)
...
>>> # partial の代わりにラムダ式でも可能
...
>>> for chunk in iter(lambda: f.read(4096), b''):
... print(chunk)
...
0 件のコメント:
コメントを投稿