Python基础09——全局变量与局部变量、内部函数、闭包、装饰器、匿名函数等

本文介绍了Python中的全局变量和局部变量的概念,以及如何在内部函数中修改不可变类型变量。深入探讨了闭包的三要素、优缺点和应用场景。同时,解释了装饰器的实现原理,它利用闭包的特点,可以在不修改原函数的基础上扩展功能。此外,还提到了匿名函数,即lambda表达式的使用方式。
摘要由CSDN通过智能技术生成

全局变量:顾名思义,全局变量就是在函数外部定义的变量,在函数内部可以查看,即可以打印,且可以再整个文件中都可以使用,可变的如list,dict,set,在函数内部想要修改直接修改即可,但想int,str,tuple等不可变的类型的变量想要在内部函数修改时则需要使用global 变量名来进行定义

局部变量:只能在自己函数定义内使用,出去函数则无法使用,当为嵌套函数时,如果想在内层函数里改变外部函数里定义的不可变变量时,则需要使用nonlocal 变量名来定义后才能进行更改

内部函数:

即函数内嵌套函数

def 函数名():

 内容

 def 函数名():

  内容

闭包:

三要素:

1.外部函数定义了内部函数

2.外部函数要有返回值,返回值为内部函数名

3.内部函数引用了外部函数的变量

格式为:

def 外部函数名()pass

 def 内部函数名()pass

return 内部函数名
闭包的优缺点:

缺点:作用域不明显,闭包占用的内存资源不会被垃圾回收机制回收,所以比较耗资源

优点:延长了作用域,读取其他元素的内部变量,能使用同级的作用域,使代码变得整洁,便于阅读

装饰器使用闭包的原理

装饰器:

1.外部函数定义了内部函数

2.外部函数要有返回值,返回值为内部函数名

3.内部函数引用了外部函数的变量

4.装饰器要用函数作为外层函数的参数

装饰器时将你原来的函数添加到了一个嵌套的新函数中,返回的是一个函数,这个函数已经不是原来的函数,而是经过改变后的函数。你可以在不用修改原来函数的基础上调用原函数而产生与原来函数不同的效果

为什么不用嵌套函数而用装饰器:自己理解是如果用嵌套函数,那么你最后调用则需要用嵌套函数,而不是原函数,相当于你新写了一个函数,而使用装饰器你就可以直接调用原函数

如:

使用装饰器:
在这里插入图片描述

使用函数内调用函数:
在这里插入图片描述

这里最后调用调用的是一个新函数而不是原来的函数,且如果需要更改则需要再重新定义一个新函数

当装饰器也需要传参数的时候则在装饰器外再加一层嵌套即可

为什么装饰器要使用两层嵌套?

1.因为装饰的函数可能需要传参数

2.因为装饰器的作用是当调用被装饰的函数时装饰器里的内容才会生效,而不是无论是否调用被装饰的函数,装饰器的内容都会生效

作用域:LEGB

L:local 局部变量

E:enclosing 嵌套

G:global 全局

B:build in 内置函数库

匿名函数:

lambda表达式

lambda 变量名:内容

max(变量名,lambda)

min(变量名,lambda)

sorted(变量名,key=lambda,reverse=True or False)

ruduce(lambda,变量名):需要导入 from functools import reduce

filter(lambda ,变量名)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值