スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
.-- -- スポンサー広告 comment(-) trackback(-)

Pythonメモ書き:比較とブール値

Pythonのオブジェクトはすべて、「比較」に対応できる!!

比較に使用するのが複合オブジェクトの場合は、

その全てが比較の対象になる!!

なので、ネストされているオブジェクトがあっても、その全てについて比較が行われます。


○オブジェクトが「同等」であるかの比較には、==演算子を使用します。

○オブジェクトが「同一」であるかの比較には、is演算を使用します。

==はオブジェクトの全ての要素を1つずつ順に同じであるか確認していきます。

isは2つがメモリ上の同じアドレスに存在する同一のオブジェクトであるかが確認されます。

ま、何はともあれインタラクティブシェルでやってみるのが早い!!


>>>L1 = [1, ('python', 3)] #2つのオブジェクトは別物だが、値は同じ
>>>L2 = [1, ('python', 3)]
>>>L1==L2, L1 is L2     #同等であるか、同一であるかの確認
(True, False)


では、ここでちょっと、私みたいな初心者向けの試み。

>>>S1 = 'perl'
>>>S2 = 'perl'
>>>S1 == S2, S1 is S2
(True, True)

そうそう、最初の例を見るとisを使ったらFalseになるっぺ!と思ったら残念!!

どうやら、Pythonでは、効率化のため、短い文字列はキャッシュされ、再利用されるということが原因らしい!!

つまり、'perl'という値をもつ文字列のオブジェクトは2つ作られているようにみえて

実は、1つしか作られていなく、変数S1とS2に共有されているらしい!!

だから、単純に文字列が短いことが原因なので


>>>S1 = 'python and perl'
>>>S2 = 'python and perl'
>>>S1 == S2, S1 is S2
(True, False)

って、なります。


では、次に「大きさ」の比較について試してみます。

>>>L1 = [1, ('python', 3)]
>>>L2 = [1, ('python', 2)]
>>>L1 < L2, L1 == L2, L1 > L2
(False, False, True)

ここで、オブジェクト比較の基本ルール
○数値は、数値そのものの大きさが比べられる。
○文字列は、1文字ずつ比べられ、アルファベット順で後に出てくる文字ほど大きいと見なされる。
○ディクショナリは、キーと値からなるリストとみなされ、要素が順に比較される。

ってなトコです。
スポンサーサイト
.02 2010 Python comment0 trackback0

comment

post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

trackback

trackbackURL:http://emiandkosuke.blog29.fc2.com/tb.php/30-c8f0a807

プロフィール

emi

Author:emi
日々、コンピューターとにらめっこしていた2010。
公の仕事に就くことを目指して教科書とにらめっこ2011,spring。
はたして2012は・・・

最新トラックバック

検索フォーム

ブロとも申請フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。