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 所示。

  • 相关阅读:
    LeetCode Power of Three
    LeetCode Nim Game
    LeetCode,ugly number
    LeetCode Binary Tree Paths
    LeetCode Word Pattern
    LeetCode Bulls and Cows
    LeeCode Odd Even Linked List
    LeetCode twoSum
    549. Binary Tree Longest Consecutive Sequence II
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/avention/p/8553399.html
Copyright © 2011-2022 走看看