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. zznu 1255 数字统计(数位DP, 数学方法)

    最近在学数位DP, 感觉还是满有收获的! 做了几个题之后想起来自己OJ上曾经做的一道题,以前是用数学方法写的,现在改用数位DP来写了一遍. 题目: 1255: 数字统计 时间限制: 1 Sec  内存 ...

  2. JAVA调用.NET WebService终极方案(包含对SoapHeader的处理)

    一.前言:      今日部门的产品需要用到短信功能,需要走公司统一的接口,而该短信接口是由.net开发的,利用两天时间彻底搞定了用java来调用.net 的web service,包括对soap h ...

  3. cf591A Wizards' Duel

    A. Wizards' Duel time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  4. 001_python变量命名规范(待实践一遍)

    参考: http://blog.sina.com.cn/s/blog_62f28d560100xv85.html https://my.oschina.net/leejun2005/blog/3871 ...

  5. jQuery 對table的基本操作

    一.鼠标移动到行更换背景色: css样式: .hover{ background-color: #cccc00; } Js脚本: $(document).ready(function () { //鼠 ...

  6. redis 本机链接服务端命令

    在windows 本机链接服务端redis,需要下载windows 端的redis: 1,运行redis-server.exe程序:2,打开cmd 控制台3,执行命令 D:\redis64\redis ...

  7. Android应用程序安装与Launcher启动机制

      以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luoshe ...

  8. apache SetEnv 设置

    php的服务器预定义变量 $_SERVER 可以通过apache的mod_env模块来添加我们所需要的内容 来段官网介绍 Description: Modifies the environment w ...

  9. Java设计模式---组合模式

    一.组合模式定义 组合模式定义: Compose objects into tree structures to represent part-whole hierarchies. Composite ...

  10. mui实现自动登录

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta name= ...