Python学习day07-匿名函数、函数式、函数式编程(内置函数):map、filter、reduce、part

一、匿名函数

①关键字:lambad
基本格式:lambad 参数:返回值
匿名函数只定义了内容,但是没有函数名,因此定义完之后需要定义一个函数名去接受,
调用函数时,就用定义的函数名去调用

sum=lambda x:x+1
#匿名函数的参数为x,返回值为x+1,然后赋值给sum,sum作为函数名
print(sum(1))
#利用sum调用匿名函数

②注意事项:
(1)匿名函数在参数与返回值之间不允许做其他操作

错误示例
sum=lambda x:x-=10:x
print(sum(1))

(2)匿名函数允许拥有多个参数。
匿名函数如果有多个返回值,必须用()括起来

sum=lambda x,y,z:(x+y+z)
print(sum(1,2,3))	#打印6

二、函数式

函数式:就是用编程语言去实现数学函数。
函数式的三种实例:
(1)不可变:不用变量保存状态,不修改变量

#非函数式
def text1(a):
    a+=1
    return a
#函数式
def text2(b):
    return b+1

(2)函数即变量:函数可以作为参数传递、返回值可以是函数

#函数作为参数传递时:
def foo(n):
    print(n)
def bar(name):
    print('my name is %s' %name)
    
foo(bar)	#打印的是bar的地址
#foo(bar())	#报错,因为bar需要参数
foo(bar('董雨生'))#先执行bar函数打印,然后bar函数返回None作为foo参数传递,foo打印None
#当函数返回值为函数地址时:
def text1():
    print("1")
    def text2():
        print(2)
    return text2
st=text1()
st()	#打印1、2
原因:执行text1()函数打印1并返回text2的函数地址值,
用变量st接住,然后st后面加(),相当于执行text2函数。
等价于:text1()()
===========================================
def text1():
    print("1")
    def text2():
        print(2)
        def text3():
            print(3)
        return text3
    return text2
text1()()()	#打印顺序1、2、3
原因:第一个()执行text1函数并得到text2函数地址值,然后第二个()相当于执行text2函数并
得到text3的地址值,最后第三个()执行text3函数
=======================================
#当函数返回值为函数时:
def text1():
    print("1")
    def text2():
        print(2)
    return text2()
text1()	#打印1、2
原因:text1函数的返回值为text2的函数,相当于执行了text2函数

(3)尾调用(了解即可):在函数的最后一步调用另一个函数(函数的最后一步
不一定是最后一行)

#函数bar在foo内为尾调用
def bar(n):
    return n
def foo(x):
    return bar(x)
#函数bar在foo内为非尾调用:
因为bar要先一个值,然后再+1,最后再返回给foo函数
def bar(n):
    return n
def foo(x):
    return bar(x)+1

三、函数式编程、内置函数

①高阶函数:
1.函数传入的参数是一个函数名。2.函数的返回值是一个函数名
满足以上两个特性中的一个即为高阶函数
②函数式编程的一些内置函数

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/82881235