博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习笔记之控制流
阅读量:7006 次
发布时间:2019-06-27

本文共 2867 字,大约阅读时间需要 9 分钟。

  hot3.png

这一部分要讲一下python程序的结构和控制流,主要包括条件语句、循环与迭代、异常和上下文管理器。

1.条件语句

条件判断是组成程序的主要部分,和c语言一样python的判断语句也有if和else,还多了一个elif。

1
2
3
4
5
6
ifx <0:
    print'Negative number'
elifx >0:
    print'Positive number'
else:
    print'Zero'

如果执行语句不需要做任何操作,可以使用pass关键字。

1
ifx <0:pass

2.循环与迭代

python中的循环使用while和for语句实现,for实现的应该是迭代,不过迭代也可以算是一种循环吧。

1
2
3
4
5
6
7
i=0
whilei <10:
    printi
    i+=1
S=xrange(10)
forxins:
    printx

和c语言一样,当while判断表达式为False时跳出循环。for每次从s中读取一个值,其中x并不是for独有的,for结束后x仍然可以使用,如果前面已经定义了x,x的值将为最后一次迭代的值。如果x中的元素大小一致,比如都是3个元素的元组,我们也可以对每个元素进行迭代。

1
2
forx,y,zins:
    printx,y,z

如果在迭代中还需要索引,可以使用enumerate()函数,他将创建一个迭代器,返回值为包含索引和元素的一个元组。

1
2
fori,xinenumerate(s):
    printi,':',x

如果想一次迭代两个以上的序列,可以使用zip()函数,将多个序列组合为一个元组序列,其长度为最短的那个。

1
2
forx,yinzip(s, t):
    printx,y

zip()会一次创建整个元组序列,对于包含大量数据的序列的话,这样做明显是不合适的,这时可以使用itertools.izip()函数,他每次只会生成一个元组,类似于xrange()。在python3中没有这个问题。

在循环中还可以使用两个控制关键字:break和continue。这里我就不多讲了,和c语言的用法一样,break跳出当前循环,continue跳出当次循环。
在循环结构中也可以加入else语句,例如:

1
2
3
4
5
6
forlineinopen('hello.txt'):
    stripped=line.strip()
    ifnotstripped:
        break
else:
    print'There is no strip.'

else语句会在循环正常退出后执行,如果是break过早退出,则不会执行。

3.异常

异常意味着出现错误,会中断控制流。使用raise语句可以抛出异常。

1
raiseRuntimeError("Error")

RuntimeError是异常的类型,里面的字符串是该异常的相关细节,根据异常而定。异常抛出后必须捕获该异常,否则程序将出错,这时需要使用try-except语句。

1
2
3
4
5
6
try:
    raiseRuntimeError("error")
exceptRuntimeError as e:
    pass
except(IOError, TypeError, NameError) as e:
    pass

如果异常出现后必须做某些操作的话,可以使用finally语句。

1
2
3
4
5
6
try:
    f=open('hello.txt','r')
exceptIOError as e:
    pass
finally:
    f.close()

不管有没有异常发生,finally中的语句都会执行,即使没有正确捕获到异常,也会执行。主要用于结束操作,比如文件的关闭、资源的释放等。

try语句也支持else子句,他必须跟在最后一个except子句后面。如果try子句没有抛出异常就会执行else语句。

1
2
3
4
5
6
7
8
try:
    f=open('hello.txt','r')
exceptIOError as e:
    pass
else:
    data=f.read()
finally:
    f.close()

除了python内置的异常外,我们可以自定义异常,所有异常都是Exception的子类。

1
2
3
classNewException(Exception):pass
#抛出异常
raiseNewException('new exception.')

自定义的异常也可以带多个参数,重定义他的构造函数即可。

1
2
3
4
5
6
7
8
9
classNewException(Exception):
    def__init__(self, errno, msg):
        self.args=(errno, msg)
try:
    raiseNewException(10,"new exception.")
exceptNewException as e:
    printe
#输出
(10,'new exception.')

4.上下文管理器

还记得c#中的using吗,到了python就是with了,也就是上下文管理器。上下文管理器可以正确的管理各种资源,不需要时自动释放资源,比如文件的打开和关闭,线程的锁定等。

1
2
3
4
5
6
7
withopen('hello.txt','r') as f:
    f.read()
 
importthreading
lock=threading.Lock()
with lock:
    pass

执行with obj语句时,他会先执行obj.__enter__()来进入一个新的上下文;离开是调用obj.__exit__(type, value, traceback),该方法返回一个布尔值,指示被引发的异常是否得到处理,比如返回False表示引发的异常都将被传递出上下文。

with obj后接受一个可选的as var说明符,obj.__enter__()的返回值将保存在var中。有了这些后我们就可以自定义一个可以with的对象了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
classMyList():
    def__enter__(self):
        self.theList=list()
        returnself.theList
    def__exit__(self,type, value, tb):
        foriinself.theList:
            printi
        returnFalse
 
with MyList() as l:
    l.append(10)
    l.append('wuyuan')
    l.append('wuyuans.com')
# 输出
10
wuyuan
wuyuans.com

这是一个我自定义的列表,当关闭资源后打印出列表中的所有元素。

转载于:https://my.oschina.net/whp/blog/177651

你可能感兴趣的文章
总结spring下配置dbcp,c3p0,proxool数据源链接池
查看>>
不再消极,不再忧虑
查看>>
我的模块加载系统 v20
查看>>
简明Python3教程 5.第一步
查看>>
SharePoint 搜索爬网第三方网站配置
查看>>
总结Movie示例知识点
查看>>
WebUI无阻塞更新的实现
查看>>
协议森林12 天下为公 (TCP堵塞控制)
查看>>
尝试在C++里实现 Java 的 synchronized 关键字
查看>>
POJ-2057 The Lost House 贪心在动态规划中的应用
查看>>
uva10970 Big Chocolate
查看>>
PhoneGap API帮助文档翻译Notification提醒
查看>>
LESS介绍及其与Sass的差异
查看>>
PForDelta索引压缩算法的实现
查看>>
在.NET开发中的单元测试工具之(2)——xUnit.Net
查看>>
微软BI 之SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表
查看>>
Direct基础学习系列3 绘制+实例
查看>>
myeclipse报异常:java.lang.OutOfMemoryError: Java heap space
查看>>
NSCopying简析
查看>>
解决This system is not registered with RHN
查看>>