2016-03-20 14 views
1

なぜ偽re.match( "c"、 "cat")がtrueを返すのはなぜですか?

not re.match("c", "cat") 

リターンを行いますが、

re.match("c", "cat") 

がTrueを返す代わりに、メモリ内のオブジェクトの位置を返しません。私はこのステートメントを真に戻す方法を見つけることができませんが、それが本当であることを知っています:

if re.match("c", "cat"): 
    print "Yes!" 

"はい!"を返します。

私が言ったように、これは少なくとも現時点では実用的な意味はありませんが、私は困惑します。

+1

*このステートメントをtrueに戻す方法が見つかりません* - 明示的に 'bool'に変換するだけです:' bool(re.match( "c"、 "cat")) '。 – GingerPlusPlus

+3

https://docs.python.org/2/library/stdtypes.html#truth-value-testingを参照してください。 - Pythonのすべては、(if、notなどを使って)ブールコンテキストで評価されます。試合は結果(真実)または「なし」(偽)を返します。 – jonrsharpe

答えて

2

ブール値(true/false)に変換するために使用bool():あなたはif文でre.match("c", "cat")を使用する場合

bool(re.match("c", "cat")) == true 

、それは自動的に、なぜそれが意志であるブール値、true、に変換され、 returnYes!

notを使用すると、自動的にブール値に変換されて逆変換されるため、

not re.match("c", "cat") == false 
1

さて、この上の焦点:あなたが言ったように

not re.match("c", "cat") 

ここre.match("c", "cat")は、 "メモリ内のオブジェクトの位置" を返します。それは偽ではないものです。

ないではないになり

偽:

もちろん

、この種の

だから今、not re.match("c", "cat")はになります思考は論理的条件に適用することができますifステートメントの条件のように。

+0

@ Obicere、私は質問を更新しました。今はOKですか? :) – gsamaras

+1

私はすべての否定によって冗談になった、2番目の一目で正しい。 – Obicere

3

関数re.match()は、一致する場合はmatch objectを返し、一致しない場合はNoneを返します。

あなたが使用できることからブール値を作成するには:

if re.match(...) is not None: 

しかし、Pythonでは厳密には必要ではないということ。例えば見てみましょうthis threadについては、Pythonの "真実性"と "偽善"の値を参照してください。

関連する問題