当前位置: 首页 > news >正文

python 语法

闭包

在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。

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 innerFunc@outfunc
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(f"pigtype={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(target=game)
musicThread = threading.Thread(target=music)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(target=game,args=("进攻敌方防御塔",))
musicThread = threading.Thread(target=music, kwargs={"msg":"对面的女孩 看过来"})gameThread.start()
musicThread.start()
time.sleep(1000000)

http://www.lryc.cn/news/279153.html

相关文章:

  • Mac下载Navicat premium提示文件损坏的解决方案
  • 算法——贪心法(Greedy)
  • VmWare虚拟机的安装
  • Vue.js轻量级框架:快速搭建可扩展的管理系统
  • Android-多线程
  • sqlalchemy 监听所有实体插入以及更新事件
  • go怎么结束很多个协程呢
  • springboot 项目访问静态资源遇到的问题,WebMvcConfigurer和WebMvcConfigurationSupport
  • Nginx配置负载均衡实例
  • 【算法题】50. Pow(x, n)
  • K8S动态PV
  • 逆变器2(原理框图)
  • ERA5合集,使用ERA5得到GNSS站点的温度,气压,水汽压,Tm和PWV合集,可以求五个参数
  • c#让三个线程按照顺序执行
  • AWS Directory Service 开启ldaps
  • Seata 以 Nacos 为注册中心启动
  • Unity填坑-灯光烘焙相关
  • 【python】TCP测速程序
  • 新书速览|从零开始大模型开发与微调:基于PyTorch与ChatGLM
  • 边缘计算:连接实时数据的力量与未来发展之路
  • ZooKeeper 实战(四) Curator Watch事件监听
  • Spring Boot 构建工具插件
  • Java集成消息队列Kafka
  • 第十四章JSON
  • 0_项目git地址——正点原子minifly与crazyflie
  • php 字符串常用函数
  • Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(2)
  • FlinkOnYarn 监控 flink任务
  • C++内存管理机制(侯捷)笔记1
  • 【论文阅读】Non-blocking Lazy Schema Changes in Multi-Version