python--006
2019-07-24 09:07:54来源:博客园 阅读 ()
一、函数的作用域
1、作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变
例一: name='alex' def foo(): name='lhf' def bar(): print(name) return bar func=foo() func() 例二: name='alex' def foo(): name='lhf' def bar(): name='wupeiqi' def tt(): print(name) return tt return bar func=foo() func()()
foo()()()
二、匿名函数
#匿名函数 #格式:lambda关键字 形参:表达式 fun=lambda x:x+1 print(fun(3))
name='张鹏' fun=lambda x:x+'帅锅' red=fun(name) print(red)
name='name' funn=lambda x,y:(x.startswith('n'),y+'1') print(funn('knnnn','dddddd'))
三、函数式编程
函数的参数传入,是函数吃进去的食物,而函数return的返回值,是函数拉出来的结果,
面向过程的思路就是,把程序的执行当做一串首尾相连的函数,一个函数吃,拉出的东西给另外一个函数吃,另外一个函数吃了再继续拉给下一个函数吃。。。
1、不可变,不用变了保存状态,不修改变量
2、第一类对象:函数即‘变量’
函数名可以当参数传递
返回值可以是函数名
例如:
用户登录流程:前端接收处理用户请求-》将用户信息传给逻辑层,逻辑词处理用户信息-》将用户信息写入数据库
验证用户登录流程:数据库查询/处理用户信息-》交给逻辑层,逻辑层处理用户信息-》用户信息交给前端,前端显示用户信息
函数式编程:
(以下部分内容摘自网络)
11 高阶函数
满足俩个特性任意一个即为高阶函数
1.函数的传入参数是一个函数名(把函数当做参数,传给另外一个函数;)
1 def foo (n): 2 print(n ) 3 def bar(name): 4 print('my name is %s'%name) 5 foo(bar('张三'))
2.函数的返回值是一个函数名(返回值中包含函数)
尾调用
map()函数
array=[1,3,4,71,2]
ret=[]
for i in array:
ret.append(i**2)
print(ret)
#如果我们有一万个列表,那么你只能把上面的逻辑定义成函数
def map_test(array):
ret=[]
for i in array:
ret.append(i**2)
return ret
print(map_test(array))
#如果我们的需求变了,不是把列表中每个元素都平方,还有加1,减一,那么可以这样
def add_num(x):
return x+1
def map_test(func,array):
ret=[]
for i in array:
ret.append(func(i))
return ret
print(map_test(add_num,array))
#可以使用匿名函数
print(map_test(lambda x:x-1,array))
#上面就是map函数的功能,map得到的结果是可迭代对象
print(map(lambda x:x-1,range(5)))
map函数
array=[1,3,4,71,2] ret=[] for i in array: ret.append(i**2) print(ret) #如果我们有一万个列表,那么你只能把上面的逻辑定义成函数 def map_test(array): ret=[] for i in array: ret.append(i**2) return ret print(map_test(array)) #如果我们的需求变了,不是把列表中每个元素都平方,还有加1,减一,那么可以这样 def add_num(x): return x+1 def map_test(func,array): ret=[] for i in array: ret.append(func(i)) return ret print(map_test(add_num,array)) #可以使用匿名函数 print(map_test(lambda x:x-1,array)) #上面就是map函数的功能,map得到的结果是可迭代对象 print(map(lambda x:x-1,range(5)))
filter()函数
move_people=['zp','sb','sb_ls','alex'] ret=[] for p in move_people: if not p.startswith('sb'): ret.append(p) print(ret) move_people1=['sgzp','sb','sb_lssb','sbalexsb','sbooppp','sssddhfhfhhdhsb'] """ 开始位置查询或排除 """ def sb_(p): return p.endswith('sb') ''' 结尾处查找或排除 ''' def _sb(p): return p.startswith('sb') ''' 总的调用 ''' def save(area,func): ret = [] for p in area: if not func(p): ret.append(p) return ret n=save(move_people1,sb_) print('好人1:',n) n=save(move_people1,_sb) print('好人2:',n) '''终极版 ''' n=save(move_people1,lambda x: p.startswith('sss')) print('好人3:',n) print('好人4',list(filter(lambda p:not p.endswith('hsb'),move_people1)))#move_people1是一个可迭代对象
reduce()函数
1 from functools import reduce 2 #合并,得一个合并的结果 3 array_test=[1,2,3,4,5,6,7] 4 array=range(100) 5 6 #报错啊,res没有指定初始值 7 def reduce_test(func,array): 8 l=list(array) 9 for i in l: 10 res=func(res,i) 11 return res 12 13 # print(reduce_test(lambda x,y:x+y,array)) 14 15 #可以从列表左边弹出第一个值 16 def reduce_test(func,array): 17 l=list(array) 18 res=l.pop(0) 19 for i in l: 20 res=func(res,i) 21 return res 22 23 print(reduce_test(lambda x,y:x+y,array)) 24 25 #我们应该支持用户自己传入初始值 26 def reduce_test(func,array,init=None): 27 l=list(array) 28 if init is None: 29 res=l.pop(0) 30 else: 31 res=init 32 for i in l: 33 res=func(res,i) 34 return res 35 36 print(reduce_test(lambda x,y:x+y,array)) 37 print(reduce_test(lambda x,y:x+y,array,50)) 38 39 reduce函数
总结
map()
处理序列中的每个元素,得到的结果是一个’列表‘,该‘列表’元素个数及位置与原来一样
filter()
遍历序列中的每个元素,得到的每个元素得到的布尔值,如果是true则保留下来
reduce()
处理一个序列,然后将序列合并操作
1 #当然了,map,filter,reduce,可以处理所有数据类型 2 3 name_dic=[ 4 {'name':'alex','age':1000}, 5 {'name':'wupeiqi','age':10000}, 6 {'name':'yuanhao','age':9000}, 7 {'name':'linhaifeng','age':18}, 8 ] 9 #利用filter过滤掉千年王八,万年龟,还有一个九千岁 10 def func(x): 11 age_list=[1000,10000,9000] 12 return x['age'] not in age_list 13 14 15 res=filter(func,name_dic) 16 for i in res: 17 print(i) 18 19 res=filter(lambda x:x['age'] == 18,name_dic) 20 for i in res: 21 print(i) 22 23 24 #reduce用来计算1到100的和 25 from functools import reduce 26 print(reduce(lambda x,y:x+y,range(100),100)) 27 print(reduce(lambda x,y:x+y,range(1,101))) 28 29 #用map来处理字符串列表啊,把列表中所有人都变成sb,比方alex_sb 30 name=['alex','wupeiqi','yuanhao'] 31 32 res=map(lambda x:x+'_sb',name) 33 for i in res: 34 print(i)
原文链接:https://www.cnblogs.com/zp0923/p/11100131.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- fetchone函数和fetchall函数返回值的区别 2019-08-13
- Python之装饰器笔记 2019-08-13
- Python学习日记(九) 装饰器函数 2019-08-13
- python之函数、面向对象 2019-08-13
- python3基础之“函数(2)” 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash