if var is 'stringone' or 'stringtwo':
dosomething()
これは動作しません!私は変数を持っていて、それが値のいずれかであるときに何かをする必要がありますが、if ステートメントに入りません。Javaif (var == "stringone" || "stringtwo")
作品で。これをPythonで書くにはどうすればよいですか?
if var is 'stringone' or 'stringtwo':
dosomething()
これは動作しません!私は変数を持っていて、それが値のいずれかであるときに何かをする必要がありますが、if ステートメントに入りません。Javaif (var == "stringone" || "stringtwo")
作品で。これをPythonで書くにはどうすればよいですか?
これはあなたが期待することをしません:
if var is 'stringone' or 'stringtwo':
dosomething()
以下と同じです。
if (var is 'stringone') or 'stringtwo':
dosomething()
'stringtwo'
は「真」の値と見なされるため、これは常に真です。
次の 2 つの方法があります。
if var in ('stringone', 'stringtwo'):
dosomething()
または、個別の等価テストを作成することもできます。
if var == 'stringone' or var == 'stringtwo':
dosomething()
はオブジェクトの同一性を比較するis
ため、は使用しないでください。is
Java が多くの文字列をインターンするので、Java で問題を回避できるように、Python が多くの文字列をインターンするため、問題を回避できる場合があります。is
ただし、オブジェクト ID が本当に必要な場合を除き、使用しないでください。
>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True # but could be False
if var == 'stringone' or var == 'stringtwo':
do_something()
またはよりpythonic、
if var in ['string one', 'string two']:
do_something()
if var == 'stringone' or var == 'stringtwo':
dosomething()
「is」は、2 つの参照が同じオブジェクトを参照しているかどうかを確認するために使用されます。メモリアドレスを比較します。どうやら、'stringone' と 'var' は異なるオブジェクトで、同じ文字列を含んでいるだけですが、クラス 'str' の 2 つの異なるインスタンスです。もちろん、これらには 2 つの異なるメモリ アドレスがあり、「is」は False を返します。
2 つの個別のチェック。また、identity ではなく等価性をチェックする場合は、not を使用==
しis
てください。
if var=='stringone' or var=='stringtwo':
dosomething()
for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}):
if createunicode(a.text) in ['<','<']:
links.append(a.attrMap['href'])
else:
continue
わたしにはできる。