2021-01-05包的用法,及一些常用模块的用法

模块被当做执行文件直接运行的时候,和模块被导入使用时,这个模块有两个名字
被当做执行文件是名字为__main__ 被导入使用时名字是他自己的模块名

首次导入包发生的事情:
1、运行包下的__init__.py文件,创建一个包的名称空间,将__init__.py运行过程中产生的名字全部丢入名称空间里
2、在当前名称空间中得到一个名字aaa,改名字是指向包名称空间

什么是包?
包就是一个文件夹,同时也是一种模块,他可以直接当做模块使用

如何用包?
包其实就是一种拥有模块的文件夹,如果想要使用,正确的导入就可以使用

为什么要用包
为了方便程序设计者管理文件,分门别类的对多个模块进行管理

包的总结:
导包就是就是导入包下的__init__.py文件,所以对__init__.py进行操作就行
包内的导入用相对导入,而且相对导入只能在包内使用,且…不能出包
使用语句中的点代表的是访问属性:
m.n.x----->向m要n,向n要x
而导入语句中的点代表的是路径分隔符的意思
import a.b.c -----> a/b/c, 文件夹下a下有子文件夹b,文件夹b下有子文件或文件夹c
所导入语句中点的左边必须是一个包

包的诞生
并不是一次诞生的,随着功能的增加,产生了多个py文件,为了方便管理才诞生的包
这样包的使用者和设计者用起来都会方便很多

常用模块的使用:
logging
CRITICAL = 50 #FATAL = CRITICAL
ERROR = 40 错误日志
WARNING = 30 #WARN = WARNING 警示日志 提醒运维人员处理问题
INFO = 20 #程序正常运行的信息日志
DEBUG = 10 # 调试日志 软件设计者调试软件,程序运维人员维护软件看的
NOTSET = 0 #不设置

logger是自下而上的,也就是说如果级别越低,放行的内容越多
在这里插入图片描述
logger日志定义模板:

standard_format = '%(asctime)s %(filename)s:%(lineno)d %(name)s %(levelname)s %(message)s'   #正常格式
simple_format = '%(asctime)s %(message)s'    #简单格式
LOGGING_DIC = {
    
    
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
    
    
        'standard': {
    
    
            'format': standard_format
        },
        'simple': {
    
    
            'format': simple_format
        },
    },
    'filters': {
    
    },
    'handlers': {
    
    
        #打印到文件的日志,收集info及以上的日志
        'file1': {
    
    
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': 'a1.log',
            'encoding': 'utf-8',
        },
        'file2': {
    
    
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': 'a2.log',
            'encoding': 'utf-8',
        },
        #打印到终端的日志
        'stream': {
    
    
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
    },
    'loggers': {
    
    
        #logging.getLogger(__name__)拿到的logger配置
        '可以放任何内容,如果不写,则可以接受任何内容': {
    
    
            'handlers': ['file1','file2','stream'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'ERROR', # loggers(第一层日志级别关限制)--->handlers(第二层日志级别关卡限制)
            'propagate': False,  # 默认为True,向上(更高level的logger)传递,通常设置为False即可,否则会一份日志向上层层传递
        },
        '提示日志': {
    
    
            'handlers': ['stream'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG', # loggers(第一层日志级别关限制)--->handlers(第二层日志级别关卡限制)
            'propagate': False,  # 默认为True,向上(更高level的logger)传递,通常设置为False即可,否则会一份日志向上层层传递
        },
    },
}

logger 日志的调用模板:


mport settings
import logging.config

def get_logger(name):
    logging.config.dictConfig(settings.LOGGING_DIC)
    return logging.getLogger(name)
#导入日志模块,同时将日志功能定义为一个函数
logger1 = get_logger("用户交易")
logger1.debug("调试日志")
logger1.info("egon给lxx转了1个亿")
logger1.warning("警告")
logger1.error("错误")
logger1.critical("危机")
调用日志函数

猜你喜欢

转载自blog.csdn.net/givenchy_yzl/article/details/112236098