zoukankan      html  css  js  c++  java
  • 3.1.1 条件表达式

      在选择结果和训话结构中,都要根据条件表达式的值来确定下一步的执行流程。条件表达式的值只要不是False、0(或0.0、0j等)、空值None、空列表、空元组、空集合、空字符串、空range对象或其他空迭代对象,Python解释器均认为与True等价。从这个意义上来讲,所有的Python合法表达式都可以作为条件表达式,包括含有函数调用的表达式。例如:

     1 >>> if 3:             #使用整数作为条件表达式
     2     print(5)
     3 
     4     
     5 5
     6 >>> 
     7 >>> a = [1,2,3]
     8 >>> 
     9 >>> if a:             #使用列表作为条件表达式
    10     print(a)
    11 
    12     
    13 [1, 2, 3]
    14 >>> 
    15 >>> a = []
    16 >>> 
    17 >>> if a:
    18     print(a)
    19 else:
    20     print('empty')
    21 
    22     
    23 empty
    24 >>> 
    25 >>> 
    26 >>> i = s = 0
    27 >>> while i <= 10:        #使用关系表达式作为条件表达式
    28     s += i
    29     i += 1
    30 
    31     
    32 >>> print(s)
    33 55
    34 >>> 
    35 >>> i = s = 0
    36 >>> while True:           #使用常量True作为条件表达式
    37     s += i
    38     i += 1
    39     if i > 10 :           #符合特定条件是使用break语句退出循环
    40         break
    41 
    42     
    43 >>> 
    44 >>> s
    45 55
    46 >>> 
    47 
    48 >>> s = 0
    49 >>> for i in range(0,11,1):     #遍历序列元素
    50     s += i
    51 
    52     
    53 >>> print(s)
    54 55
    55 >>> 

      关于表达式和运算符的详细内容在1.3.3节已有介绍,这里不再赘述,只是重点介绍一下比较特殊的几个运算符。首先是关系运算符,与很多语言不通的是,在Python中的关旭运算符可以连续使用,例如:

     1 >>> 
     2 >>> print(1 < 2 < 3)               #等价于 1 < 2 and 2 < 3
     3 True
     4 >>> 
     5 >>> print( 1 < 2 > 3)              #等价于 1 < 2 and 2 > 3
     6 False
     7 >>> 
     8 >>> print(1 < 3 > 2)               #等价于 1 < 3 and 3 > 2
     9 True
    10 >>> 

      

      在Python中,条件表达式不允许使用赋值运算符“=”,避免了其他语言中误将关系运算符“==”写作赋值运算符“=”带来的麻烦,例如,下面的代码在条件表达式中使用赋值运算符“=”将抛出异常,提示语法错误。

    1 >>> 
    2 >>> if a = 3:       #条件表达式中不允许使用赋值运算符
    3     
    4 SyntaxError: invalid syntax
    5 >>> 
    6 >>> if (a = 3) and (a = 4):
    7     
    8 SyntaxError: invalid syntax
    9 >>> 

      比较特殊的运算符还有逻辑运算符and 和 or,这两个运算符具有短路求值或惰性求值的特点,简单地说,就是只计算必须计算的表达式的值。以and为例,对于表达式“表达式1 and 表达式2”而言,如果“表达式1”的值为False或其他等价值是,不论表达式2的值是什么,整个表达式的值都是False,此时“表达式2”的值无论是什么都不影响整个表达式的值,因此将不会被计算,从而减少不必要的计算和判断。另外Python中的逻辑运算符在某些方面和其他语言也有所不同,例如:

     1 >>> 3 and 5
     2 5
     3 >>> 
     4 >>> 3 or 5
     5 3
     6 >>> 
     7 >>> 0 and 5
     8 0
     9 >>> 
    10 >>> 0 or 5
    11 5
    12 >>> 
    13 >>> not 3
    14 False
    15 >>> 
    16 >>> not 0
    17 True
    18 >>> 

      下面的函数应用指定的分隔符把多个字符串连接成一个字符串,如果用户没有指定分隔符则使用逗号。

     1 >>> 
     2 >>> def join(chList,sep = None):
     3     return (sep or ',').join(chList)    #注意:参数sep不是字符串时会抛出异常
     4 
     5 >>> 
     6 >>> chTest = ['1','2','3','4','5']
     7 >>> 
     8 >>> join(chTest)
     9 '1,2,3,4,5'
    10 >>> 
    11 >>> join(chTest,':')
    12 '1:2:3:4:5'
    13 >>> 
    14 >>> join(chTest,' ')
    15 '1 2 3 4 5'
    16 >>> 
    17 >>> 
    18 >>> #当然也可以把上面的函数直接定义为下面带有默认值参数的形式
    19 >>> 
    20 >>> def join(chList,sep = ','):
    21     return sep.join(chList)
    22 
    23 >>> 

      小技巧:在设计包含多个条件的表达式是,如果鞥能够大概预测不同条件失败的概率,并将多个条件根据and 和 or 运算符的短路求值特性来组织顺序,可以大幅度提高程序运行效率,减少不必要的计算,这也属于代码优化的内容。

      拓展知识:逻辑运算符与常见电路连接方式的相似之处。大家应该都学过高中物理,还记得并联电路、串联电路、短路这样的概念吗?可以做个简单类比,or运算符类似于并联电路,只要一个开关是通的那么灯就是亮的;and运算符类似于串联电路,必须是所有开关是通的那么灯才是亮的;not运算符类似于短路电路,如果开关通了那么灯就灭了,入托 3-1 所示。

  • 相关阅读:
    .NET 开源框架
    ORM 开发框架
    C# 文件下载四方法
    用ASP.net判断上传文件类型的三种方法
    站在十字路口的程序媛,该如何选择?
    突然的烦恼
    Request获取url信息的各种方法比较 及 Request.UrlReferrer详解
    JS 获得当前地址栏url
    MvcPager 概述
    Simditor使用方法
  • 原文地址:https://www.cnblogs.com/avention/p/8553399.html
Copyright © 2011-2022 走看看