python语法认为条件x<=y<=z是合法的吗_Python成为专业人士笔记–条件语句

专业人士笔记”系列目录:创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!​zhuanlan.zhihu.comv2-6f8775e246d893360cf7d8f701b3befa_180x120.jpg

包含if、elif和else等关键字的条件表达式为Python程序提供了根据布尔条件(True或False)执行不同操作的能力,本节介绍Python条件语句、布尔逻辑和三元语句的使用

条件表达式(或“三元运算符”)

三元运算符用于内联条件表达式,它一般用于简单、简明、易读的操作

1、 参数的顺序不同于许多其他语言(如C、Ruby、Java等),当不熟悉Python的“令人吃惊的”行为的人使用它时,可能会导致bug(他们可能颠倒顺序)。

2、有些人认为它“笨拙”,因为它与正常的思维流相反(首先考虑条件,然后考虑结果)。

n = 5

print("大于2" if n > 2 else "小于等于2")

#输出: '大于2'

这个表达式的结果与它在英语中的读法一样——如果条件表达式为真,那么它将对左边的表达式求值,否则将对右边的表达式求值;三元操作也可以嵌套,如下所示:

n = 5

print("你好" if n > 10 else "再见" if n > 5 else "今天天气不错")

#输出:今天天气不错

它们还提供了在lambda匿名函数中包含条件的方法。

if, elif, 和 else

在Python中,您可以为第一个条件使用if,为其余的条件使用elif,直到最后一个(可选的)else,这个else是当上面其它所有条件都匹配不上时,所执行的语句

number = 5

if number > 2:

print("数字比2要大")

elif number < 2: # (您可以有很多个elif)

print("数字比2要小")

else: # 可选子句,但整个流程只能有一个else

print("数字等于2")

#输出:数字比2要大

注意:使用else if而不是elif将触发语法错误,这在python中是不允许的。

True 真值

下列值被认为是假的,它们在应用于布尔运算符时将会直接作为假值

None

False

0, 或任何等于零的数值,例如 0L, 0.0, 0j

空序列 : ''

,

""

, (), []

空字典: {}

用户定义的类型,如bool或len方法返回0或False

除了上面的值,Python中所有其他值的值都是True

布尔逻辑表达式

除了对True或False求值外,布尔逻辑表达式还返回被解释为True或False的值。这是python式的逻辑表示方法,否则可能需要显式使用if-else语句

And 操作

And运算符计算所有表达式,如果所有表达式的值都为True,则返回最后一个表达式。否则,它将返回第一个表达式的值

1 and 2

#输出:2 如上面所说

1 and 0

#输出:0 如上面所说

1 and "Hello World"

#输出:"Hello World"

"" and "Pancakes"

"" # 上面说过,""为False值,则返回第一个表达式

Or 操作

or运算符从左到右计算表达式的值,如果第一个表达式为True则直接返回第一个,否则返回第二个表达式

1 or 2

#输出:1 第一个表达式就代表True了

None or 1

#输出:1 第二个为True,返回第二个

0 or []

#输出:[],返回第二个,因为两个值都代表False

惰性计算

当使用此方法时,请记住计算是惰性的;不需要对表达式求值来确定结果的表达式将不会被求值,例如 :

def print_me():

print('I am here!')

0 and print_me()

#输出:0

在上面的示例中,print me函数从未执行过,因为Python可以在遇到0 (False)时确定整个表达式为False。如果print me必须要执行以服务于你的程序逻辑,请记住这一点

多条件下判断的测试

检查多个条件时的一个常见错误是不正确地应用逻辑

本例尝试检查两个变量是否都大于2,该语句为 if (a)and (b > 2),这会产生一个意外的结果,因为当a不为0时,bool(a)的值为True

a = 1

b = 6

if a and b > 2:

print('yes')

else:

print('no')

#输出:yes

#这里不是我们想要的结果,我们需要的是 如果 a 和 b都大于2,则输出yes

在这种情况下, 每个变量需要分别进行比较:

if a > 2 and b > 2:

print('yes')

else:

print('no')

#输出:no 这才是我们想要的结果

另一个类似的错误是在检查一个变量是否是多个值之一时出错,本例中的语句为 if (a == 3) or (4) or (6);这将产生一个意外的结果,因为bool(4)和bool(6)的值都为True

a = 1

if a == 3 or 4 or 6:

print('yes')

else:

print('no')

#输出:yes 这不符合我们想要的,因为4在python里被认为True,所以判断通过了

这种情况下,同样每个比较必须单独进行 :

if a == 3 or a == 4 or a == 6:

print('yes')

else:

print('no')

#输出:no 这才符合我们想要的

其实, 使用in操作符是一种更规范的写法:

if a in (3, 4, 6):

print('yes')

else:

print('no')

#输出:no

使用cmp函数比较两个对象

Python 2版本中包含一个cmp函数(注意:python3中此函数已删除),它允许您确定一个对象是否小于、等于或大于另一个对象

假设需要输出 ‘比y大’ if x > y, ‘比y小’ if x < y, ‘相等’ if x == y :

[' 相等 ', ' 比y大 ', ' 比y小', ][cmp(x,y)]

#x,y = 1,1 输出: '相等'

#x,y = 1,2 输出: '比y小'

#x,y = 2,1 输出: '比y大'

cmp(x,y)将会返回以下值:

比较结果

x < y -1

x == y 0

x > y 1

这个函数在python3中被删除了。您可以使用位于python3中的functools中的cmp to key(func)帮助函数来将旧的比较函数转换为关键函数

在大多数情况下,在python3中直接使用>,<,或==就可以直接用于比较

Else 语句

if condition:

body

else:

body

else语句只有在之前所有条件语句的值都为False时才会执行它里面的代码

if True:

print "这是真的!"

else:

print "这不是真的!"

# 输出: 这是真的!,里面的else语句永远不会执行

if False:

print "这不是真的!"

else:

print "我是else"

#输出: 我是else 同理,上面的False不会执行,所以会执行else里的语句

判断对象是否为空

我们经常需要判断对象是否为空并进行下一步操作,最简单的方法就是用 is None 判断:

if aDate is None:

aDate=datetime.date.today()

(注意,用is None代替== None更符合python风格)

但是这可以通过利用在布尔表达式中not None的值为True这一概念来稍微优化一下,下面的代码是等效的 :

if not aDate:

aDate=datetime.date.today()

但还有一种更靠近python的方法。下面的代码也是等价的,但个人觉得不好理解 :

aDate=aDate or datetime.date.today()

这里做了一个简单的表达式判断。即如果aDate已经被初始化,并且不是None,那么它将被分配给自己,没有任何效果。如果没有,则将date. date.today()分配给aDate

if 语句

if condition:

body

if语句检查condition条件,如果计算结果为True,则执行If语句的主体。如果计算结果为False,并且后面没有else语句或if false承接的话,则什么也不做

if True:

print "是True!"

#输出 是True!

if False:

print "不是True"

#如果整个流程结果是False,则会输出

if后面的条件语句,可以是任何有效的表达式 :

if 2 + 2 == 4:

print "我知道什么是数学!"

#输出: 我知道什么是数学!

好了,今天的分享就到这里,禁止转载,违者必究!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值