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 !='':), 前者更常见也更简单,就字符串而言,测试是等效的。

 
 

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

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

    Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...

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

    列表和字段,这两种类型几乎是Python所有脚本的主要工作组件.他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套. 一.列表 列表的主要属性: *任意对象的有序集合 从 ...

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

    while语句,提供了编写通用循环的一种方法,而for语句是用来遍历序列对象内的元素,并对每个元素运行一个代码块.break,continue用在循环内,跳出整个循环或者跳出一次循环. 一.while ...

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

    字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3=""&quo ...

  5. Python学习笔记整理(python 3)

    一.tuple(元组) tuple和list非常类似,但是tuple一旦初始化就不能修改,如: classmates = ('Michael', 'Bob', 'Tracy') 1 classmate ...

  6. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  7. Python学习笔记(十四)

    Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...

  8. Python学习笔记(十)

    Python学习笔记(十): 装饰器的应用 列表生成式 生成器 迭代器 模块:time,random 1. 装饰器的应用-登陆练习 login_status = False # 定义登陆状态 def ...

  9. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

随机推荐

  1. AOJ 0121 广度优先搜索

    题意:7数码问题.在2×4的棋盘上,摆有7个棋子,每个棋子上标有1至7的某一数字,不同棋子上标的数字不相同.棋盘上还有一个空格(用0表示),与空格相邻(上下左右)的棋子可以移到空格中,该棋子原先位置成 ...

  2. PermGen space 与 Java heap space

    1.java.lang.OutOfMemoryError: PermGen spacePermGen space的全称是Permanent Generation space,是指内存的永久保存区域Ou ...

  3. @Query注解的用法(Spring Data JPA)

    参考文章:http://www.tuicool.com/articles/jQJBNv 1. 一个使用@Query注解的简单例子 @Query(value = "select name,au ...

  4. AFNetworking (3.1.0) 源码解析 <二>

    这次讲解AFHTTPSessionManager类,按照顺序还是先看.h文件,注释中写到AFHTTPSessionManager是AFURLSessionManager的子类,并且带有方便的HTTP请 ...

  5. Android 关于获取摄像头帧数据解码

    由于Android下摄像头预览数据只能  ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera.Param ...

  6. C primer plus 读书笔记第四章

    本章的标题是字符串的格式化输入/输出,重点介绍输入和输出. 本章的第一段示例代码和上一张示例代码很相近,代码就不贴了,新出现的特性是使用了一个数组来存放字符串,C预处理命令和strlen()函数. 下 ...

  7. [Javascript] Advanced Reduce: Additional Reducer Arguments

    Sometimes we need to turn arrays into new values in ways that can't be done purely by passing an acc ...

  8. HDU 3791 二叉搜索树 题解

    Problem Description 推断两序列是否为同一二叉搜索树序列   Input 開始一个数n,(1<=n<=20) 表示有n个须要推断,n= 0 的时候输入结束. 接下去一行是 ...

  9. Linux查看代码量

    利用find  xargs  wc可方便的计算出某个目录下源文件的代码量find sourcecode_dir_path -type f -name "*.c" -print0 | ...

  10. 【移动开发】WIFI热点通信(二)

    相信大家在上一篇中已经了解了Android中WIFI热点通信的相关操作知识(http://smallwoniu.blog.51cto.com/3911954/1536126),今天我们将在上一篇代码基 ...