1. 条件语句

if、else与elif语句用于控制条件代码的执行。条件语句的一般格式如下:

if expression:statements
elif expression:statements
elif expression:statements
...
else:statements

如果不需要执行任何操作,可以省略条件语句的else和elif子句。如果特定子句下不存在要执行的语句,可以使用pass语句。

2. 循环与迭代

可以使用for和while语句实现循环,例如:

while expression:statementsfor i in s:statements

while语句反复执行循环体中的语句。直到相关表达式求值为false。for语句迭代s中的所有元素,直到再元可用元素。for语句仅适用于可支持迭代的对象。
如果迭代中使用的元素是元素大小完全一致的序列,每次迭代时,会把相应序列的各个元素赋值给变量x、y和z。尽管使用这行代码时s大多为元组序列,但s中的各项可以为任意类型的序列,包括列表、生成器和字符串。
循环时,除了数据值之外,有时还需要跟踪数字索引,可以使用内置函数enumerate(),例如:

for i,x in enumerate(s):statements

enumerate(s)创建了一个迭代器,其返回值就是一个元组的序列(0, s[0])、(1, s[1])、(2, s[2])等等。关于迭代的另一个常见问题是并行迭代两个以上的序列,可以使用zip()函数,例如:

for x, y in zip(s, t):statements

zip(s, t)将序列s和t组合成一个元组序列(s[0], t[0])、(s[1], t[1])、(s[2], t[2])等等。如果s和t的长度不等,则用完长度最短的索引为止。
使用break语句可从循环中跳出,例如:

for line in open("foo.txt"):stripped = line.strip()if not stripped:break # 遇到空行,停止读取

使用continue语句可以跳到循环的下一次迭代,例如:

for line in open("foo.txt"):stripped = line.strip()if not stripped:continue # 跳过空行

3. 异常

异常会中断程序的正常控制流。使用raise语句可以引发异常。raise语句的一般格式是raise Exception([value]),其中Exception是异常类型,而value是一个指定异常相关细节的可选值,例如:

raise RuntimeError("unrecoverable Error")

如果raise语句没有带任何参数,将会再次引发最近一次生成的异常。使用try和except语句可以捕捉异常,例如:

try:f = open('foo')
except IOError as e:statements

出现异常时,解释器将停止执行try代码块中的语句,并寻找可匹配该异常的except子句。执行完except子句后,控制权就会传递给出现在try-except代码块之后的第一条语句。try-except语句可以嵌套使用。如果异常传递到程序的最顶级却仍未被捕获,解释器就会终止程序运行。
except语句的可选修饰符as var提供了一个变量名称,如果出现异常,就会在其中放置一个提供给raise语句的异常类型的实例。异常处理程序可以检查该值,也可以使用isinstance()函数检查异常类型。
处理程序可以捕获多种类型的异常,使用Exception可以捕获除与程序退出相关之外的所有异常,例如:

try:do something
except (IOError, TypeError) as e:# 处理I/O、类型异常
except Exception as e:# 处理所有异常

使用except语句时如果不带任何异常类型,也会捕获所有异常,例如:

try:do something
except:# 处理所有异常

try语句也支持else子句,它必须跟在最后一个except子句后面。如果try代码块中的代码没有引发异常,就会执行else子句中的代码,例如:

try:f = open('foo', 'r')
except IOError as e:# 处理I/O异常
else:data = f.read()f.close()

finally语句为try代码块中的代码定义了结束操作,例如:

f = open('foo', 'r')
try:# do something
finally:f.close()

finally用于提供一些代码,无论是否出现错误,都必须执行该代码。如果没有引发异常,finally子句中的代码将在try代码块中的代码执行完毕后立即执行。如果引发了异常,控制权首先传递给finally子句的第一条语句。这段代码执行完毕后,将交由另一个异常处理程序进行处理。
如果要创建新异常,就定义父类为Exception的新类,例如:

class NetworkError(Exception):pass

可用如下方式使用这个异常:

raise NetworkError("Cannot find host.")

引发异常时,将提供给raise语句的可选值用作异常的类构造函数的参数。通常它就是一个表示消息的字符串,但用户自定义的异常可以带有一个或多个异常值,例如:

class DeviceError(Exception):def __init__(self,errno,msg):self.args = (errno,msg)self.errno = errnoself.errmsg = msg
raise DeviceError(1, 'Not Responding')

包含__init__()方法参数的元组赋值给属性self.args。打印异常跟踪消息时就需要用到这个属性。如果不定义该属性,出现错误时,用户就无法看到关于异常的有用信息。

4. 上下文管理与with语句

with语句支持在由上下文管理器对象控制的运行时上下文中执行一系列语句,例如:

with open("debuglog", "a") as f:f.write("Debugging\n")statementsf.write("Done\n")import threading
lock = threading.Lock()
with lock:statements

在第一小段代码中,当控制流离开with语句后面的代码块时,with语句将自动关闭已打开的文件。在第二小段代码中,当控制流进入with语句后面的代码块时自动请求一个锁定,而在控制流离开时又自动释放了这个锁定。
with obj语句在控制流进入和离开其后的相关代码块时,允许对象obj管理所发生的事情。执行with obj语句时,它执行方法obj.__enter__()来指示正在进入一个新的上下文。当控制流离开该上下文时,就会执行方法obj.__exit__(type, value, traceback)。如果没有引发异常,__exit__()方法的3个参数均被设为None。否则,它们将包含与导致控制流离开上下文的异常相关的类型、值和跟踪信息。__exit__()方法返回True或False,分别指示被引发的异常得到了还是没有得到处理。
with obj语句接受一个可选的as var说明符,如果指定了该说明符,obj.__enter__()方法的返回值将保存在var中。with语句只对支持上下文管理协议(__enter__()和__exit__()方法)的对象有效。用户定义的类可以实现这些方法,从而定义它们自己的自定义上下文管理。例如:

