Python基础的高阶函数和闭包

假如再一个函数中要来过滤东西,不知道lambda表达式的时候,比较复杂

def fn2(i):
    if i %2 ==0:
        return False
    return True
l = [1,2,3,4,5,6,7,8,9,10]

def fn(func, lst):
    '''
        fn()函数可以将指定列表中的所有偶数获取出来,并保存到一个新列表中返回

        参数:
            lst:要进行筛选的列表
    '''
    # 创建一个新列表
    new_list = []

    # 对列表进行筛选
    for n in lst:
        # 判断n的奇偶
        if func(n):
            new_list.append(n)
        # if n > 5 :
        #     new_list.append(n)

    # 返回新列表
    return new_list

print(fn(fn2,l))

 可以把一个函数当成参数来传递。

改进一下

l = [1,2,3,4,5,6,7,8,9,10]

print((lambda a,b:a+b)(1,2))

s = filter(lambda i:i >5,l)
print(list(s))

# map()
# map()函数可以对可跌倒对象中的所有元素做指定的操作,然后将其添加到一个新的对象中返回
l = [1,2,3,4,5,6,7,8,9,10]

r = map(lambda i : i ** 2 , l)
print(list(r))

 排序

# sort()
# 该方法用来对列表中的元素进行排序
# sort()方法默认是直接比较列表中的元素的大小
# 在sort()可以接收一个关键字参数 , key
#   key需要一个函数作为参数,当设置了函数作为参数
#   每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素的大小
l = ['bb','aaaa','c','ddddddddd','fff']
l.sort(key=len)
print(l)
l = [2,5,'1',3,'6','4']
l.sort(key=int)
print(l)

# sorted()
# 这个函数和sort()的用法基本一致,但是sorted()可以对任意的序列进行排序
#   并且使用sorted()排序不会影响原来的对象,而是返回一个新对象

l = [2,5,'1',3,'6','4']
# l = "123765816742634781"

print('排序前:',l)
print(sorted(l,key=int))
print('排序后:',l)
将函数作为返回值返回,也是一种高阶函数这种高阶函数我们也称为叫做闭包,
通过闭包可以创建一些只有当前函数能访问的变量可以将一些私有的数据藏到的闭包中。
def fn():

    a = 10

    # 函数内部再定义一个函数
    def inner():
        print('我是fn2' , a)

    # 将内部函数 inner作为返回值返回
    return inner

# r是一个函数,是调用fn()后返回的函数
# 这个函数实在fn()内部定义,并不是全局函数
# 所以这个函数总是能访问到fn()函数内的变量
r = fn()
r()
# 形成闭包的要件
#   ① 函数嵌套
#   ② 将内部函数作为返回值返回
#   ③ 内部函数必须要使用到外部函数的变量
def make_averager():
    # 创建一个列表,用来保存数值
    nums = []

    # 创建一个函数,用来计算平均值
    def averager(n) :
        # 将n添加到列表中
        nums.append(n)
        # 求平均值
        return sum(nums)/len(nums)

    return averager

averager = make_averager()
print(averager)
print(averager(10))
print(averager(20))
print(averager(30))
print(averager(40))

原文地址:https://www.cnblogs.com/dalianpai/p/12175740.html