Python 第五天(装饰器,函数闭包和进程)

装饰器

最简装饰器

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")

运行结果
运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值