文档章节

chapter 8 summary

happyliferao
 happyliferao
发布于 2015/10/12 14:46
字数 1174
阅读 5
收藏 0
避免“悬挂 else”

映射对象(比如字典)的一个最大好处就是它的搜索操作比类似 if-elif-else
语句或是 for 循环这样的序列查询要快很多.

if ...:
....
elif ...:
....
.
.
.
.
else:
...

可以用这个替代:
if <> in ():
....
else:
....

还可以用字典代替:
msgs = {'create': 'create item',
'delete': 'delete item',
'update': 'update item'}
default = 'invalid choice... try again!'
action = msgs.get(user.cmd, default)


条件表达式(即"三元操作符"):X if C else Y
example:
x, y = 4, 3
x if x

直接迭代序列要比通过索引迭代快,所以从性能上考虑要直接迭代序列。

enumerate() 函数:enumerate 函数用于遍历序列中的元素以及它们的下标:
>>> nameList = ['Donn', 'Shirley', 'Ben','Janice','David', 'Yen', 'Wendy']
>>> for i, eachLee in enumerate(nameList):
print '%d %s Lee'%(i+1,eachLee)

=== range() 的完整语法===
range(start, end, step =1)
range() 会返回一个包含所有 k 的列表, 这里 start <= k < end , 从 start 到end , k 每
递增 step . step 不可以为零,否则将发生错误.
>>> range(2, 19, 3)
[2, 5, 8, 11, 14, 17]
如果只给定两个参数,而省略 step, step 就使用默认值 1 .
>>> range(3, 7)
[3, 4, 5, 6]

===xrange() 内建函数===
xrange() 类似 range() , 不过当你有一个很大的范围列表时, xrange() 可能更为适合,因为
它不会在内存里创建列表的完整拷贝.

与序列相关的内建函数

sorted()
reversed(),
enumerate(),
zip()


放弃循环的 break 语句, 和立即开始下一次迭代的 continue 语句.

当遇到continue 语句时, 程
序会终止当前循环,并忽略剩余的语句, 然后回到循环的顶端. 在开始下一次迭代前,如果是条件循
环, 我们将验证条件表达式.如果是迭代循环,我们将验证是否还有元素可以迭代. 只有在验证成功
的情况下, 我们才会开始下一次迭代.


浅谈else语句:
if-else 语句,最常用的
for-else 语句。
while-else语句
在循环中使用时, else子句只在循环完成后执行, 也就是说 break 语句也会跳过 else 块.
for 循环也可以有 else 用于循环后处理(post-processing). 它和 while 循环中的
else 处理方式相同. 只要for 循环是正常结束的(不是通过 break ), else 子句就会执行
例子:
def showMaxFactor(num):
    count=num/2
    while count>1:
       if num%count==0:
           print 'thelargest factor of %d is %d'%(num,count)
          break
       count=count-1
    else:
       print num,'is prime'

for eachNum in range(10,21):
   showMaxFactor(eachNum)


迭代器和 iter() 函数

reversed() 内建函数将返回一个反序访问的迭代器. enumerate() 内建函数同样也返回迭代器.
另外两个新的内建函数, any() 和 all()
可迭代的有,序列,字典(键值),文件
map() 对所有的列表成员应用一个操作, filter() 基于一个条件表达式过
滤列表成员. 最后, lambda 允许你快速地创建只有一行的函数对象

列表解析语法:
[expr for iter_var in iterable]
这个语句的核心是 for 循环, 它迭代 iterable 对象的所有条目. 前边的 expr 应用于序列
的每个成员, 最后的结果值是该表达式产生的列表. 迭代变量并不需要是表达式的一部分.
例子:
[x**2 for x in range(6) ]
[expr for iter_var in iterable if cond_expr]
>>>map(lambda x: x ** 2, range(6))
[0, 1, 4, 9, 16, 25]
===矩阵样例===
你需要迭代一个有三行五列的矩阵么?
[(x+1,y+1)for x in range(3) for y in range(5)]
===磁盘文件样例===

