装饰器
最简装饰器
def deco(func):
def wrap(*args, **kwargs):
return func(*args, **kwargs)
return wrap
@deco
def foo(a, b):
return a ** b
例子
def deco(func):
def warp(n1,n2):
n = n1 + n2
return func(n,n2)
return warp
@deco
def A(num1,num2):
print(num1)
A(10,20)
运行结果
# 验证码
import random
def deco2(parms):
def deco(func):
def warp(*args,**kwargs):
if parms:
kwargs["n1"] = -1
return func(*args,**kwargs)
return warp
return deco
@deco2(True)
def A(n1,n2):
if n1 == n2:
print("验证码正确")
else:
print("验证码错误")
def yzm():
x = random.randint(1000,9999)
print("验证码是:",x)
num = eval(input("请输入验证码:"))
A(n1 = x,n2 = num)
yzm()
运行结果
函数闭包
引用了自由变量的函数即是一个闭包。这个被引用的自由变量和这个函数一同存在,即使已经离开了创造它的环境也不例外。
例子
def foo():
l = []
def bar(i):
l.append(i)
return l
return bar
if __name__ =="__main__":
f1 = foo()
f2 = foo()
print(f1(1))
print(f1(2))
print(f2(3))
# 5秒内IP的请求次数
import time
TIME1 = 0
TIME2 = 0
def check_ip(func):
def warp(*args,**kwargs):
if round(abs(TIME2 - TIME1),3) < 0.5:
print(404)
else:
return func(*args,**kwargs)
return warp
@check_ip
def A(ip):
print("成功")
# 模拟请求
for _ in range(50):
ip = '127.0.0.1'
TIME1 = time.time()
A(ip)
TIME2 = time.time()
time.sleep(1)
进程
进程就是操作系统中执行的一个程序,操作系统以进程为单位分配存储空间,每个进程都有自己的地址空间、数据栈以及其他用于跟踪进程执行的辅助数据,操作系统管理所有进程的执行,为它们合理的分配资源。
- 单进程(args传入元组形式)
import multiprocessing
def A():
print("hello")
if __name__ =="__main__":
#创建进程
p = multiprocessing.Process(target = A,args = ())
p.start() #启动进程
p.join()
print("over")
运行结果
- 多进程
import multiprocessing
import os
def A(name):
print(os.getpid())
print(name)
if __name__ =="__main__":
#创建进程
p1 = multiprocessing.Process(target = A,args = ('hahaha',))
p2 = multiprocessing.Process(target = A,args = ('heiheihei',))
p1.start() #启动进程
p2.start()
p1.join()
p2.join()
print("ok")
运行结果