Python学习笔记整理(十)Python的if测试

if语句是选取要执行的操作.
一、if语句
1、通用格式
形式是if测试,后面跟着一个或多个可选的elif(else if)测试,以及一个最终选用的else块。测试和else部分可以结合嵌套语句块,缩进列在行首下面。Python会执行第一个结算结果为真的代码块,或者如果所有测试都为假时,就执行else块。
if语句一般形式如下:
if <test1>:
    <statements1>
elif <test2>:
    <statements2>
else:
    <statements3>
2、基本列子
除了开头的if测试及其关联的语句外,其他所有部分都是可选择。
>>> if 1:
...  print ‘True‘
...
True
需要处理测试为假的情况,需要else。else就是所有测试条件都不满足情况下的默认选择
>>> if not 1:      
...     print ‘true‘
... else:
...     print ‘false‘
...
false

3、多路分支
>>> x=‘killer rabbit‘        
>>> if x == ‘roger‘:           
...     print "how‘s jessica?"
... elif x == ‘bugs‘:        
...     print "what‘s up doc?"
... else:
...     print "Run away!"*2  
...
Run away!Run away!
Ptyhon中没有swith和case语句。在Ptyhon多路分支写成一系列的if/elif测试。或者对字典进行索引运算或者搜索列表。因为字典和列表可以在运行时创建,有时会比硬编码的if逻辑更具有灵活性.
>>> choice=‘ham‘ 
>>> print {‘spam‘:1.25,
...        ‘ham‘: 1.99,
...        ‘eggs‘:0.99,
...        ‘bacon‘:1.10}[choice]
1.99
这个字典是多路分支,根据键的选择进行索引,在分支到这组值的其中一个。比起C语言的switch,两者等效,也可以使用Python语句表达。不过使用if表达不够简洁。
字典默认值能够通过has_keys测试,get方法调用或异常捕捉来处理。在字典式的多路分支中用于编写默认动作。这里通过get支持处理默认值
的情况
>>> Ptest={‘name‘:‘diege‘,‘age‘:18,‘sex‘:‘M‘}
>>> print Ptest.get(‘name‘,‘Bad choice‘)
diege
>>> print Ptest.get(‘class‘,‘Bad choice‘)     
Bad choice
后面会学到字典也可以包含函数,从而代表更为复杂的分支动作,并实现一般的跳跃表格。这类函数做为字典的值,通常写成lamdba,通过增加括号调用来触发器动作
再来一个例子

###对比shell中的条件表达式######
if  [test1]
then
        do something1
elif [test2]
then
    do something2
else
        do something3
fi
二、Python语法规则
Python都有简单和基本的语句语法,但是,有些特定是我们需要知道的。
* 语句是逐个运行,除非你不这样写
* 块和语句的边际会自动被检测
* 复合语句=首行+“:”+缩进语句
* 空白行,空格,以及注释通常都会被忽略。
* 文档字符串(docstring)会被忽略,但会被保存并由工具显示。
Pyton支持另外一种注释,称为文档字符串。
1、代码块分隔符
自动以行缩进检测块的边际。缩进至右侧相同距离的所有语句属于同一块的代码。块内的语句都会垂直对齐,好像是在一个栏之内。
2、语句分隔符
Python的语句一般都是在其所在行的末尾结束的,不过,当语句太长了,难以单放在一行时,有些特殊的规则可以用于其位于多行之中。
1)如果使用语法括号对,语句就可以横跨数行。如在封闭的(),{},[]这类配对中编写代码。紧接着的行可以在任何缩进层次开始,而且应该全部垂直对齐。
2) 如果语句以反斜线结尾,就可以横跨数行。
3)三重引号字符串常量可以横跨数行
4)其他规则:有关语句分隔符。注释和空白也能出现在文件的任意之处。注释则出现在行的末尾终止
3、一些特殊情况
if (a==b and c==d and
    d==e and ee==f):
    print "new"
Python允许在相同行上编写一个以上的非复合语句(语句内未嵌套其他语句),有分号隔开。
>>> x=3;y=2;print x*y
6
三、真值测试
在Python中:
* 任何非0数字或非空对象对象都是真
* 数字0,空对象以及特殊对象None都被认作是假
* 比较和相等测试会递归地应用在数据结构中。
* 比较和相等测试会返回True或False(1和0的特殊版本)
* 布尔and和or运算符会返回真或假的操作对象
布尔运算符是用于结合其他测试的结果,Python中有三种布尔表达式运算符:
X and Y
    如果X和Y都为真,就是真
X or Y
    如果X或Y为真,就是真
not X
    如果X为假,那就为真(表达式返回True或False)
X和Y可以是任何真值或返回真值的表达式(如相等测试,范围比较等)。此外布尔and和or运算符在Python中返回真或假对象,
而不是True或False.返回and或or运算符左侧或者右侧的对象。(注意:每一个对象不是真就是假)
对or而言,从左到右求运算操作对象,然后返回第一个为真的操作对象。Ptyhon会在其找到第一个真值地方停止。【如果没有为真的呢?】
对and而言,计算所有为真时才会真,返回最后一个为真的对象。停止在第一个为假的对象上
1、if/else三元表达式
Python2.5引入的新的表达式
A=Y if X else Z
只有当X为真时才会执行表达式Y,而只有当X为假时,才会执行表达式Z
>>> A=‘t‘ if ‘diege‘ else ‘f‘
>>> A
‘t‘
>>> A=‘t‘ if ‘‘ else ‘f‘    
>>> A
‘f‘

>>> x=""            
>>> y=1
>>> z=2
>>> y if x else z
2
>>> x=9 
>>> y if x else z
1