f=open('hhga.txt','r')
len([word for line in f for word in line.split()])
快速地计算文件大小
import os
>>> os.stat('hhga.txt').st_size
499L
stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义.我们可方便地根据stat模块存取os.stat()中的值.
os.stat(path)执行一个stat()系统调用在给定的path上,返回一个类元组对象(stat_result对象,包含10个元素),属性与stat结构成员相

关:st_mode(权限模式),st_ino(inodenumber),st_dev(device),st_nlink(number of hardlinks),st_uid(所有用户的user id),st_gid(所有用户

的groupid),st_size(文件大小,以位为单位),st_atime(最近访问的时间),st_mtime(最近修改的时间),st_ctime(创建的时间)

列表解析:
[expr for iter_var in iterable if cond_expr]
生成器表达式:
(expr for iter_var in iterable if cond_expr)
列表解析会返回一个列表,而生成器表达式只不返回列表更节约空间和内存。
列表:sum(【len(word) for line in data for word inline.split()】)
生成器表达式:sum(len(word) for line in data for word inline.split())


我们通过一个寻找文件最长的行的例子来看看如何改进代码:
最优代码。
return max(len(x.strip()) for x in open('/etc/motd'))

© 著作权归作者所有

共有 人打赏支持
happyliferao
粉丝 6
博文 85
码字总数 60147
作品 0
顺义
QA/测试工程师
chapter 8 exercise

8–4. 素数.我们在本章已经给出了一些代码来确定一个数字的最大约数或者它是否是一个 素数. 请把相关代码转换为一个返回值为布尔值的函数,函数名为isprime() . 如果输入的是一个 素数, 那么...

happyliferao
2015/10/09
50
0
chapter 9 summary

open() 的基本语法是: fileobject = open(filename, access_mode='r',buffering=-1) access_mode,'r','w','a','U'分别代表读取, 写入和追加,通用换行符支持 使用 'r' 或 'U' 模式打开的文件...

happyliferao
2015/10/12
9
0
ios UIWebView 关于字体放大的问题

下面是一段 P 标签 The Ten Digits n The Digits we use today are called "Hindu-Arabic Numerals" and look l...

雯雯love
2013/12/19
872
0
chapter 7 summarize

chapter 7,dictionary dictionary: 字典是通过这样的算法来比较的: 首先是字典的大小,然后是键,最 后是值。 dictionary内建函数和工厂函数: str(),cmp(),dict() len(),hash() 字符串和...

happyliferao
2015/10/12
2
0
chapter 9 exercise

9–1. 文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做 Python , Perl, Tcl, 等大多脚本文件的注释符号. 附加题: 处理不是第一个字符开头的注释. import os filen...

happyliferao
2015/10/09
60
0

没有更多内容

加载失败,请刷新页面

加载更多

用户体验要素——以用户为设计中心

一、用户体验是什么 产品会与外界发生联系,人们如何去使用产品,人们使用产品无非解决两种问题,一,提高效率;二娱乐。而用户体验兼顾着功能和界面两个方面,为的是“提高人们的工作效率”...

铸剑为犁413
38分钟前
0
0
学习设计模式——代理模式

1. 认识代理模式 1. 定义:为其他对象提供一种代理以控制对这个对象的访问。 2. 组织结构: Proxy:代理对象,要实现与目标代理对象的相同的接口,这样就可以使用代理来代替具体的目标对象,...

江左煤郎
59分钟前
1
0
java JDK动态代理

本篇随笔是对java动态代理中的JDK代理方式的具体实现。 首先需要定义一个接口,为其定义了两个方法:   public interface UserService { public void add(); public void delete(); } 然后需...

编程SHA
今天
2
0
轻松理解Dubbo分布式服务框架

Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的...

别打我会飞
今天
2
0
TypeScript基础入门之JSX(一)

转发 TypeScript基础入门之JSX(一) 介绍 JSX是一种可嵌入的类似XML的语法。 它旨在转换为有效的JavaScript,尽管该转换的语义是特定于实现的。 JSX在React框架中越来越受欢迎,但此后也看到了...

durban
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部