Python篇-函数(三)高阶函数

一 函数的作用域注意

  • 函数名可以作为返回值返回,返回值加一个()就可以调用
def test1():
    print('我是test1')

def test():
    print('我是test')
    return  test1
res = test()
print(res())
  • 函数的作用域于与函数定义有关,与调用位置无关
    a返回的就是bar的函数内存地址,a()就是在调用bar函数,此时 name为局部变量,虽然调用位置在最后,但是作用域与函数定义有关
name = '花花'

def foo():
    name = '思思'

    def bar():
        name = '可可'
        print(name)

    return bar
a = foo()
print(a)
a()
foo()()
<function foo.<locals>.bar at 0x10c28ce18>
可可
可可

二 : lambda匿名函数

fun = lambda name1,name2 : print(name1 +"比"+name2+"好看")
fun('雪芙','可可')
雪芙比可可好看
lambda 返回值
fun2 = lambda x,y,z: [x+1,y+1,z+1]
result = fun2(1,2,3)
print(result)
[2, 3, 4]

三 : 高阶函数

高阶函数特点,参数是一个函数,返回值是一个函数

  • 高阶函数

把函数当作参数传给另外一个函数

def foo(fun,name): ar
    fun(name)

def bar(name):
    print('my name is %s' %name)
foo(bar,'雪芙')
my name is 雪芙

返回值中包含函数

def foo(): #n=bar
    return bar

def bar(name):
    print('my name is %s' %name)
foo()('可可')
  • map函数

模拟map函数
def map_test(func,array):
    ret = []
    for i in array:
        ret.append(func(i))
    return ret
print(map_test(lambda x:x**2,[1,2,3]))
[1, 4, 9]
map函数

会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
第二个参数为可迭代对象

map(function, iterable, ...)

转大写

# print(list(map(lambda x:x.upper(),"hellow")))
['H', 'E', 'L', 'L', 'O', 'W']

做加1操作
第一个参数也可以是自己定义的某个函数,

def add_one(x):
    return x+1
print(list(map(add_one,[1,2,3,4])))
  • reduce函数

模拟reduce函数
num = [1,2,3]

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,100))
106
reduce函数

函数会对参数序列中元素进行累积。
function — 函数,有两个参数
iterable — 可迭代对象
initializer — 可选,初始参数

reduce(function, iterable[, initializer])

求和

print(reduce(lambda x,y:x+y,[1,2,3],10))
16
  • filter函数

模拟filter函数
girl = ['百百', '美美', '思思', '可可']
def filter_test(func,array):
    ret = []
    for p in array:
        if not func(p):
            ret.append(p)
    return ret

def show(n):
    return n.endswith('思')
print(filter_test(show,girl))
['百百', '美美', '可可']
filter函数

函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
filter收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

print(list(filter(lambda n:not n.endswith('思'),girl)))
['百百', '美美', '可可']
    原文作者:TianTianBaby223
    原文地址: https://www.jianshu.com/p/ec12ba4d95d9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