Python成为专业人士笔记–条件语句

专业人士笔记”系列目录:

创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!


包含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 "我知道什么是数学!"
   #输出: 我知道什么是数学!    
      

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

猜你喜欢

转载自blog.csdn.net/oSuiYing12/article/details/106211752