python函数、进程
python闭包函数
什么是闭包?
定义多层的嵌套函数,内部函数可以访问外部变量,内部函数作为外部函数的返回,该内部函数称为闭包函数
闭包函数优缺点?
优点:不定义全局变量,可以持续让函数访问和修改一个外部函数
缺点:持续占用内存
nonlocal关键字的作用:
在修改闭包函数中,修改外部函数变量需要nonlocal声明为外部变量
#例如不使用闭包函数
yuge = 0
def atm(num,diposit=True):
global yuge
if posipt:
yuge+=num
print('存款金额为{},余额+{}'.format(num,yuge))
else:
yuge-=num
print('取款金额为{},余额-{}'.format(num, yuge))
atm(10000)
atm(10000)
atm(1000,posipt=False)
# 使用闭包函数
def outer(yuge=0):
def inner(num,diposit=True):
nonlocal yuge
if diposit:
yuge+=num
print(f"存款金额为+{num},余额为{yuge}")
else:
yuge-=num
print(f"存款金额为-{num},余额为{yuge}")
return inner
fn1 = outer()
fn1(100000)
fn1(100000)
fn1(1000,diposit=False)
python装饰器
装饰器?
装饰器本质上也是闭包函数,在闭包函数中调用目标函数,作用是不修改目标函数的代码的基础上,增加目标函数额外的功能
def outer1(func):
def inner():
print('安静---')
func()
print('恢复安静--')
return inner
@outer1
def test001():
print('测试中,有点吵闹')
# 装饰器使用
test001()
python设计模式
设计模式:
设计模式是一种编程套路,使用特定的套路得到特定的效果
单例模式:
单例模式就是一个类,只获取唯一的实例对象,持续服用
好处:节省内存,节省创建对象的开销
工厂模式:
将对象的创建由使用原生类本身创建,转换到由特定的工厂方法创建;
好处:
大批量创建对象的使用由统一的入口,便于代码维护
当发生修改时,仅修改工厂类的创建方法即可
符合现实世界模式,由工厂来制作产品(对象)
#单例模式
class test01():
pass
test_01 = test01() # 先初始化然后其它python文件中调用test_01即可;
#工厂模式
class A:
pass
class b(A):
pass
class c(A):
pass
class d(A):
pass
class fectoty():
def test_start(self,op):
if op==b:
return b()
elif op ==c:
return c()
else:
return d()
t = fectoty()
t.test_start('b')
t.test_start('c')
t.test_start('d')
进程
进程:
一个进程包含多个线程;
进程比如:一个公司,管理员工干活
线程:
实际的执行者
线程比如:公司员工,干活人
import threading
import time
# 多线程运行
def test1(msg):
# for i in range(1,10009009090):
print(msg)
time.sleep(3)
print(msg)
def test2(msg):
for i in range(1,11):
print(msg)
f1=threading.Thread(target=test1,args=('打篮球----',)) # ,表示为元组,
f2=threading.Thread(target=test2,kwargs={"msg":"打排球---"}) # 表示键值对传参
#运行两个线程,如果不使用多线程,那么按函数的执行顺序,
#会先执行完test1再执行test2,开多线程可以同时运行
f1.start()
f2.start()