日报5.11

高阶函数

什么是高阶函数

1,接收的参数,是一个函数名(是一个函数的引用)

2,函数的返回值,是一个函数名

满足任一条,就是高阶函数

情况一

"""
高阶函数之,函数接收的参数是一个函数名
"""

def eat():
    print('吃肉')


def func(f):
    # f = eat
    f()  # eat()
    
func(eat)

情况二

"""
高阶函数之,函数的返回值是一个函数名
"""
def run():
    print('在跑')

def eat():
    print('吃肉')
    return run


r = eat()  # r = run
r()  # run()

函数名的本质

函数名本质就是一个标识符

函数体才是函数的本体

函数名会指向函数本体

如果把一个函数名赋值给另一个变量

那么通过这个变量加上括号

也可以调用函数

1557449949935

例子

def func():
    print('这是func函数')

m = func
m()

n = m
n()

f = n
f()

C:\Users\python_hui\Anaconda3\python.exe G:/untitled2/43/t1高阶函数/main.py
这是func函数
这是func函数
这是func函数

Process finished with exit code 0

函数的嵌套

函数里面定义函数

"""
函数的嵌套
"""

def cat():
    def run():
        print('在跑')
    run()

cat()

闭包

首先给出闭包函数的必要条件:

  • 闭包函数必须返回一个函数名
  • 闭包函数返回的那个函数必须引用父级函数变量(一般不能是全局变量)

闭包

1,它是一个高阶函数

因为外部的函数返回值是一个函数名(内部函数)

2,它是一个函数的嵌套

外部函数里面又定义了内部函数

3,内部的函数要用到外部函数的局部变量

闭包模型

def outer():
    name = "张三"
    def inner():
        print(name)
    return inner   # 高阶函数

m = outer()
m()

局部变量的两种形态

局部变量的特点

生命,从函数执行,到函数结束

形态1,函数内部直接通过赋值方式定义的变量

它就是一个局部变量

本例中的age就是一个函数中的局部变量

def func():
    age = 18
    print(age)


func()

形态2,通过形参方式接收的数据也是局部变量

本例中的age就是一个局部变量

实参的数据赋给形参的过程

就相当于,在函数的内部定义

age = 18

最终的效果和形态一是一样的

def func(age):
    print(age)

func(18)

外部函数带参数的闭包

def outer(name):
    # name = "吕布"
    def inner():
        print(name)
    return inner

m = outer("吕布")
m()

三层函数闭包

def func():
    name = "李白"
    def outer(name):
        def inner():
            print(name)
        return inner
    return outer

name = "赵云"

f = func()
o = f(name)
o()
def func(age):
    def outer(name):
        def inner():
            print(name)
            print(age)
        return inner
    return outer

f = func(18)
o = f("刘备")
o()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值