此方法搜索第一组单词字符(即[a-zA-Z0-9_]
),返回第一个匹配的组或None
出现故障的情况。
def test(str):
m = re.search(r'(\w+)', str)
if m:
return m.group(1)
return None
相同的函数可以重写为:
def test2(str):
m = re.search(r'(\w+)', str)
return m and m.group(1)
这是相同的,并且已记录为行为。作为此页中明确指出:
表达式
x and y
首先计算x
; 如果x
为假,则返回其值;否则,y
将求值并返回结果值。
但是,作为布尔运算符(甚至在手册中也是如此),我希望and
返回一个布尔值。结果,当我发现这是如何工作时,我感到非常惊讶。
有什么其他用例,和/或这种不太直观的实现的原理是什么?
还有什么其他用例,
简明(因此一目了然,因此很清晰,因为毕竟它根本 不会
牺牲可读性!),任何时候您都需要检查某件事,或者使用某件事(如果是真的话),或者使用其他值(如果那话)是假的(即对and
-扭转它or
-我 很
刻意避免了实际的关键字,或最喜欢True
和False
,因为我说的 每一个 对象,不只是bool
- !)。
任何计算机屏幕上的垂直空间都是有限的,并且可以选择,最好将其花在有用的可读性辅助工具(文档字符串,注释,策略性地将空行分隔成块等)上,而不是例如旋转以下行:
inverses = [x and 1.0/x for x in values]
一分为六,例如:
inverses = []
for x in values:
if x:
inverses.append(1.0/x)
else:
inverses.append(x)
或更多局促版本。
和/或这种不太直观的实现的基本原理是什么?
远从“直观”,初学者经常是由事实:一些语言(如标准帕斯卡)并绊倒 没有 指定评估顺序和短路的性质and
和or
; 的的Turbo
Pascal和语言标准,早在一天做出的Turbo所有时代最流行的方言帕斯卡之间的区别之一是正是涡轮增压实施and
和or
很多像Python后来才(和C语言做早…)
。
前言 上个礼拜介绍了Shell编程范例之数值运算,对 Shell 下基本数值运算方法做了简单的介绍,这周将一起探讨布尔运算,即如何操作“真假值”。 在 Bash 里有这样的常量(实际上是两个内置命令,在这里我们姑且这么认为,后面将介绍),即 true 和 false,一个表示真,一个表示假。对它们可以进行与、或、非运算等常规的逻辑运算,在这一节,我们除了讨论这些基本逻辑运算外,还将讨论Shell编
问题内容: 我对何时应该使用布尔运算符与按位运算符感到困惑 与 与 有人能启发我何时使用每种药物,何时使用一种药物会影响我的结果? 问题答案: 以下是一些准则: 布尔运算符通常用于布尔值,而按位运算符通常用于整数值。 布尔运算符是短路,但按位运算符不是短路。 短路行为在这样的表达式中很有用: 按位运算&符将无法正常工作,因为总是会评估双方,即。当你使用布尔运算符时,如果第一个为False,则不计算
概述 布尔运算符用于将表达式转为布尔值,一共包含四个运算符。 取反运算符:! 且运算符:&& 或运算符:|| 三元运算符:?: 取反运算符(!) 取反运算符是一个感叹号,用于将布尔值变为相反值,即true变成false,false变成true。 !true // false !false // true 对于非布尔值,取反运算符会将其转为布尔值。可以这样记忆,以下六个值取反后为true,其他值都
问题内容: 按位运算符应该传递变量并对其进行逐位操作。对于整数,longs,char,这是有意义的。这些变量可以包含由其大小强制的所有值范围。 但是,对于布尔值,布尔值只能包含两个值。1 =真或0 =假。但是没有定义布尔值的大小。它可以大或小。 那么在布尔值上使用按位运算符有什么作用?JVM本质上是否将其转换为普通的逻辑运算符并继续运行?是否出于操作目的将布尔值视为单个位实体?还是未定义结果以及布
问题内容: 我正在Pandas中使用布尔值索引。问题是为什么要声明: 工作正常而 错误退出? 例: 问题答案: 当你说 你暗中要求Python进行转换并转换为布尔值。 NumPy数组(长度大于1)和对象(例如)没有布尔值-换句话说,它们引发 当用作布尔值时。那是因为不清楚何时应该为True或False。如果某些用户的长度非零,则可能会认为它们为True,例如Python列表。其他人可能只希望其所有