首页 / PYTHON / Python基础的高阶函数和闭包
Python基础的高阶函数和闭包
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python基础的高阶函数和闭包,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2162字,纯文字阅读大概需要4分钟。
内容图文
![Python基础的高阶函数和闭包](/upload/InfoBanner/zyjiaocheng/647/abaabaaba30c4dddb4ebb663af3e1c3c.jpg)
假如再一个函数中要来过滤东西,不知道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))
内容总结
以上是互联网集市为您收集整理的Python基础的高阶函数和闭包全部内容,希望文章能够帮你解决Python基础的高阶函数和闭包所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。