概述
python函数高级话题二:迭代、解析、测试和嵌套循环。
学着,记着,将来用上继续深入研究。做一遍,增加脑子深处记忆。for… for…
print("===========函数高级话题二:函数迭代和解析================")
res = []
for i in 'spam':
res.append(ord(i)) #ord函数收集整个字符串中所有字符的ASCII编码
print(res)
res = [ord(i) for i in 'spam']
print(res)
res=list(map((lambda x:x**2),range(10)))
print('求平方:',res)
print("===========1、增加测试和嵌套循环,很有用的语句================")
l1=list(filter((lambda x:x%2==0),range(5))) #filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
print('l1:',l1)
l2=list(map((lambda x:x**2),filter((lambda x:x%2==0),range(10))))
print('l2:',l2)
res = [x+y for x in [1,2,3] for y in [100,200,300]]
print(res)
l3=[(x,y) for x in range(5) if x%2==0 for y in range(5) if y%2==1] #偶数和奇数之和
print('l3:',l3)
l4=[(x,y) for x in range(10) if x%2==0 for y in range(10) if y%2==1 and x+y==9] #偶数和奇数之和为9
print('l4:',l4,len(l4))
print("===========2、列表解析和矩阵,适合表和数据库排榜================")
m = [[1,2,3],
[4,5,6],
[7,8,9]]
n =[[2,2,2],
[3,3,3],
[4,4,4,]]
l5 = [row[1] for row in m] #行 123
print('l5:',l5)
l6 = [m[row][1] for row in (0,1,2)]
print('l6:',l6)
l7= [m[i][i] for i in range(len(m))]
print('l7:',l7)
l8=[m[row][col]*n[row][col] for row in range(len(m)) for col in range(len(n))]
print('l8:',l8)
l9=[[m[row][col]*n[row][col] for col in range(3)] for row in range(3)]
print('l9:',l9)
#速度:列表解析速度快于map,map速度是for速度2倍。
l10 = open('myfile.txt').readlines()
print('l10:',l10)
l11 = [line.rstrip() for line in open('myfile.txt').readlines()]
print('l11:',l11)
l12 = [line.rstrip() for line in open('myfile.txt')]
print('l12:',l12)
l13 = list(map((lambda line:line.rstrip()),open('myfile.txt')))
print('l13:',l13)
print("===========3、重访迭代器:生成器================")
"""
yield 和 return
return返回的是一个list列表,而yield每次调用只返回一个数值,毫无疑问,使用return空间开销比较大,尤其是操作巨量数据的时候,
操作一个大列表时间开销也会得不偿失
"""
def gen():
for i in range(10):
x=yield i
print(x)
G=gen()
print('1:',next(G))
print('2:',G.send(77))
print('3:',G.send(88))
print('4:',next(G))
l14=sum(x**2 for x in range(4))
print('l14:',l14)
l15=sorted(x**2 for x in range(4))
print('l15:',l15)
l16=sorted((x**2 for x in range(4)),reverse=True)
print('l16:',l16)
import math
l17= list(map(math.sqrt,(x**2 for x in range(4))))
print('l17:',l17)
print("===========4、生成器函数与生成器表达式================")
l20=(x*4 for x in 'spam')
print(list(l20))
print("===========5、对模块的计时================")
#下面是分模块计数时间,有点慢就不运行了。
# import time
# import sys
# reps=1000
# repslist = range(reps)
# def timer(func,*pargs,**kargs):
# start = time.perf_counter()
# for i in repslist:
# ret = func(*pargs,**kargs)
# elapsed = time.perf_counter() -start
# return (elapsed,ret)
#
# reps =10000
# repslist =range(reps)
# def forloop():
# res =[]
# for x in repslist:
# res.append(x+10)
# return res
#
# def listComp():
# return [x+10 for x in repslist]
#
# def mapCall():
# return list(map((lambda x:x+10),repslist))
#
# def genExpr():
# return list(x+10 for x in repslist)
#
# def genFunc():
# def gen():
# for x in repslist:
# yield x+10
# return list(gen())
#
# print(sys.version)
# for test in (forloop,listComp,mapCall,genExpr,genFunc):
# elapsed,result =timer(test)
# print('-'*33)
# print('%-9s: %.5f => [%s...%s]'%
# (test.__name__,elapsed,result[0],result[-1]))
"""
1、Python的time模块允许访问当前时间,精度随着每个平台而有所不同。在 Windows上,这个调用号称能够达到微妙的精度,已经相当准确了。
2、range调用放到了计时循环之外,因此,它的构建成本不会计算到 Python2.6的计时函数中。在 Python3.0的range是一个迭代器,因此这个步骤是不需要的。
3、reps计数是一个全局变量,如果需要的话,导入者可以修改它: mytimer.reps=N
当这些完成后,所有调用的总的使用时间在一个元组中返回,还带有被计时的函数的最终返回值,以便调用者可以验证其操作。
"""
print("===========6、函数的陷阱================")
#本地变量是静态检测
x1=99
def selector():
print(x1)
selector()
# def selector():
# print(x2)
# x2=88
# selector() #出错,x2未定义
print("---1---")
x3=99
def selector():
global x3
print(x3)
x3=88
selector() #出错,x2未定义
print("---2---")
x4=99
def selector():
import __main__ #得到全局变量x4
print(__main__.x4)
x4=88 #局部变量x4
print(x4)
selector()
print("===========7、默认与可变对象================")
print("---1、陷进函数,每次递加---")
def saver(x5=[]):
x5.append(1)
print(x5)
saver([2])
saver()
saver()
saver()
print("---2、陷进函数,每次清空重新运行---")
def saver(x6=None):
if x6 is None:
x6=[]
x6.append(1)
print(x6)
saver([2])
saver()
saver()
saver()
print("===========8、没有teturn的函数================")
def proc(x7):
print(x7) #没有return 返回空 None对象
x7= proc('testing 123...')
print(x7)
list=[1,2,3]
list=list.append(4)
print('list:',list)
list=[1,2,3]
list.append(4)
print('list2:',list)
print("===========下次继续学习模块内容================")
最后
以上就是动人春天为你收集整理的python函数高级话题二:迭代、解析、测试和嵌套循环的全部内容,希望文章能够帮你解决python函数高级话题二:迭代、解析、测试和嵌套循环所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复