设为首页 收藏本站
查看: 1150|回复: 0

[经验分享] Python学习笔记整理(十)Python的if测试

[复制链接]

尚未签到

发表于 2018-8-4 06:09:22 | 显示全部楼层 |阅读模式
  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 &quot;how's jessica?&quot;
  ... elif x == 'bugs':
  ...     print &quot;what's up doc?&quot;
  ... else:
  ...     print &quot;Run away!&quot;*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 &quot;new&quot;
  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=&quot;&quot;
  >>> 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(&quot;&quot;)]
  '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 !='':), 前者更常见也更简单,就字符串而言,测试是等效的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546087-1-1.html 上篇帖子: Python学习之使用Python操作Redis数据库 下篇帖子: 关于B+tree (附python 模拟代码)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表