python进阶——装饰器

本文主要介绍了Python编码规范,包括缩进、行长限制、导入模块的方式、空格使用等,并深入探讨了*与**的区别、赋值与引用、copy与deepcopy、迭代器与生成器的工作原理。特别强调了装饰器的使用,以及如何利用装饰器传参。通过实例展示了装饰器在处理验证码验证场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:python编码规范:
1、逢冒必缩:缩进4个空格或一个tab键
2、行长80:防止单行逻辑过于复杂
3、不使用from xxx import *
4、单行不要import 多个包,用不到的包不用import
5、空格使用:二元操作符前后各一个空格,冒号、逗号、分号后面都加一个空格
6、添加空行:函数间、函数内、文件结尾。
7、注释:
(1)忌逐行添加注释或者没有一个注释。
(2)行内注释
(3)块注释
(4)引入外来算法或者配置时需在注释中添加源链接,标明出处
8、命名:
(1)不用单字母的变量名
(2)包名、模块名、函数名、方法名全部使用小写,单词用下划线连接
(3)类名、异常名使用驼峰式命名
(4)全局变量劲量使用大写
二:
1、*与**的区别:*传递的是元组,**传递的是字典

def foo(*args, **kwargs):
pass

2、python的赋值与引用:== \ is
==:判断的是值,is:判断的是内存地址(对象的id)
3、copy与deepcopy的区别:copy:只拷贝表层元素,而deepcopy在内存中重新创建所有子元素
4、迭代器与生成器:
iter :是返回迭代器本身
next :是返回容器中的下一个值
generator:生成器是一种特殊的迭代器,不需要自定义__iter__与__next__
注:
(1)生成器函数(yield)
(2)迭代器与生成器的好处:节省内存,惰性求值
5、装饰器:

(最简装饰器)
def deco(func):
    def wrap(*args, **kwargs):
        return func(*args, **kwargs)
    return wrap

    
@deco
def foo(a, b):
    return a ** b

6、函数闭包:引用了自由变量的函数

def deco(func):
    def wrap():
        print('登录失败!')
        return func()
    return wrap

@deco
def foo():
    print('wangjialu')

foo()

利用装饰器传参

装饰器的作用是求和
本函数的作用是打印这俩个数字的和
def deco(func):
    def wrap(num1,num2):
        sum_ = num1+num2
        #print('登录失败!')
        return func(sum_,num2)
    return wrap

@deco
def foo(name,name2):
    print(name)

foo(30,50) 
执行结果:

在使用装饰器的情况下,无论你输入什么验证码到返回验证码错误

import random 
def deco(func):
    def warp(n1,n2):
        n1=-1
        return func(n1,n2)
    return warp

@deco
def AA(n1,n2):
    if n1==n2:
        print('验证码正确')
    else:
        print('验证码错误')

num = random.randrange(1000,9999)
print('验证码是:%d' %num)
num2=int(input('>>'))
AA(num,num2)
执行结果:
验证码是:9753
>>9753
验证码错误

在使用装饰器的情况下,无论你输入什么验证码到返回验证码错误,如果不使用装饰器,该正确就打印正确

import random 
def deco(func):
    def warp(n1,n2):
        #n1=-1
        return func(n1,n2)
    return warp

@deco
def AA(n1,n2):
    if n1==n2:
        print('验证码正确')
    else:
        print('验证码错误')

num = random.randrange(1000,9999)
print('验证码是:%d' %num)
num2=int(input('>>'))
AA(num,num2)
执行结果:
验证码是:1720
>>1720
验证码正确

使用join()阻塞主进程,先执行子进程

import multiprocessing
def A():
    print('hello world')

if __name__ == "__main__":
    p = multiprocessing.Process(target=A,args=())
    p.start()
    p.join()
    print('game over')
执行结果:
hello world
game over

os.getpid()获取当前进程id
os.getppid()获取父进程id

import multiprocessing
import os
def A(name):
    print(os.getpid)
    print(name)

if __name__ == "__main__":
    p1 = multiprocessing.Process(target=A,args=('wangjialu',))
    p2 = multiprocessing.Process(target=A,args=('wangjialu2',))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print('lalalala')
执行结果:
<built-in function getpid>
wangjialu
<built-in function getpid>
wangjialu2
lalalala
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值