目录
一、函数参数
二、闭包
三、装饰器
一、函数参数
python
def func01():
print("func01 shows as follows")
func01()
# 函数名存放的是函数所在空间的地址
print(func01)#<function func01 at 0x0000023BA9FC04A0>
func02=func01
print(func02)#<function func01 at 0x0000023BA9FC04A0>
func02()
print('-'*30)
def foo(func):
func()
foo(func01)
这段代码的运行结果如下:


可以得到这样的结论;
函数名存放的是函数所在空间地址;
函数名()执行函数名所存放空间地址中的代码。

func01 =func02函数名可以像普通变量一样赋值,func01() 等价于 func02(),也可以作为参数去使用。
二、闭包
我们知道当函数调用完,函数内定义的变量都销毁了,但是我们有时候需要保存函数内的这个变量,每次在这个变量的基础上完成一系列的操作,比如: 每次在这个变量的基础上和其它数字进行求和计算,那怎么办呢?就可以通过闭包来解决这个需求。
闭包
定义:在函数嵌套的前提下,内部函数使用了外部函数的变量, 并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。
作用:闭包可以保存函数内部的变量,不会随着函数的调用完而销毁。
构成条件:①在函数嵌套(函数里面再定义函数)的前提下 ②内部函数使用了外部函数的变量(还包括外部函数的参数) ③外部函数返回了内部函数。
如下代码:
python
'''
闭包
定义:
在函数嵌套的前提下,内部函数使用了外部函数的变量,
并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。
作用:
闭包可以保存函数内部的变量,不会随着函数的调用完而销毁。
构成条件:
①在函数嵌套(函数里面再定义函数)的前提下
②内部函数使用了外部函数的变量(还包括外部函数的参数)
③外部函数返回了内部函数
'''
#1.在函数嵌套(函数里面再定义函数)的前提下
def func_out(num1):
#2.内部函数使用了外部函数的变量(还包括外部函数的参数)
def func_inner(num2):
num=num1+num2
print(f'num现在的值:{num}')
#3.外部函数返回了内部函数
return func_inner
f=func_out(10)
f(1)
f(2)
运行结果:

解释:
结论:闭包可以对外部函数的变量进行保存。
闭包的使用:
python
def config_name(name):
def say_info(info):
print(name+':',info)
return say_info
Tom=config_name('Tom')
Tom('你好!')
Tom('你吃饭了吗?')

闭包不仅可以保存外部函数的变量,还可以提高代码的复用性。