if语句
一般形式:
1. if <test1>:
2. <statements1>
3. elif <test2>:
4. <statements2>
5. else <test3>:
6. <statements3>
注意:Python中没有switch或case语句,在Python中,多路分支是写成一系列的if/elif测试,或者对字典进行索引运算或搜索列表。因为字典和列表可以在运行时创建,有时会比硬编码的if逻辑更有灵活性。
1. >>> choice = 'ham'
2. >>> print({'spam':1.25,
3. 'ham':1.99,
4. 'eggs':0.99,
5. 'bacon':1.10}[choice])
6. 1.99
上面的字典就是多路分支,根据键的选择进行索引,再分支到一组值中的一个,很像C语言中的Switch。当没有键匹配时,按默认情况处理,就像我们之前见到的,字典默认值能编码到has_key测试、get方法调用或异常捕捉中。在这里也能用相同的技术,在字典式的多路分支中用于编写默认动作。如下是通过get方法处理默认值的情况:
1. >>> branch = {'spam':1.25,'ham':1.99,'eggs':0.99}
2. >>> print(branch.get('spam','Bad Choice'))
3. 1.25
4. >>> print(branch.get('bacon','Bad Choice'))
5. Bad Choice
============================================================ =============================
一些语法规则:
【字典适用于将值和键关联,但如果通过if语句来编写的更复杂动作呢?在之后将会学到字典也可以包含函数,从而代表更为复杂的分支动作,并实现一般的跳跃表格。这类函数作为字典的值,通常写成函数名或lambda,通过增加括号调用来触发其动作】
【虽然字典式多路分支在处理动态数据的程序中很有用,但多数程序员发现,编写if语句是执行多路分支最直接的方式。编写代码的原则是:有疑惑的时候,就遵循简易性原则和可读性原则】
【缩进:每个缩进层级使用4个空格或者一个制表符,这是通常的惯例;避免混合使用制表符和空格!】
【相邻的字符串常量是隐式地连接起来的】
=========================================================================================
真值测试
在Python中:
【1】任何非零数字或非空对象都为真
【2】数字零、空对象以及特殊对象None都被认作是假
【3】比较和相等测试会递归地应用在数据结构中
【4】比较和相等测试会返回True或False(1和0的特殊版本)
【5】布尔and和or运算符会返回真或假的操作对象
Python中有三种布尔表达式运算符:
【1】X and Y 如果X和Y都为真,就是真
【2】X or Y 如果X或Y为真,就是真
【3】not X 如果X为假,那就是真(表达式返回True或False)
此处,X和Y可以是任何真值或者返回真值的表达式(例如,相等测试,范围比较等)
布尔运算法在Python中是字(不是C的&&、||和!)。此外,布尔and和or运算符在Python中会返回真或假对象,而不是值True或False:
1. >>> 2<3,3<2
2. (True, False)
在Python中像这类值的比较会返回True或False作为其真值结果,但其实这些只是整数1和0和特殊版本(打印时不同,其实完全一样)
另一方面,and 和 or 运算符总会返回对象,不是运算符左侧的对象,就是右侧的对象。
就or测试而言,Python会从左至右求操作对象,然后返回第一个为真的的操作对象。再者,Python会在其找到的第一个真值操作数的地方停止,这通常叫做短路计算,因为求出结果后,就会使表达式其余部分短路:
1. >>> 2 or 3,3 or 2
2. (2, 3)
3. >>> [] or 3
4. 3
5. >>> [] or {}
6. {}