2.5版本以前,相同效果可以小心使用and和or
A=((X and Y) or Z)
使用下列表达式也类似的,因为bool函数会把X转换成对应的整数1或0,然后用于从列表中挑选真假值。
A=[Z,Y][bool(X)]
>>> [‘f‘,‘t‘][bool("")]
‘f‘
C的语法,也是shell的
Y?X:Z
2、为什么要在意布尔值
X=A or B or C or None
这样的语句会把X设置A,B以及C中第一个非空(为真)的对象,或者如果所有对象都未空,就设置为None.
这样可行是因为or运算符返回两对象之一。这成为Python中相当常见的编写代码手法:从一个固定大小的集合中选择非空的对象只要在其串在一个or表达式中即可。
短路计算也很重要,因为布尔运算右侧的表达式肯能会调用函数来执行实质或重要的工作。不然,如果短路规则生效,附加效果就不会发生了。
if f1() or f2():...
这里如果f1返回真值(非空),python将不会再执行f2(),为了保证两个函数都会执行,要再or之前调用它们。
tmp1,tmp2=f1(),f2()
if tmp1 or tmp2:...

用来模拟if/else语句:((A and B) or C )
假定B真,A为真返回B【A,B都为真返回B,B为真,直接返回B,不计算C】,如果不是指返回C

最后,因为所有对象本质都是真或假,Python中,直接测试对象 ( if X:),而不是和空值比较(if X !=‘‘:), 前者更常见也更简单,就字符串而言,测试是等效的。

时间: 2024-07-29 08:47:07

Python学习笔记整理(十)Python的if测试的相关文章

Python学习笔记整理(五)Python中的列表.

列表和字段,这两种类型几乎是Python所有脚本的主要工作组件.他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套. 一.列表 列表的主要属性: *任意对象的有序集合 从功能上看,列表就是收集其他对象的地方,可以把它看作组.列表所包含每一项都保持了从左到右的位置顺序(它们是序列) *通过偏移读取 和字符串一样,可以通过列表对象的偏移对其进行索引,从而读取对象的某一部分内容.可以自行分片和合并之类的任务. *可变长度,异构以及任意嵌套 列表可以实地增长或者缩短,并且可

Python学习笔记整理(三)Python中的动态类型简介

Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之间的关系都适用.那么这个概念也容易理解并掌握. 1.变量,对象和引用 变量创建:一个变量,当代码第一次给它赋值时它就被创建了.之后的赋值将会改变已创建的变量名的值.Python在代码运行之前先检测变量名,可以当成是最初的赋值创建变量. 变量类型:变量永远不会有任何的它关联的类型信息或约束.类型的概念

Python学习笔记整理(四)Python中的字符串..

字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3="""...""" 三重引号块 T4=r'\temp\diege' Raw字符串 抑制(取消)转义,完全打印\tmp\diege,而没有制表符 T5=u’diege' Unicode字符串 T1+T2     合并 T1*3    重复 T2[i]    索引 T2[i:j] 分片

Python学习笔记整理(十一)Python的while和for循环

while语句,提供了编写通用循环的一种方法,而for语句是用来遍历序列对象内的元素,并对每个元素运行一个代码块.break,continue用在循环内,跳出整个循环或者跳出一次循环. 一.while循环 1.一般格式 格式:首行以及测试表达式,有一列或多列缩进语句的主体以及一个选用的else部分(控制权离开循环时而没有碰到break语句时会执行) python会一直计算开投的测试,然后执行循环主体内的语句,直到测试返回假值为止. while <test>:     <statement

python学习笔记5:python读写文件

python学习笔记5:python读写文件 一.文件的打开模式 1.打开文件 1) f=open('D:\\a.txt','w') 第一个参数是文件的路径,如果只写文件的名字,默认是在当前执行目录下的文件:第二个参数是文件的打开模式 这种方式打开文件,在使用完了之后一定要记得,关闭文件: f.close() 2) with open('D:\\a.txt','w') as f 这种方式打开文件,文件在使用完后会自动关闭文件,不需要close  2. 文件的打开模式 总的来说,文件的打开模式有三

python学习笔记1——安装python

python学习笔记1--安装python centos和ubuntu的python2.7的安装方法参考:http://daixuan.blog.51cto.com/5426657/1767325 1.查看当前python版本并且 [[email protected] ~]# python -V Python 2.6.6 2.安装eple-release扩展源 [[email protected] ~]# yum install -y epel-release 3.安装pip [[email p

python学习笔记(01):python和c语言 标识符命名规则比较

python标识符命名规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’).标识符名称的其他部分可以由字母(大写或小写).下划线(‘ _ ’)或数字(0-9)组成.标识符名称是对大小写敏感的.例如,myname和myName不是一个标识符.注意前者中的小写n和后者中的大写N.有效 标识符名称的例子有i.__my_name.name_23和a1b2_c3.无效 标识符名称的例子有2things.this is spaced out和my-name. c语言标识符命

Python学习笔记(十)—— 高级特性

一.切片 1.定义: 经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符. 2.语法: A[1:3] 取出1到3,都是正数的情况下,缺填的为0(第一个),end(最后一个) B[-3:] 取出倒数第三个到倒数第一个,都是负数的情况下,缺填的为-1(最后一个) C[1:10:2] 从1到10,每2个取一个 跟matlab差不多的语法,就是对一个向量可以进行矩阵操作.可以对List.tuple,string,dict,set等使用 二.切片 1.定义: 如果给

Python学习笔记整理(十七)异常处理

一.异常基础 try/except:捕捉由代码中的异常并恢复,匹配except里面的错误,并自行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行try语句后面的程序) try/finally: 无论异常是否发生,都执行清理行为 (发生异常时程序会中断程序,只不过会执行finally后的代码) raise: 手动在代码中接触发异常. assert: 有条件地在程序代码中触发异常. with/as 在Python2.6和后续版本中实现环境管理器