class ListTransaction(object):def __init__(self, thelist):self.thelist = thelistdef __enter__(self):self.workingcopy = list(self.thelist)return self.workingcopydef __exit__(self, type, value, tb):if type is None:self.thelist[:] = self.workingcopyreturn False

5. 断言与__debug__

assert语句可以在程序中引入调试代码。assert的一般格式为:

    assert test [, msg]

其中test是一个表达式,其值应该为True或False。如果test求值为False,assert就会引发AssertionError异常并使用在assert中提供的可选消息msg,例如:

    def write_date(file, data):assert file, "write_data: file not defined"

除了assert语句之外,Python还提供内置的只读变量__debug__,除非解释器运行在最优模式中,不则它的值为True。程序可以在需要时检查这个变量。

转载于:https://blog.51cto.com/hanviseas/2160029

[Python] 程序结构与控制流相关推荐

  1. [Python]程序结构与控制流

    1. 条件语句 if.else与elif语句用于控制条件代码的执行.条件语句的一般格式如下: if expression:statements elif expression:statements e ...

  2. 商业数据分析从入门到入职(6)Python程序结构和函数

    文章目录 一.Python程序结构 1.if条件 2.循环 while循环 for循环 3.案例-王者荣耀纯文本分析 二.函数的介绍和基本使用 三.函数进阶 1.可变位置参数 2.可变关键字参数 3. ...

  3. 简述python程序结构_Python程序结构

    Python中有三种程序结构:顺序结构.选择结构.循环结构 顺序结构:python是一门解释型语言,它的执行过程一般是解释一行,执行一行. 选择结构:python中只有一种选择结构:if-else选择 ...

  4. python编程语法-Python学习笔记(Ⅰ)——Python程序结构与基础语法

    作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...

  5. 关于python中程序流程结构-Python程序结构

    2018年6月27日笔记 python流程控制 1.python流程控制语句结构 4种流程控制语句结构: if if -- else if -- elif --else if多条件 2.程序结构 3种 ...

  6. Python学习笔记(Ⅰ)——Python程序结构与基础语法

    作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...

  7. python程序结构和异常处理

    (一)程序结构和异常处理 (二)迭代和生成器 (三)函数式编程 本篇文章学习的内容是第一篇,目录如下: 01 程序结构 1.1  模块Module 1)定义 python中的模块指的是 包含一系列数据 ...

  8. python程序基本结构有哪些_【Python基础】Python程序结构有哪些

    从上面我们可以大概看出,一个完整的py程序结构大概如下: 我们知道,对于C/C++/C#等编程语言来说,程序的入口一定是main()函数,但是如果沿用这种思路来理解python的话就很容易踩坑. Py ...

  9. Python 程序结构及代码规范

    每一个可执行的 python 程序中都会有各种各样的文件类型.文件中也有基本的代码结构和代码规范 1.文件类型 在 python 中,常用的文件类型有 3 种:分别是源代码文件.字节代码文件和优化代码 ...

最新文章

  1. 圣何塞与 Microsoft 宣布该市为超过 5,000 名市府公务员选择 Office 365、Windows Azure 和 StorSimple...
  2. Ubuntu 7.04 相关设置
  3. AlphaGo首席研究员亲授!10张PPT介绍10大强化学习黄金法则!
  4. @@identity、scope_identity()、IDENT_CURRENT('tablename')函数的区别
  5. 2003:个人知识管理实施
  6. ROS系统 参数的获取和设置
  7. php cdi_CDI和lambda的策略模式
  8. ubunu安装软件的一个错误
  9. 数据库:MySQL和MariaDB的JDBC连接
  10. MySQL 基础 ———— 子查询
  11. 学好JAVA保终身_JAVA IO 学习
  12. I.MX6 ifconfig: SIOCSIFHWADDR: Cannot assign requested address
  13. Photoshop提示暂存盘已满怎么办?ps暂存盘已满如何解决?
  14. PenTesters框架(PTF)
  15. clr 80004005
  16. 如何在matplotlib中使用新罗马字体
  17. kubeadm,kubevip,containerd部署高可用的kubernetes集群
  18. Life is short, You need Python
  19. 世界坐标系(WCS)和用户坐标系UCS
  20. 如何搭建网站?第二步:购买服务器域名

热门文章

  1. java用链表做学生系统_C语言链表实现学生管理系统
  2. TCP局域网 通讯 的消息发送
  3. 树状数组维护区间和的模型及其拓广的简单总结
  4. C++:11---友元函数、友元类
  5. 用Python将多张图片合并成一PDF文件
  6. 三目运算符_C语言知识点:运算符的优先级和结合性
  7. java 遍历100以内的偶数,偶数的和,偶数的个数
  8. 好记性不如烂笔头,记录几个常用的Linux操作
  9. Linux 常用命令
  10. 专访谷歌CEO:像对待家人一样对待员工