函数(作用域,匿名函数,函数式编程,高阶函数)
一.函数作用域 1.函数名表示的是内存地址
def test1(): print(‘in the test1‘) def test(): print(‘in the test‘) return test1 print(test())
打印:in the test<function test1 at 0x000001E90E452EA0>2.函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系
name = ‘xiaopang‘ def foo(): name=‘fangjiyi‘ def bar(): print(name) return bar a=foo() a()
运行结果:fangjiyi二.匿名函数
1.定义:lambda x:x+1 形参 返回值(包含运算逻辑)2.使用方式赋函数名实现单个参数name=‘fang‘func=lambda x:x+‘sb‘func(name)print(func(name))多个参数:f=lambda x,y,z:(x+1,y+1,z+1)print(f(5,6,7))打印结果:(6,7,8)三.函数式编程函数式编程=编程语言定义的函数+数学意义的函数1.高阶函数定义(满足以下其一)*1函数接收的参数是一个函数名 *2返回值中包含函数*把函数当作参数传给另外一个函数def foo(n): print(n)def bar(name): print(‘my name is %s‘ %name)foo(bar)foo(bar(‘alex‘))*返回值中包含函数方式一def bar(): print(‘from bar‘)def foo(): print(‘from foo‘) return barn=foo()n()方式二def hanle(): print(‘from handle‘) return hanleh=hanle()h()运行结果:from handlefrom handle2.高阶函数--filterfilter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。需求:过滤掉带前缀的字符串1.使用正常方式(类似filter实现的过程):students=[‘sb-bcs‘,‘sb-ljf‘,‘fjy-nb‘,‘ql-nb‘,‘zsb‘]def sb_reduce(func,array): ret=[] for i in array: if not func(i): ret.append(i) return retprint(sb_reduce(lambda x:x.startswith(‘sb‘),students) )#运行结果:[‘fjy‘, ‘ql‘, ‘zsb‘]2.使用filter函数*filter返回的是迭代器对象students=[‘sb-bcs‘,‘sb-ljf‘,‘fjy-nb‘,‘ql-nb‘,‘zsb‘]print(filter(lambda x:x.startswith(‘sb‘),students) )打印结果:<filter object at 0x000001C1CFEF4978>**通过list方法遍历取值(默认取判断正确的)students=[‘sb-bcs‘,‘sb-ljf‘,‘fjy-nb‘,‘ql-nb‘,‘zsb‘]print(list(filter(lambda x:x.startswith(‘sb‘),students)) )打印结果:[‘sb-bcs‘, ‘sb-ljf‘]***进行 判断修改 实现过滤students=[‘sb-bcs‘,‘sb-ljf‘,‘fjy-nb‘,‘ql-nb‘,‘zsb‘]print(list(filter(lambda x:not x.startswith(‘sb‘),students)) )打印结果:[‘fjy-nb‘, ‘ql-nb‘, ‘zsb‘]3.高阶函数--mapmap()函数会根据提供的函数对指定序列做映射需求:对任意数组实现加减乘除等处理*正常实现(同时也是map函数实现过程)
num_l=[1,2,10,5,3,7] def map_test(func,array): ret=[] for i in array: res=func(i) #add_one(i) ret.append(res) return ret print(map_test(lambda x:x+1,num_l)) print(map_test(lambda x:x-1,num_l)) print(map_test(lambda x:x*2,num_l)) print(map_test(lambda x:x/2,num_l))
打印结果:[2, 3, 11, 6, 4, 8][0, 1, 9, 4, 2, 6][2, 4, 20, 10, 6, 14][0.5, 1.0, 5.0, 2.5, 1.5, 3.5]**map函数map函数返回的是一种可迭代对象num_l=[1,2,10,5,3,7]print(map(lambda x:x+1,num_l))打印结果:<map object at 0x000001FE068CA048>***使用map函数需要用list取值出来num_l=[1,2,10,5,3,7]print(list(map(lambda x:x+1,num_l)))打印结果;[2, 3, 11, 6, 4, 8]4.高阶函数--reduce()直接返回一个具体的值reduce() 函数会对参数序列中元素进行累积。需求:对一个数组进行累积*正常实现(reduce实现原理)
num_l=[2,2,3,10] def reduce_test(func,array,init=None): if init is None: res=array.pop(0) else: res=init for num in array: res=func(res,num) return res print(reduce_test(lambda x,y:x*y,num_l))) print(reduce_test(lambda x,y:x*y,num_l,10))#指定参数从他的基础上进行
打印结果:120060000**使用reduce函数需要从functols模块中引入
from functools import reduce num_l=[3,2,2,9] print(reduce(lambda x,y:x+y,num_l,1)) print(reduce(lambda x,y:x+y,num_l))
运行结果:1716新手可能有很多不足
相关推荐
leowzl 2020-08-15
明天你好 2020-08-03
idning 2020-08-03
liusarazhang 2020-06-28
chenlxhf 2020-06-25
Jonderwu 2020-06-14
shikailonggy 2020-06-05
shangs00 2020-05-09
wanff0 2020-05-04
ChinaGuanq 2020-05-01
whbing 2020-04-21
hyxinyu 2020-04-18
sunlizhen 2020-04-17
amberom 2020-03-28
zgwyfz 2020-03-28
XCMercy 2020-03-26
ThinkingLink 2020-02-29
Livis的开发之路 2020-02-28