[Python-ml-jp 2752] しんぷるいずざべすと
機械伯爵
kikwai @ d5.dion.ne.jp
2004年 2月 14日 (土) 12:02:23 JST
ども、機械です。
> まず、やれば自明な指摘(^^;;から
はい、すみませんです・・・
カウンタ減らすの忘れてました。
> で、便乗質問ですが
>
>> a, b = 0, 0
>
> についてです。python では基本的にはオブジェクトの代入はポインタ(とい
>うかリファレンスですか)なので、C などのように a = b = 0 ではなく
>a, b = 0, 0とお書きであると考えます。
a = b = 0のほうについては、すでにレスが付いていま
すが、基本的なことを言えば、Cとは異なり、Pythonでは
「代入式」というものは存在せず、「代入文」だけが存
在します。
C言語ではb=0は0という値を返しますので、その0をaに
代入する、というルールが適用できます。
a = ( b = 0 )
ところが、Pythonではb=0は文ですから値を返しません。
よってa = b = 0は、「そういう書き方が許されている」
だけで、a = (b = 0)にはなりません。
※エラーが出ます。
つまり「書き方を一つ余分に覚える」ことになるわけ
です。
で、同じ覚えるなら、タプルの展開のほうが実感でき
やすいかな、と思って、こちらを書きました。
a, b, c = 1, 2, 3
とか、応用も利きますし・・・(まぁ、ここらへんは
気分です)
> 1. 数値型の場合は a = b = 0 でも a と b は別のオブジェクトとなる。
> 2. しかし、そのクセがつくと a = b = [] とかやってしまう可能性が高い
> ので a, b = 0, 0 と書いておいたほうがよい。
>
> の2つは正しいでしょうか?
1.・・・同じオブジェクトですよ。
同一性テスト用演算子isを使ってみましょう。
>>> a = 1
>>> b = 1
>>> a is b
True
整数オブジェクトは、いちいち新しいオブジェクトを
作っていません。
でも、リスト(可変オブジェクト)とかは違いますよ
ね。
>>> a = []
>>> b = []
>>> a is b
False
>>>
2.文法の問題なんです。
「連結された'='は、一番右辺のオブジェクトをほーり
こむ」という規則です。
よって、空リストと0で、別規則が適用されているわけ
ではありません。
けっこーシンプルですよね?
/機械伯爵/
Python-ml-jp メーリングリストの案内