if语句:
python中的if语句简而言之就是选择需要执行的操作。if是我们学习的第一个复合语句,就像所有的python复合语句一样,if语句可以包含其他语句,也可以if在内。事实上,python让你在程序中按照顺序组合语句(使其逐一执行),而且可以任意扩展嵌套(使其只在特定情况下执行)
通用格式:
if测试:
后面跟着一个或多个elif,以及一个最终的else块。
if test:
pass
elif:
pass
else:
除了开头的if测试及其相关联的语句外,其他所有部分都是选用的。
if 1:
print("呵呵")
注意:当在这里使用的基本接口中交互地输入时,提示符在接下去的行中变成...(在IDLE中)
多路分之执行时,python会执行第一次测试为真的语句下面的嵌套语句,或者如果所有测试都为假时,就执行else部分。实际上,elif 和else部分都是可以神略的。
注意:if elif 以及else 结合在一起的原因在于 它们垂直对齐,具有相同的缩进。
python中switch case语句,不过我们可以使用字典来获取想同的效果。
具体操作如下:
注意:当没有健匹配时,这里if的else分局就按默认情况处理。字典默值能编码到has_key测试、get方法调用或异常捕捉中。
虽然字典式多路分之在处理董涛数据的程序中很有用,但多数程序员可能会发现,编写if语句是执行多路分之最直接的方式。编写代码时的原则是:有疑虑的时候,就遵守简易性原则和可读性原则。
python语法规则:
- 语句是逐个运行的,除非你不这样编写。python一般都会按照次序从头到位执行文件中嵌套块中的语句。但是像if(还有循环)这种语句会是的解释器在程序内跳跃。因为python经过一个程序的路径叫做控制流程,像if这类会对其产生影响的语句叫做控制流程语句
- 块和语句的边界会自动检测。python的程序块中没有大括号或begin/end 等分隔符;繁殖,python使用首行下的语句缩进把嵌套块内的语句组合起来。同样地,python语句一般是不以分号终止的。一行的末尾通常就是该行所写语句的结尾。
- 复合语句=首行+“:” + 缩进语句。python中所有复合语句都遵循相同格式:首行会以冒号终止,再接一个或多个嵌套越剧,而且通常都是在首行下缩进的。缩进语句叫做块。在if语句中,elif和else语句是if的一部分,也是其本身嵌套块的首行。
- 空百行、空格以及注释通常会被忽略。文件中空白行将忽略(但在交互模式提示符下不会)。语句和表达式中的空格几乎都忽略(除了字符串常量内,以及用在缩进时)。注释总被忽略:它们以#字符开头,而且延伸至该行的末尾。
- 文档字符出串会忽略,但会保存并有工具显示。python会忽略这些内通,但是,在运行时会自动将其附加在对象上,而且能由文档工具显示。
通常来讲,顶层(无嵌套)代码必须于第1栏开始。嵌套块可以从任何栏开始,虽仅可以由任意的空格和制表符组成,只要特定的单个块中的所有语句都相同即可。
每个缩进层级使用4个空格或这一个制表符,这是通常的惯例,但是python世界中没有绝对的标准。
在python中,知道空白的一种主要用途就是用于代码左侧的缩进,这点很重要。要知道缩进其实是python语法中的一部分,而不仅仅是编程风格:任何特定但一块中的所有语句都必须缩进到相同的层次,否则python会报告语法错误。
把缩进编程语法模型一部分,也强化了一致性,这是python这种结构化编程语言中可读性的重要组成部分。
注意:避免混合使用制表符和空格:python3.0中的新的错误检查。
语句的分隔符:
python的语句一般都是在其所在行的末尾结束的。不过,当语句太长、难以单放在一行的时候,有些特殊的规则可用于使其位于多行之中:
- 如果使用语法括号时,语句就可横跨数行。如果在封闭的()、{} []这类配对中编写代码,python就可让你在下一行继续输入语句。
- 如果语句以反斜线结尾,就可横跨数行。这个有点过时,但是也是可以用的。
- 字符串常量有特殊规则。三重引号字符串块可以横跨数行。
- 其他规则。有关语句分隔符,还有其他的重点要进行介绍。我们可以使用分号将简单(非复合)语句挤进单个的行中。此外,注释和空百行也能出现文件的任意指出。
一些特殊情况:
括号可以存放在表达式、函数参数、函数的首行、元组和生成器表达式,以及可以放在花括号中的任何内容(字典以及Python3.0 中的集合常量、集合和字典解析)。
注意 如果两个字符串常量彼此相邻的出现,它们会合并,就好像在它们之间已经放置了一个+-------当和开发对规则一起使用的时候,包括在圆括号中就允许这种形式华约当行。
最后,python可把复合语句的主体上移到首行,只要该主体只是简单(非复合)语句。简单if语句及单个测试和动作常常用到的这种用法
这种方式python是允许的,但是不仅以这么做。原则就是,试着让每条语句都在其自身的行上,除了最简单的块外,全部要缩进。
真值测试:
在python中:
- 任何非零或非空的对象都为真
- 数字零、空对象、False None 都被认为是假
- 比较和相等测试会递归地应用在数据结构中
- 比较和相等测试会返回True 和False(1和0的特殊版本)
- 布尔and和or运算会返回真或假的操作对象。
简而言之,布尔运算是用于结合其他测试的结果。python中有三种表达式运算符:
X and Y 如果X和Y都为真,就是真
X or Y 如果X或Y为真,就是真
not X 如果X为假,那就是真
不问运算符在Python中是文字(and or not)不是C的&&、|| 和!。此外,布尔and 和or运算符在Python中会返回真或假对象,而不是至True 或false。
and 和or运算符总是会返回对象,不是运算符左侧的对象,就是右侧的对象。如果我们在if或其他语句中测试其结果,总会如如期的结果那样(记住,每个对象本质上不是真就是假),但我们不会得到简单的True或False
就or测试而言,Python会由左至右求算操作对象,然后返回第一个为真的操作对象。再者,Python会在其找到的第一个真值操作数的地方停止。这通常叫做短路计算,因为求出结果后,就会是表达式其余部分短路(终止)
这里最终的结果和C及其他语言相同:如果if或while中测试时,获取的结果都是一样的。然而在python中会出现短路算法(布尔返回左侧或右侧的对象,而不是简单的整数标志(1,0))
if/else三元表达式:
A = Y if X else Z:
只有当X为真,Python才会执行表达式Y,而只有当X为假,才会执行表达式Z。也就是说,这是短路运算。
注意执行顺行,当X为真时,执行Y 否则执行Z
我们可以小心地用and和or运算符的结合实现,因为它们不是返回左边的对象就是返回邮编的对象:
A = ((X and Y) or Z) 这样是行的通的,但是有个问题:你假定Y是布尔真值。如果是这样,效果就相同:and 限制性,如果Z为真,就返回Y;如果不是,就返回Z。换句话说,我们得到的就是“if x then Y else z”
我们也可以使用A = [z,y][bool(x)]
因为bool函数会把X转换成对应的整数1或0,然后,就能用于从一个列表中挑选真价值。
为什么在意布尔值:
使用Python布尔运算符有些不寻常行为的一种常见方式就是,通过or从一组对象中选择。像这样的语句:
x = A or B or C or None
会把X设为A、B、C之中第一个非空(为真)的对象,或者如果所有的对象都为空就设置为None。这样行得通是因为or运算符会返回两对象之一,这成为Python中相当常见的编写代码的手法:从一个固定大小的集合中选择非空的对象(只要将其串在一个or表达式中即可)。在更简单的形式中,这也通常用来制定一个默认值,下面的例子中,如果A为真(或非空)的话将X设置为A,否则,将X设置为default:
X = A or default
了解短路计划也很重要,因为布尔运算符右侧的表达式可能会调用函数来执行实质或重要的工作,不然,如果短路规则生效,附加的效果就不会发生。
if f1() or f2()
在这里,如果f1返回真值(非空),python 将不再执行f2为了保证两个函数。为了保证两个函数都会执行,要在or之前调用它们。
tmp1,tmp2 = f1(),f2()
if tmp1 or tmp2: