.net网站开发软件,电子商务是什么职业,做网站要好多钱,专业网站制作公司排行闭包
在函数嵌套的前提下#xff0c;内部函数使用了外部函数的变量#xff0c;并且外部函数返回了内部函数#xff0c;我们把这个使用外部函数变量的内部函数称为闭包。
def outfunc(arg):def innerFunc(msg):print(f{msg} {arg} {msg})retu…闭包
在函数嵌套的前提下内部函数使用了外部函数的变量并且外部函数返回了内部函数我们把这个使用外部函数变量的内部函数称为闭包。
def outfunc(arg):def innerFunc(msg):print(f{msg} {arg} {msg})return innerFuncfunc outfunc(尔)
func(沃)
def outfunc(num1):def innerFunc(num2):nonlocal num1num1 num2return num1return innerFunc
func outfunc(10)print(func(20))
print(func(30))
nonlocal关键字的作用
在闭包函数想要修改外部函数变量的值 需要用nonlocal 声明这个外部变量 闭包的优点
无需定义全局变量即可实现通过函数持续的访问修改某个值。
闭包使用的变量的作用域在函数内 难以被错误的调用修改。
缺点
由于内部函数持续引用外部函数的值所以会导致这一部分内存空间不被释放一直占用内存。
装饰器
装饰器也是一种闭包其功能就是在不破坏目标函数原有的代码和功能的前提下为目标函数增加新功能。
def doworking():print(do working)def outfunc(func):def innerFunc():print(开始上班)func()print(下班回家)return innerFuncaction outfunc(doworking)
action()
语法糖
def outfunc(func):def innerFunc():print(开始上班)func()print(下班回家)return innerFuncoutfunc
def doworking():print(do working)doworking()
设计模式
单例模式
程序运行时一个类无论创建多少次 只有一个对象 class DatabaseManager:passdata_manager DatabaseManager()
from singleObj import data_managermanager1 data_manager
manager2 data_manager
print(id(manager1))
print(id(manager2))
工厂模式 class Animal:passclass Dog(Animal):passclass Cat(Animal):passclass Pig(Animal):passclass AnimalFactory:def get_animal(self,type):if type d:return Dog()elif type c:return Cat()elif type P:return Pig()else:return Animal()factory AnimalFactory()
pig factory.get_animal(p)
dog factory.get_animal(d)
cat factory.get_animal(c)wolf factory.get_animal(w)print(fpigtype{type(pig)} dogtype{type(dog)} cattype{type(cat)} wolftype {type(wolf)}) 线程。进程 import time
import threadingdef game():while True:print(进攻敌方防御塔)time.sleep(1)def music():while True:print(对面的女孩 看过来)time.sleep(1)gameThread threading.Thread(targetgame)
musicThread threading.Thread(targetmusic)gameThread.start()
musicThread.start()
time.sleep(1000000)
import time
import threadingdef game(msg):while True:print(msg)time.sleep(1)def music(msg):while True:print(msg)time.sleep(1)gameThread threading.Thread(targetgame,args(进攻敌方防御塔,))
musicThread threading.Thread(targetmusic, kwargs{msg:对面的女孩 看过来})gameThread.start()
musicThread.start()
time.sleep(1000000)