day23单例模式 , 日志处理 , 项目结构目录
# day23笔记 ## 一.补充,作业 ### 1.字符串格式化 ```python
msg = "我是%(n1)s,年龄%(n2)s" % {'n1': 'alex', 'n2': 123, }
print(msg)
``` ```python
# v1 = "我是{0},年龄{1}".format('alex',19)位置参数
v1 = "我是{0},年龄{1}".format(*('alex',19,))
print(v1) # v2 = "我是{name},年龄{age}".format(name='alex',age=18)关键字参数
v2 = "我是{name},年龄{age}".format(**{'name':'alex','age':18})
print(v2)
``` ### 2.有序字典 ```python
from collections import OrderedDict info = OrderedDict()
info['k1'] = 123
info['k2'] = 456 print(info.keys())
print(info.values())
print(info.items())
``` ### 3.反射 ```python
class Cloud(object): def upload(self):
pass def download(self):
pass def run(self):
# up|C:/xxx/xxx.zip
# down|xxxx.py
value = input('请用户输入要干什么?')
action = value.split('|')[0]
# 最low的形式
if action == 'up':
self.upload()
elif action == 'down':
self.download()
else:
print('输入错误') # 构造字典 (*)
method_dict = {'up':self.upload, 'down':self.download}
method = method_dict.get(action)
method() # 反射(*)
method = getattr(self,action) # upload/download(方法名)
method()
``` ## 二.单例模式(23种) - 无论实例化多少次,永远用的都是第一次实例化出的对象. - 标准(单例类名用Singleton) ```python
class Singleton(object):
instance = None
def __new__(cls, *args, **kwargs):
if not cls.instance:
cls.instance = object.__new__(cls)
return cls.instance obj1 = Singleton()
obj2 = Singleton() # 不是最终,还有加锁。
``` - 文件的连接池 ```python
class FileHelper(object):
instance = None
def __init__(self, path):
self.file_object = open(path,mode='r',encoding='utf-8') def __new__(cls, *args, **kwargs):
if not cls.instance:
cls.instance = object.__new__(cls)
return cls.instance obj1 = FileHelper('x')
obj2 = FileHelper('x')
``` ## 三.模块导入 - 多次导入重新加载 ```python
import jd # 第一次加载:会加载一遍jd中所有的内容。
import jd # 由已经加载过,就不在加载。
print(456)
``` ## 三.模块导入 - 非要加载的话 ```python
import importlib
import jd
importlib.reload(jd)
print(456)
``` - 通过模块导入实现单例模式: ```python
# jd.py
class Foo(object):
pass obj = Foo()
``` ```python
# app.py
import jd # 加载jd.py,加载最后会实例化一个Foo对象并赋值给obj
print(jd.obj)
``` ## 四.日志(logging) - 日志处理本质 : Logger/FileHandler/Formatter - 处理日志方式 : ```python
import logging file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',)
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
handlers=[file_handler,],
level=logging.ERROR
) logging.error('你好')
``` - 推荐处理日志方式 + 日志分割 ```python
import time
import logging
from logging import handlers
# file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',)
file_handler = handlers.TimedRotatingFileHandler(filename='x3.log', when='s', interval=5, encoding='utf-8')
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
handlers=[file_handler,],
level=logging.ERROR
) for i in range(1,100000):
time.sleep(1)
logging.error(str(i))
``` - 注意事项 ```python
# 在应用日志时,如果想要保留异常的堆栈信息。
import logging
import requests logging.basicConfig(
filename='wf.log',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=logging.ERROR
) try:
requests.get('http://www.xxx.com')
except Exception as e:
msg = str(e) # 调用e.__str__方法
logging.error(msg,exc_info=True)
``` ## 五.项目结构目录 - 脚本 ```python
import re # 内置函数从短到长
import json
import datetime import xlrd # 第三方放在下面
import requests class 类名(object): # 类
pass def run(): # 函数
pass if __name__ == '__main__': # 主函数
run()
``` - 单可执行文件 ```python
山西-高启芝 2019/4/28 19:58:58
pro # 项目名称总目录
├── app.py # application程序入口
├── config # 配置文件目录
├── db # datebase数据目录
│ └── user.txt
├── lib # 公有性质的模块放置目录
│ └── page.py
└── src # 功能性函数目录
├── account.py # 其他类或函数文件
├── order.py # 其他函数
└── run.py # 主函数文件
``` - 多可执行文件 ```python
pro # 项目名称总目录
├── bin # 程序入口目录
│ ├── admin.py # 管理员入口
│ ├── student.py # 学生入口
│ └── teacher.py # 教师入口
├── config # 配置文件夹
│ └── settings.py # 配置
├── db # datebase数据目录
│ └── user.txt
├── lib # 公有性质的模块放置目录
│ └── page.py
├── log
│ └── test.log
└── src # 功能性函数目录
├── account.py # 其他类或函数文件
├── order.py # 其他函数
└── run.py # 主函数文件 ```
day23单例模式 , 日志处理 , 项目结构目录的更多相关文章
- ReactNative项目结构目录详解
在使用 react-native init TestProject 在新建项目时,会看到如下目录 React Native结构目录 名称 描述 android目录 Android项目目录,包含了使用A ...
- eclipse项目结构目录
文章:eclipse web 项目目录结构 地址:https://blog.csdn.net/Alan_Wdd/article/details/90514928 eclipse web 项目目录结构 ...
- 读懂Android项目结构目录
我们看到下图:当我们创建了第一Android项目的时候有没有被吓到.怎么这么多目录,好头晕啊!没事, 那我们今天就了解一下这些目录是做什么的: src: src 目录是放置我们所有 Java 代码的地 ...
- vuex - 项目结构目录及一些简单配置
首先先正经的来一段官网的"忠告": vuex需要遵守的规则: 一.应用层级的状态应该集中到单个 store 对象中. 二.提交 mutation 是更改状态的唯一方法,并且这个过程 ...
- Android项目结构 以及体系结构
学习Android平台的人一般对Android的平台的应该有点认识 其它的就不多讲了 Android项目一般由以下几个部分构成 以上是一个简单的Android项目结构目录图 1. src 主要是 源 ...
- Maven项目的目录结构+maven的安装与配置
1.首先下载maven,然后配置环境变量,在MyEclipse里面配置maven 2.配置maven的pom.xml文件 3.下载和更新资源 右击项目,有一个Maven4Myeclipse,里面有三个 ...
- Maven项目的目录结构
刚接触Maven没多长时间,实习时在的小公司很不规范,所有web项目都是dynamic web project搭建,没有用到项目构建,管理工具,导致了非常多的重复工作与低效. 先来看看Maven的功能 ...
- ABP架构学习系列一 整体项目结构及目录
本系列是基于aspnetboilerplate-0.8.4.0版本写的,其中原因是由于较高的版本太抽象难以理解和分析,对于还菜菜的我要花更多的时间去学习. abp的源码分析学习主要来源于 HK Zha ...
- dubbo、web应用 项目结构以及发布目录结构
一.dubbo服务项目结构及发布结构 dubbo 服务项目结构 xxxxx-api 接口类和一些DTO 用于供其他项目依赖 需要提供dubbo服务的接口命名 以Facade结尾 (xxxxxFacad ...
随机推荐
- 快速排序实现及其pivot的选取
coursera上斯坦福的算法专项在讲到快速排序时,称其为最优雅的算法之一.快速排序确实是一种比较有效的排序算法,很多类库中也都采用了这种排序算法,其最坏时间复杂度为$O(n^2)$,平均时间复杂度为 ...
- 十款 Chrome 扩展工具,提高前端编码效率
1. 掘金 Chrome 插件 对于开发者来说,比开发过程更重要的,应该要算平时对于开发资源以及技术文章一点一滴的积累了吧.那么,开发者能够在哪里获取需要的技术内容呢?过去,你可能需要在 GitHub ...
- win10怎么进入和退出安全模式?
在Win10系统里同时按下”Win+R“组合按键,在打开的运行对话框里输入命令:msconfig,然后点击确定,如下图所示. 点击打开系统配置窗口,选择引导选项卡,如下图所示. 在引导选项卡窗口下,将 ...
- background问题
1.如果是小图的背景图 background: url("@{images-dir}/homepage/our_pro_2x.png") no-repeat 0 0; backgr ...
- EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?
前言 写过上一篇关于EF Core中读写分离最佳实践方式后,虽然在一定程度上改善了问题,但是在评论中有的指出更换到从数据库,那么接下来要进行插入此时又要切换到主数据库,同时有的指出是否可以进行底层无感 ...
- 前端开发 JavaScript 规范文档
一,规范目的 为提高团队协作效率,便于前端后期优化维护,输出高质量的文档. 二.基本准则 符合web标准,结构表现行为分离,兼容性优良.页面性能方面,代码要求简洁明了有序, 尽可能的减小服务器负载,保 ...
- EXT 设置编辑框为只读
Ext.getCmp("processResult").setReadOnly(ture); //processResult是属性的id,setReadOnly(ture)设置 ...
- Linux centos 推拉、共享、监控的设置的分享
新建四台虚拟机 打开第一台连接shell更改主机名.网卡 backup 1.主机名网卡配置 [root@jytcentos7.6 ~]# hostnamectl set-hostname backup ...
- git常用命令二、:git stash
Git stash 储藏工作现场(当你不得不新建分支,或者切换分支,但是当前工作区的修改并不想提交) git stash Saved working directory and index state ...
- .Net Core 环境下构建强大且易用的规则引擎
本文源码: https://github.com/jonechenug/ZHS.Nrules.Sample 1. 引言 1.1 为什么需要规则引擎 在业务的早期时代,也许使用硬编码或者逻辑判断就可以满 ...