python3函数_python3之函数

一、闭包

1.闭包的概念(维基百科)

在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。

上面提到了两个关键的地方: 自由变量 和 函数, 这两个关键稍后再说。还是得在赘述下“闭包”的意思,望文知意,可以形象的把它理解为一个封闭的包裹,这个包裹就是一个函数,当然还有函数内部对应的逻辑,包裹里面的东西就是自由变量,自由变量可以在随着包裹到处游荡。当然还得有个前提,这个包裹是被创建出来的。

在Python中,一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量。

实例一:

defline_config(content, lenth):defline():print('-'*(lenth//2)+content+'-'*(lenth//2))returnline

line1= line_config('闭包', 40)

line1()

line1()

G:\超哥\python3编程\python3基础\venv\Scripts\python.exe G:/超哥/python3编程/python3基础/python函数.py

--------------------闭包--------------------

--------------------闭包--------------------

注意事项:

1)闭包中,若修改引用的外层变量,需要使用 nonlocal变量声明,否则当做是闭包内新定义的变量

2)当闭包内引用了一个后期会发生变化的变量时,一定要注意

实例二:

deftest():

num= 10

deftest1():

num= 66 #不改变外部变量值

print(num)print(num)

test1()print(num)returntest1

result= test()

G:\超哥\python3编程\python3基础\venv\Scripts\python.exe G:/超哥/python3编程/python3基础/python函数.py

10

66

10

若想改变外部变量值,需添加nonlocal

实例三:

deftest():

num= 10

deftest1():

nonlocal num

num= 66

print(num)print(num)

test1()print(num)returntest1

result=test()

G:\超哥\python3编程\python3基础\venv\Scripts\python.exe G:/超哥/python3编程/python3基础/python函数.py10

66

66

实例三:

deftest():

funcs=[]for i in range(1, 4):deftest1():print(i)

funcs.append(test1)returnfuncs

newFuncs=test()print(newFuncs)

newFuncs[0]()

newFuncs[1]()

newFuncs[2]()

G:\超哥\python3编程\python3基础\venv\Scripts\python.exe G:/超哥/python3编程/python3基础/python函数.py

[.test1 at 0x000001F59E5E4C80>, .test1 at 0x000001F59E5E4D08>, .test1 at 0x000001F59E5E4BF8>]3

3

3

实例四:

deftest():

funcs=[]for i in range(1, 4):deftest1(num):definner():print(num)returninner

funcs.append(test1(i))returnfuncs

newFuncs=test()

newFuncs[0]()

newFuncs[1]()

newFuncs[2]()

G:\超哥\python3编程\python3基础\venv\Scripts\python.exe G:/超哥/python3编程/python3基础/python函数.py1

2

3

二、装饰器

#装饰器

defchecklogin(func):definner():print('登录验证')

func()returninner

@checklogindeffss():print('发说说')

@checklogindefftp():print('发图片')

flag= 2

if flag == 1:

fss()else:

ftp()

G:\超哥\python3编程\python3基础\venv\Scripts\python.exe G:/超哥/python3编程/python3基础/python函数.py

登录验证

发图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值