我正在Sololearn课程上自学Python 3。我现在正在学习正则表达式。
以下是源代码:
import re
pattern = r"spam"
if re.match(pattern, "spamspamspam"):
print("Match")
else:
print("No match")
---根据Sololearn Python 3 Tutorial Course ---
if语句中的条件令我感到困惑。对于我获得的知识,if语句中的条件应该是布尔表达式。 但是,re.match函数确定它是否匹配字符串的开头,不返回布尔值(如果匹配,则函数返回表示匹配的对象。如果不匹配,则返回None)。
因此,我不太明白上述代码的if语句?谁能给我一些解释?
答案 0 :(得分:4)
观察re.match
:
In [2473]: pattern = r"spam"
In [2474]: re.match(pattern, "spamspamspam")
Out[2474]: <_sre.SRE_Match object; span=(0, 4), match='spam'>
返回匹配对象。现在,如果我们改变一下模式......
In [2475]: pattern = r"ham"
In [2477]: print(re.match(pattern, "spamspamspam"))
None
基本上,None
的真值为False
,而对象的真值为True
。 if
条件评估&#34;真实性&#34;结果并将相应地执行if主体。
你的if条件可以重写一下,如下:
if re.match(pattern, "spamspamspam") is not None:
....
这个,if re.match(pattern, "spamspamspam")
是同一个。
你应该知道&#34;真实性&#34;如果您正在学习python,则会评估对象的数量。所有非空数据结构都将计算为True
。所有空数据结构都是False
。对象为True
,None
为False
。
In [2482]: if {}:
...: print('foo')
...: else:
...: print('bar')
...:
bar
In [2483]: if ['a']:
...: print('foo')
...: else:
...: print('bar')
...:
foo
答案 1 :(得分:0)
Python使用&#39; Truthy&#39;和&#39; Falsy&#39;值。因此,任何匹配都是真实的,而无则是假的。这个概念扩展到语言中的许多地方,比如检查列表中是否有任何内容:
if []:
print("True")
else:
print("False")
将打印错误。
查看this question了解详情。