正则表达式对象如何在Python循环中工作?

正则表达式对象如何在Python循环中工作?,python,python-3.x,regex,if-statement,Python,Python 3.x,Regex,If Statement,我正在Python上构造一个if语句,当正则表达式的match函数发现一个巧合时,它会打印一些东西。我想知道,当我的语句的条件不是布尔值时,if语句为什么工作(我想是的) 这将产生: "There's a match" 它为什么工作?Python类型有一个关联的“truthiness”值。您可以通过在不同的对象上执行bool()来尝试。最明显的例子是整数: bool(1) > True bool(0) > False 但它超出了这一范围bool(“”将为

我正在Python上构造一个if语句,当正则表达式的match函数发现一个巧合时,它会打印一些东西。我想知道,当我的语句的条件不是布尔值时,if语句为什么工作(我想是的)

这将产生:

"There's a match"
它为什么工作?

Python类型有一个关联的“truthiness”值。您可以通过在不同的对象上执行
bool()
来尝试。最明显的例子是整数:

bool(1)

> True

bool(0)

> False
但它超出了这一范围
bool(“”
将为
False
,而任何其他非空字符串将为
True
。空列表、dict、tuple是
False
,但一旦它们不是空的,就转到
True
。这是由
\uuubool\uuuu
类方法确定的,该方法规定了在对象上调用
bool()
时应计算的内容

对于
re.match
函数的输出,如果没有找到模式(计算结果为
False
),它将返回
None
),或者返回
re.match
对象(计算结果为
True

这就是为什么在您的例子中,由于成功地找到了模式,if子句的条件计算为True。

Python类型有一个关联的“truthiness”值。您可以通过在不同的对象上执行
bool()
来尝试。最明显的例子是整数:

bool(1)

> True

bool(0)

> False
但它超出了这一范围
bool(“”
将为
False
,而任何其他非空字符串将为
True
。空列表、dict、tuple是
False
,但一旦它们不是空的,就转到
True
。这是由
\uuubool\uuuu
类方法确定的,该方法规定了在对象上调用
bool()
时应计算的内容

对于
re.match
函数的输出,如果没有找到模式(计算结果为
False
),它将返回
None
),或者返回
re.match
对象(计算结果为
True


这就是为什么在您的例子中,由于成功地找到了模式,if子句的条件计算为True。

当使用
re.match()
找到匹配项时,将返回
re.match()
对象。在你的情况下,这是

<re.Match object; span=(0, 3), match='abc'>
如果未找到匹配项,则返回
None
,这始终等于
False

coincidence = re.match(r'\w{5}', 'abc')
print(coincidence)
#None
bool(coincidence)
#False

您的语句可以归结为
为真
,当返回一个对象时,它等于
为真

,当使用
re.match()
a
re.match()
对象被返回时,它等于
为真。在你的情况下,这是

<re.Match object; span=(0, 3), match='abc'>
如果未找到匹配项,则返回
None
,这始终等于
False

coincidence = re.match(r'\w{5}', 'abc')
print(coincidence)
#None
bool(coincidence)
#False

您的语句可以归结为
为真
,当返回一个对象时,它等于
为真

没有“if循环”<代码>如果
没有循环。你是对的。我会改的。没有“如果循环”<代码>如果没有循环。你是对的。我会改的,很好的解释。如果我理解正确,If语句的参数类型转换为bool,这是原始问题的关键。对boolean的强制只发生在
If
语句中。否则,您需要
bool
。例如,
bool(concurrence)为真
将在
concurrence
不是空类型时返回
True
。解释得很好。如果我理解正确,If语句的参数类型转换为bool,这是原始问题的关键。对boolean的强制只发生在
If
语句中。否则,您需要
bool
。例如,
bool(concurrence)为真
将在
concurrence
不是空类型时返回
True