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