5.5.1while循环

1234x=1while x<=100: print x x+=1

确保用户输入了名字:

1234name=""while not name: name=raw_input('please enter your name:')print 'hello,%s!'%name

5.5.2 for循环

while语句非常灵活。它可以用来在任何条件为真的情况下重复执行一个代码块。一般情况下这样就够用了,但是有些时候还得量体裁衣。比如要为一个集合(序列和其他可迭代对象)的每个元素都执行一个代码块。这个时候可以使用for语句:

123words=['a','b','c','d']for word in words: print word

5.5.3 循环遍历字典元素

一个简单的for语句就能循环字典的所有键,就像处理序列一样

123d={'x':1,'y':2,'z':3}for key in d: print key,'corresponds to',d[key]

注意:字典元素的顺序通常是没有定义的。换句话说,迭代的时候,字典中的健和值都能保证被处理,但是处理顺序不确定。如果顺序很重要的话,可以将键值保存在单独的列表中,例如在迭代前进行排序。

5.5.4一些迭代工具

1.并行迭代

程序可以同时迭代两个序列。

1234names=['anne','beth','george','damon']ages=[12,45,32,102]for i in range(len(names)): print names[1],'is',ages[i],'years old'

内建的zip函数可以用来进行并行迭代,可以把两个序列“压缩”在一起,然后返回一个元组的列表:

