三元表达,匿名函数

# 上节课复习
# 迭代器:迭代就是一个充分的过程。每一次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值
# 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)+2
age(4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=18
age(n)=age(n-1)+2
age(n)=18

def age(n):
if n==1:
return 18
return age(n-1)+2
age(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+z
lambda x,y,z:x+y+z

salaries={
'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(印射),filter
nums=[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():
pass
print(callable('aaaa'.strip()))
print(chr(90))
print(ord('z'))

 

posted @ 2018-04-02 23:40  嘿,  阅读(163)  评论(0编辑  收藏  举报