python函数编写1到100所有偶数和(外婆都能学会的Python教程(二十六):Python中的函数式编程)python初学 / python在函数式编程中的实践...

wufei123 发布于 2024-06-04 阅读(16)

前言Python是一个非常容易上手的编程语言,它的语法简单,而且功能强大,非常适合初学者学习,它的语法规则非常简单,只要按照规则写出代码,Python解释器就可以执行下面是Python的入门教程介绍一下Python编程中的函数式编程,。

外婆看完都学会了,你也来看看吧!高阶函数定义:接收函数作为参数,或者把函数作为结果返回的函数是高阶函数,高阶函数可以把函数作为参数传入另一个函数,这样的函数称为回调函数map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

python函数编写1到100所有偶数和(外婆都能学会的Python教程(二十六):Python中的函数式编程)python初学 / python在函数式编程中的实践...

reduce()函数接收两个参数,一个是函数,一个是Iterable,reduce把结果继续和序列的下一个元素做累积计算filter()函数接收一个函数和一个序列,把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

sorted()函数可以对list进行排序,还可以接收一个key函数来实现自定义的排序,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序例子:# map()函数deff

(x):return x * x # r是一个Iterator,Iterator是惰性序列,通过list()函数让它把整个序列都计算出来并返回一个list# 就是说把f(x)作用在list的每一个元素并把结果生成一个新的list

r = map(f, [1, 2, 3, 4, 5]) print(list(r)) # [1, 4, 9, 16, 25]# reduce()函数from functools import reduce

defadd(x, y):return x + y # reduce把结果继续和序列的下一个元素做累积计算 print(reduce(add, [1, 3, 5, 7, 9])) # 25# filter()函数

defisEven(n):return n % 2 == 0# filter()函数返回的是一个Iterator,也就是一个惰性序列,就是将isEven函数作用于list的每一个元素,过滤出符合条件的元素

print(list(filter(isEven, [1, 2, 4, 5, 6, 9]))) # [2,4,6]# sorted()函数# sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序

# key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序 print(sorted([36, 5, -12, 9, -21])) # [-21, -12, 5, 9, 36]

# key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序 print(sorted([36, 5, -12, 9, -21], key=abs)) # [5, 9, -12, -21, 36]

# 字符串排序,是按照ASCII的大小比较的,由于Z < a,结果,大写字母Z会排在小写字母a的前面 print(sorted([bob, about, Zoo, Credit])) # [Credit, Zoo, about, bob]

# 忽略大小写的排序 print(sorted([bob, about, Zoo, Credit], key=str.lower)) # [about, bob, Credit, Zoo]# 反向排序,不必改动key函数,可以传入第三个参数reverse=True

print(sorted([bob, about, Zoo, Credit], key=str.lower, reverse=True)) # [Zoo, Credit, bob, about]返回函数

定义:高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回例子:# 正常的一个求和函数defcalc_sum(*args): res = 0for n in args: res += n 。

return res # 返回求和函数的函数定义deflazy_sum(*args):defsum(): res = 0for n in args: res += n

return res return sum # 调用lazy_sum()时,返回的并不是求和结果,而是求和函数 f = lazy_sum(1, 2, 3, 4) print(f) #

# 调用函数f时,才真正计算求和的结果 print(f()) # 10闭包:在函数lazy_sum中又定义了函数sum,并且内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”

闭包的特点:返回的函数并没有立刻执行,而是直到调用了f()才执行匿名函数定义:匿名函数就是不需要显式地定义函数,直接传入函数的参数和计算逻辑用lambda关键字表示匿名函数,例如lambda x: x * x冒号前面的x表示函数参数,冒号后面的x * x表示函数的返回值。

例子:# 匿名函数print(list(map(lambdax:x*x,[1,2,3,4,5])))# [1, 4, 9, 16, 25]# 匿名函数也可以赋值给一个对象f=lambda x:x*xprint(list(map(f,[1,2,3,4,5])))

# [1, 4, 9, 16, 25]装饰器定义:在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)本质上,decorator就是一个返回函数的高阶函数在打印日志时,可以使用装饰器来对函数进行装饰,使得打印日志的功能可以复用。

例子:# 定义一个打印日志的装饰器,其中参数func是一个函数对象,返回值也是一个函数对象deflog(func):defwrapper(*args, **kw): print(call %s():

% func.__name__) return func(*args, **kw) return wrapper #调用log装饰器@logdefsum(x, y):return

x + y #调用sum函数,相当于调用了log(sum) print(sum(1,2)) # call sum(): 3偏函数定义:Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。

偏函数用来固定一个函数的某些参数,返回一个新的函数作用:当函数参数太多需要简化时,可以创建一个偏函数,固定住其中的一些参数,从而在调用时更简单例子:# int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换。

print(int(12345)) # 12345# 但int()函数还提供额外的base参数,默认值为10如果传入base参数,就可以做N进制的转换print(int(12345, base=8))

# 5349print(int(12345, 16)) # 74565# 定义一个int2()函数,默认把base=2传进去 def int2(x, base=2): returnint(x, base)

print(int2(1000000)) # 64print(int2(1010101)) # 85# functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2

import functools int2 = functools.partial(int, base=2) print(int2(1000000)) # 64# 创建偏函数时,实际上可以接收函数对象、*args和**kw这3个参数

int2 = functools.partial(int, base=2) # 实际上可以接收函数对象际上固定了int()函数的关键字参数baseprint(int2(100)) # 4 kw = {

base: 2 } print(int(100, **kw)) # 4# 当传入:时,实际上会把10作为*args的一部分自动加到左边,也就是: max2 = functools.partial(max,

10) print(max2(5, 6, 7)) # 10# 相当于: args = (10, 5, 6, 7) print(max(*args)) # 10结束寄语恭喜你看完这篇Python教程,你已经超过99%的人了,学习编程一定要系统学习,关注我带你快速入门Python,提高工作效率!

喜欢就关注我给我点个赞吧,精彩内容会第一时间推送给你。有问题可以回复或私信我,看到我会给你耐心解答!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻79909