# 上节课复习
# 迭代器:迭代就是一个充分的过程。每一次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值# l=['a','b','c']# n=o# while n <len(1):# print(l[n])# n+=1## 为什么要有迭代器:对于,字符串,列表,元组,我们可以使用索引的方式取出其中包含的元素,都是对于字典,集合,文件等类型是没有# 索引的,# 什么是可迭代对象?# 可迭代对象指的是内置有__iter__方法的对象,即obj._iter__# 'hello'.__iter__# 可迭代对象执行obj.__iter__()得到的结果就是迭代器对象# 而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象# open('a.txt').__iter__()# 4、注意:# 迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象## 什么是迭代器对象?# 可迭代的对象执行__iter__方法得到返回值就是迭代器对象。# dic={'x':1,'y'=:2,'z':3}# iter_dic=dic._iter_()# print(iter_dic,__name__())## l='hello'# l=[1,2,3]# iter_l=l.__iter__()# while True:# print(iter_l.__iter__())# except.StopIteration# break## 迭代器的优点# (1)提供了一种不依赖于索引的取值方法# (2)迭代器更加节省内存# 缺点:取值只能一个个取,只能往后取,并且是一次性的无法用len获取长度## 二,生成器:# 函数内包含有yield关键字# 在调用函数代码,拿到返回值就是一个生成器对象## def chicken():# print('---->>')# yield# print('=====>')# yield## obj=chicken()# res=obj.__next__()# print(res)# res2=obj.__next__()# print(res2)# for iten in obj:# print(iten)# 1,面向过程的编程思想# 核心过程2字,过程即解决问题的步骤,# 即先干什么,在干什么# 总结:# 优点:复制的问题流程化,进而简单化# 缺点:扩展性差,修改一个阶段,其他阶段可能要修改# 应用于扩展性要求低的场景## 新知识三元表达式
# def max(x,y):# if x>y:# return x# else:# return y# 转为三元# res=x if x>y y# 三元表达式仅应用于用于:# 条件成立返回一个值# 条件不成立 返回值一个值#def max2(x,y): return x if x>y else y print(max2(11,10))# 函数递归:函数的递归调用,即在函数调用的过程中,又直接式间接地调用了函数本身
def foo(): print('from foo')foo()def foo(): print('from foo') bar()foo() 死循环,不可以优化递归分为两个阶段
1: 回溯注意:一定要在满足某种条件回溯,否则的无限递归2:递推
age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=18age(n)=age(n-1)+2age(n)=18def age(n):
if n==1: return 18 return age(n-1)+2age(5)总结:1,递归一定要有一个明确结束条件2,递归每进入下一次递归,问题的规模都应该减少3,在python中没有尾递归优化items=[1,[2,[3,[4,[5]]]]]
# def tell(l):# for item in l:# if type(item)is not list:# print(item)# else:# tell(item)# tell(items)三,匿名函数
(lambda强调:匿名即没有名字,给匿名函数赋给一个名字是没有意义的
2,匿名函数的参数规则,作用域关系与有名函数是一样的)3,匿名函数的函数体整体通常应该是一个表达式,该表达式必须要有一个返回值def func(x,y,z): return x+y+zlambda x,y,z:x+y+zsalaries={
'egon':3000, 'alex':10000000, 'wupeiqi':10000, 'yuanhao':2000}求工资最高那个人是?
def get(k): return salaries[k]print(max(salaries,key=lambda x:salaries[x]))求工资最低那个人print(min(salaries,key=lambda x:salaries[x]))把薪资字典按照薪资的高低排序nums=[1,11,9]nums=sorted(nums)print(nums)默认按照字典的键排序salaries=sorted(salaries,key=lambda x:salaries[x])#默认是升序排salaries=sorted(salaries,key=lambda x:salaries[x],reverse=True)#降序print(salaries) #lambday与map,reduce(印射),filternums=[1,2,3,4,5]res=map(lambda x:x**2,nums)print(list(res))nums=['alex','wxx','yghfh','dfshgg']
res=map(lambda x:x+'_nb' if x =='egon' else x+'_sb',nums)print(list(res))reduce:合并
reduce(lambda x,y:x+y,range(1,101),0)print(res)res=reduce(lambda x,y:x+' '+y+' ',1)filter()除去不要的值 (为真的值)
# nam=['alex_sb','wxx_sb','egon']# res=filter(lambda x:x.endswith('sb'),nam)# print(list(res))ages=[18,19,10,23,99,30]
res=filter(lambda n:n>=30,age)print(list(res))print(abs(-1))print(all(1,'a',True))print(all(''))print(any([0,'',None,False]))print('any([])')print(bin(11))print(oct(11))print(hex(11))print(bool(0))
res='你好啊egon'.encode('utf-8')
res=bytes('你好啊egon',encoding='utf-8')print(res)def func():
passprint(callable('aaaa'.strip()))print(chr(90))print(ord('z'))