12>>> zip(names,ages)[('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]

循环中解包元组:

1234567891011>>> for name,age in zip(names,ages): print name,'is',age,'years old' anne is 12 years old beth is 45 years old george is 32 years old damon is 102 years old

zip函数也可以作用于任意多的序列。关于它很重要的一点是zip可以应付不等长的序列:当最短的序列“用完”的时候就会停止:>>> zip(range(5),xrange(100000000))

[(0, 0), (1, 1),(2, 2), (3, 3), (4, 4)]

2.编号迭代

有些时候想要迭代序列中的对象,同时还要获取当前对象的索引。例如,在一个字符串列表中替换所有包含’XXX’的子字符串:\

123456789index=0 for string in strings: if 'xxx' in strings: strings[index]='[censored' index+=1

另一种方法是使用内建的enumerate函数:

3.翻转和排序迭代

两个有用的函数:reversed和sorted:它们同列表的reverse和sort (sorted和sort使用同样的参数)方法类似,但作用于任何序列或可迭代对象上,不是原地修改对象,而是返回翻转或排序后的版本:

123456789101112131415>>> sorted([4,3,5,8,1]) [1, 3, 4, 5, 8] >>> sorted('hell,world!') ['!', ',', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'r', 'w'] >>> list(reversed('hello,world')) ['d', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'h'] >>> ''.join(reversed('hello,world!')) '!dlrow,olleh'

5.5.5跳出循环

1. break

结束(跳出)循环可以使用break语句。

1234567891011from math import sqrt for n in range(99,0,-1): root=sqrt(n) if root ==int(root): print n break

2. continue

continue会让当前的迭代结束,“跳”到下一轮循环的开始。它最基本的意思是“跳过剩余的循环体,但是不结束循环”。当循环体很大而且很复杂的时候,这会很有用,有些时候因为一些原因可能会跳过它—这个时候可以使用continue语句:for x in seq:

ifcondition1: continue

ifcondition2: continue

ifcondition3: continue

do_something()

da_ something_else()

do_ another_thing()

etc()

很多时候,只要使用if语句就可以了:for x in seq:

if not (condition1 or condition2 or condition3)

do_something()

do_something_else()

do_another_thing()

etc()

3.whileTrue/break习语

1234567while True: word=raw_input('please enter a word:') if not word:break print 'the word was '+word

while True的部分实现了一个永远不会自己停止的循环。但是在循环内部的if语句中加入条件可以的,在条件满足时调用break语句。这样一来就可以在循环内部任何地方而不是只在开头(像普通的while循环一样)终止循环。if/break语句自然地将循环分为两部分:第1部分负责初始化(在普通的while循环中,这部分需要重复),第2部分则在循环条件为真的情况下使用第1部分内初始化好的数据。

5.5.6循环中的else子句

123456789101112131415from math import sqrt for n in range(99,81,-1): root=sqrt(n) if root==int(root): print n break else: print "didn't find it"

5.6列表推导式——轻量级循环

列表推导式(list comprehension)是利用其他列表创建新列表(类似于数学术语中的集合推导式)的一种方法。它的工作方式类似于for循环:

123>>> [x*x for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

可以增加更多for语句的部分:

123>>> [(x,y)for x in range(3) for y in range(3)] [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)

5.7三人行 :pass, del和exec

5.7.1 pass

它可以在的代码中做占位符使用。比如程序需要一个jf语句,然后进行测试,但是缺少其中一个语句块的代码,考虑下面的情况:

123456if name=='ralph': print 'welcome!'elif name=='enid': passelif name=='bill': print 'access'

5.7.2使用del删除

12345678910>>> scoundrel={'age':42,'first name':'robin','last name':'of locksley'}>>> robin=scoundrel>>> scoundrel{'last name': 'of locksley', 'first name': 'robin', 'age': 42}>>> robin{'last name': 'of locksley', 'first name': 'robin', 'age': 42}>>> coundrel=None>>> robin{'last name': 'of locksley', 'first name': 'robin', 'age': 42}>>> robin=None

首先,robin和scoundrel都被绑定到同一个字典上。所以当设置scoundrel为None的时候,字典通过robin还是可用的。但是当我把robin也设置为None的时候,字典就“漂”在内存里面了,没有任何名字绑定到它上面。没有办法获取和使用它,所以Python解释器(以其无穷的智慧)直接删除了那个字典(这种行为被称为垃圾收集)。

123456789101112>>> x=["hello","world"]>>> y=x>>> y[1]="python">>> x['hello', 'python']>>> del x>>> y['hello', 'python']>>> xTraceback (most recent call last): File "", line 1, in NameError: name 'x' is not defined

5.7.3 使用exec和eval执行和求值字符串

1 .exec

执行一个字符串的语句是exec:

12>>> exec "print 'hello,world!'"hello,world!123456>>> from math import sqrt>>> exec "sqrt=1">>> sqrt(4)Traceback (most recent call last): File "", line 1, in TypeError: 'int' object is not callable

exec语句最有用的地方在于可以动态地创建代码字符串。如果字符串是从其他地方获得的—很有可能是用户—那么几乎不能确定其中到底包含什么代码。所以为了安全起见,可以增加一个字典,起到命名空间的作用。

可以通过增加in来实现,其中的就是起到放置代码字符串命名空间作用的字典。

1234567>>> from math import sqrt>>> scope={}>>> exec "sqrt=1" in scope>>> sqrt(4)2.0>>> scope['sqrt']1

可以看到,潜在的破坏性代码并不会覆盖sqrt函数,原来的函数能正常工作,而通过exec赋值的变量sqrt只在它的作用域内有效。注意,如果需要将scope打印出来的话,会看到其中包含很多东西,因为内建的_builtins_字典自动包含所有的内建函数和值:

1234>>> len(scope)2>>> scope.keys()['__builtins__', 'sqrt']

2.eval

eval(用于“求值”)是类似于exec的内建函数。exec语句会执行一系列Python语句,而eval会计算Python表达式(以字符串形式书写),并且返回结果值,(exec语句并不返回任何对象,因为它本身就是语句)。例如,可以使用下面的代码创建一个Python计算器:

123>>> eval(raw_input("enter an arthmetric expression:"))enter an arthmetric expression: 6+18*242

5.8 小结

本章的新函数

chr(n) 当传入序号n时,返回n所代表的包含一个字符的字符串,(0, n< 256)

eval(source[,globals[,locals]]) 将字符申作为表达式计算,并且返回值

enumerate(seq) 产生用于迭代的(索引,值)对

ord(c) 返回单字符字符串的int值

range([start,]stop[,step]) 创建整数的列表

reversed(seq) 产生seq中值的反向版本,用于迭代

sorted(seq[,cmp][,key][,reverse]) 返回seq中值排序后的列表

xrange([start,]stop[,step]) 创造xrange对象用于迭代

zip(seq1,_eq2.…) 创造用于并行迭代的新序列

python基础语言与应用第五章_《Python基础教程》 读书笔记 第五章(下)条件语句...相关推荐

  1. 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(五):扩展burp代理

    目录 前言 1.burp的fuzz脚本 2.burp中利用Bing服务 3.利用网站内容生成密码字典 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码, ...

  2. python基础教程读书笔记——第三章 字符串

    第三章 字符串 摘要: %s , $x , find()  , join() , split() , lower() , title() , strip() 1.字符串格式化 format = &qu ...

  3. UnixLinux大学教程 读书笔记【1-3章】

    Bash:Bourne-again shell,所有linux系统中的默认shell.程序名称:bash Shell:通过充当命令处理器以及解释命令的脚本,提供Unix基本界面的程序. 操作系统:运行 ...

  4. 《Python从入门到实践》读书笔记——第五章 if语句

    <Python从入门到实践>读书笔记--第五章 if语句 1. 一个简单示例 cars = ['audi', 'bwm', 'subaru', 'toyota']for car in ca ...

  5. 鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一)

    鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一) 第零章 计算机概论 0.1 电脑:辅助人脑的好工具 0.1.1 计算机硬件五大组成部分 0.1.2 一切设计的起点: C ...

  6. 《Python从入门到实践》读书笔记——第六章 字典

    <Python从入门到实践>读书笔记--第六章 字典 1. 一个简单的字典 alien_0 = {'color': 'green', 'points': 5}print(alien_0[' ...

  7. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境 文章目录 黑帽python第二版(Black Hat Python 2nd ...

  8. 《汇编语言》- 读书笔记 - 第1章-基础知识

    <汇编语言>- 读书笔记 - 第1章-基础知识 1.1 机器语言 1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储 ...

  9. 《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学

    <深度探索C++对象模型>读书笔记第五章:构造析构拷贝语意学 对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constr ...

  10. 《电路分析基础》第7章 正弦稳态电路 读书笔记

    <电路分析基础>第7章 正弦稳态电路 读书笔记 想念生物笔记...

最新文章

  1. pythonpil库过滤图像contour_快乐python 零基础也能P图 —— PIL库
  2. 基于 Asp.Net的 Comet 技术解析
  3. [HDOJ3652]B-Number(数位dp)
  4. 最简单的http服务器实现
  5. 深度学习(DL)与卷积神经网络(CNN)学习随笔-05-基于Python的LeNet之CNN
  6. 人工智能学习知识框架(知识点、实际应用)-思维导图汇总-xmind原图
  7. sql输出带颜色的字段_带你走进MySQL数据库(MySQL入门详细总结一)
  8. JAVA学习:maven开发环境快速搭建How to download J2EE API (javaee.jar) from Maven
  9. 基金小窍门:如何判断基金的赚与赔
  10. 企业信息安全建设要点梳理
  11. 关于记录每天”要完成的事项“和”未完成事项“,(尤其是周末时,对未完成事项的记录一定要全)-----工作方式
  12. 来自Intouch小菜鸟的第一篇Blog——报表制作
  13. nginx跨域配置及压缩配置
  14. [生存志] 第54节 武经七书司马法
  15. CuteFTP实用技巧
  16. Frobenius标准型与Jordan标准型总结
  17. hibernate 检索策略
  18. 原生 html 绘制表格
  19. 面试中常考的数学题——截木棍、圆上取点、赛马、红蓝墨水,测试毒药、坐到正确座位问题
  20. python word,ppt,excel转pdf(word转html),转图片

热门文章

  1. Windows系统安装jdk17
  2. android 接收闹钟广播,Android获取第三方闹钟的闹铃信息
  3. (六)IT行业名博,你不知道的都在这里!!!
  4. 事业单位计算机和办公软件基础知识,计算机基础知识(事业单位计算机考试常考知识点总结)...
  5. 2022年襄阳宜城市部分事业单位招聘模拟题及答案
  6. C语言入门教程学习 C语言学习包括哪些?
  7. 如何反击职场PUA?
  8. 网页制作流程--(项目案例)学成在线
  9. 名气大增的小红书还需要提防些什么
  10. Dapper入门使用