python之装饰器、模块调用、 OS

一、装饰器

        装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。. 它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,装饰器是解决这类问题的绝佳设计。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。. 概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。. 先来看一个简单例子,虽然实际代码可能比这复杂很多

     下面结合装饰器还是函数的知识体系,来写一个案例的实战。在一个系统的后台系统中,只要访问后台系统,都得需要进行登录,登录成功了就可以访问后台系统,登录不成功是不可以访问的,下面具体看实现的代码:

#未用装饰器之前的代码

 

#未用装饰器前的代码
dict1={'islogin':False}
def login():
    '''登录'''
    username=input('请输入用户名:\n')
    password=input('请输入密码:\n')
    if username=='caiying' and password=='admin':
        dict1['islogin']=True
        print('恭喜您登录成功')
    else:
        return False
def order():
    '''查看订单明细'''
    if dict1['islogin']:
        print('你已经授权查看公司所有的账单明细')
    else:
        print('请登录系统')

def admin():
    '''后台查看公司的核心数据'''
    if dict1['islogin']:
        print('你已经授权查看公司核心数据')
    else:
        print('请登录系统')

def main():
    while True:
        f=int(input('1、登录 2、订单明细 3、核心数据 4、其他 \n'))
        if f==1:
            login()
        elif f==2:
            order()
        elif f==3:
            admin()
        elif f==4:
            break
main()
View Code

 

#用了装饰器之后的代码

#用了装饰器的
dict1={'islogin':False}

def outer(func): #装饰器函数
    def inner():
        if dict1['islogin']:
            return func()
        else:
            print('请登录系统')
    return inner

def login():
    '''登录'''
    username=input('请输入用户名:\n')
    password=input('请输入密码:\n')
    if username=='caiying' and password=='admin':
        dict1['islogin']=True
        print('恭喜您登录成功')
    else:
        return False
@outer
def order(): #被装饰的函数
    '''查看订单明细'''
    print('你已经授权查看公司所有的账单明细')

@outer
def admin(): #被装饰得函数
    '''后台查看公司的核心数据'''
    print('你已经授权查看公司核心数据')

def main():
    while True:
        f=int(input('1、登录 2、订单明细 3、核心数据 4、其他 \n'))
        if f==1:
            login()
        elif f==2:
            order()
        elif f==3:
            admin()
        elif f==4:
            break
main()
View Code

 

 

对如上的代码进行逐步的解释:

 

  • a.自动执行outer函数并且将下面的函数名fun当作参数来传递
  • b.将outer的函数返回值(变量或是函数),重新赋值给fun;
  • c.一旦结合装饰器后,调用fun其实执行的是inner内部的函数,原来的fun被覆盖
  • d.一旦这个函数被装饰器装饰后,被装饰的函数重新赋值成装饰器的内层函数
 
它执行的顺序具体为:
先执行outer的函数 
再执行内部函数inner
下来执行到inner函数的返回值
再具体到inner的函数,执行inner函数里面的表达式

二、模块调用

在Python里面,每一个Python文件都是一个模块,在一个包中可以包含多个Python文件,包与模块的关系具体如下:

 

 

 

不同的Python文件模块之间互相调用,它的方式为:

 

1.使用import关键字导入     

2.from 包.被调用的模块 import *(函数/变量)

#调用其他模块里面的函数和变量
#import
import caiying.second.logout
caiying.second.logout.funlogout() #调用函数
print(caiying.second.logout.name) #调用变量
#from xxx import *(函数/变量)  
from caiying.second.logout import *
funlogout() #调用函数
print(name) #调用变量

三、常用库

1.在python里面,常用的库分为如下两类:
  • 标准库:安装了Python的解释器,解释器内部自动带的 如:unittest,os,sys,hashlib,time
  • 第三方的库,由很多的顶级程序员开发的,需要额外的安装 如:selenium,flask,django,requests
2.安装方式:
在线:命令安装(在终端) 一般选这种方式

离线:下载包
3.在线安装的命令如下:
安装:pip3 install 第三方库的名称
        pip3 install pytest 
        pip3 install flask
        pip3 install django
        pip3 install requests
        pip3 install pymysql
        pip3 install xlrd
        pip3 install selenium3
卸载:pip3 uninstall  第三方库的名称

四、OS
os模块主要是对路径的处理,它的具体的案例实战如下:

import os
#获取当前路径
print(os.path.dirname(__file__))
#获取当前路径的上一级目录
print(os.path.dirname(os.path.dirname(__file__)))
#输入控制台的命令
print(os.system('lsof -i:3306'))
#获取目录下所有的文件
for item in os.listdir('/usr/local'):
    print(item)
# 获取目前使用的操作系统
print(os.name)
#路径的拼接. 自动获取路径
base_dir=os.path.dirname(os.path.dirname(__file__))
logpath=os.path.join(base_dir,'testdev','log.txt')
f=open(logpath,'r')
print(f.read())
f.close()

 

posted @ 2021-11-25 19:09  Cyyy-  阅读(113)  评论(2)    收藏  举报