函数知识点 1.包 2.hashlib模块 --- 摘要算法模块 3.logging模块 4.openpyxl模块 5.深浅拷贝 # 17

函数知识点1.包

 1 # coding(编码系统):utf-8
 2 """
 3 1.模块的三种来源:
 4     1.内置
 5     2.第三方
 6     3.自定义
 7 2.模块的四种表现形式:
 8     1.  .py文件
 9     2.共享文件
10     3.包
11     4.内置
12 3.研究模块和包:
13 # 还可以站在另外两个角度分析:
14     1.模块的开发者
15     2.模块的使用者
16 4.导模块的那一瞬间发生了什么?
17     首先运行执行文件run.py,创建一个run.py的名称空间
18         1.执行文件md,创建一个md的名称空间
19         2.把运行md得到的名字和内容存储到名称空间md中
20         3.返回一个指向执行文件run的名字md(import md)/返回一个指向执行文件run的内容的值的名字money(from md impory money)
21     多次导包不执行,沿用之前得到的结果
22 """
23 """
24 包:
25 1.定义:
26     1.一系列模块文件的结合体,表现在外部即为文件夹
27     2.这个包的内部通常具有一个__init__.py文件
28 2.本质:依然是模块
29
30 """
31 """
32 __init__.py
33 # 我记自己的方法:
34 # import os,sys
35 # sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
36 # from dir.dir1.dir11 import m1,m2,m3
37
38 # 老师的方法:
39 from dir.dir1.dir11.m2 import f2
40 from dir.dir1.dir11.m1 import f1
41 from dir.dir1.dir11.m3 import f3
42 """
43 from dir.dir1 import dir11
44 # ps:在导入语句中 . 的左边肯定是一个包
45 # 方法一:
46 # dir11.m1.f1()  # from m1
47 # dir11.m2.f2()  # from m2
48 # dir11.m3.f3()  # from m3
49 # 方法二
50 dir11.f1()
51 dir11.f2()
52 dir11.f3()
53 """
54 # 导模块的那一瞬间,发生了什么?
55 首先运行执行文件run.py,创建一个run.py的名称空间
56         1.执行包,创建一个包下面的__init__.py的名称空间
57         2.把运行包得到的名字和内容存储到名称空间__init__.py中
58         3.返回一个指向执行文件run的名字settings
59     多次导包不执行,沿用之前得到的结果
60 """
61 """
62 3.研究模块和包:
63 # 还可以站在另外两个角度分析:
64     1.模块的开发者
65     2.模块的使用者
66 """
67 """
68 1.模块的开发者
69 # 1.相对导入
70     1.当模块的功能过多时,需要以文件的形式分类存储,方便管理
71     2.每个模块之间为了避免后期模块改名的问题 你可以使用相对导入(包里面的文件都应该是被导入的模块)
72 # 2.绝对导入
73     1.绝对导入要确认文件的路径,以包的路径为基准依次导入模块
74     2.为确保路径导入正确,要提前把文件路径添加到环境变量中(sys.path.append)
75 """
76 """
77 2.模块的使用者
78 """
79 """
80 python2-python3导包的区别:
81 Python2中导包必须有__init__.py文件,没有会报错
82 python3 导包没有__init__文件,也不会报错,因为Python3自动为包创建了__init__文件,所以在删除不必要文件的时候,千万不要随意删除__init__文件
83 """

2.hashlib模块  --- 摘要算法模块

 1 """
 2 hashlib  加密模块
 3
 4 """
 5 """
 6 格式:
 7 # 导模块
 8 import hashlib  # 这个加密的过程是无法解密的
 9 ## 1.生成一个帮你造密文的对象
10 md = hashlib.md5()
11 ## 2.往对象里传明文数据
12 ps:
13     1.update只能接受bytes类型的数据
14     2.encode(‘utf-8‘) 转码
15 md.update(‘hello‘.encode(‘utf-8‘))
16 ## 2.往对象里传明文数据
17 ps:
18     1.update只能接受bytes类型的数据
19     2.b‘‘转码
20 md.update(b‘[email protected]‘)
21 # 3.加盐
22 md.update(b‘dsfghljl;kl;;fdsrduytfuugiiui‘)
23 ## 4.获取加密数据
24 # print(md.hexdigest())
25 """
26 # 撞库
27 """
28 1.不用的算法 使用方法是相同的
29 密文的长度越长 内部对应的算法越复杂
30 但是
31     1.时间消耗越长
32     2.占用空间更大
33 通常情况下使用md5算法 就可以足够了
34 """
35 """
36 ps:
37 # 传入的内容 可以分多次传入 只要传入的内容相同 那么生成的密文肯定相同
38 """
39 # 函数版本
40 """
41 # 函数版本 ,加密加盐
42 # 动态加盐,
43     一般是把文件的名字或者CPU处理的时间,这些对象加进去,提高安全性
44 """
45 import hashlib
46 def get_pwd(pwd):
47
48     md5 = hashlib.md5()
49     md5.update(b‘hhhh123456hhh‘)
50     md5.update(pwd.encode(‘utf-8‘))
51     md5.update(b‘hhhj123456hgjhfghfhh‘)
52     # md5.update(pwd.encode(‘utf-8‘))
53     return md5.hexdigest()
54 pwd = input(‘pwd>>>:‘)
55 print(get_pwd(pwd))
56
57 """
58 应用场景:
59 1.密码的密文存储
60 2.校验文件内容是否一致
61 """

hashlib 加密加盐


3.logging模块两种日志方法:

 1 """
 2 日志模块:记录流水
 3 """
 4 import logging
 5
 6 # 二.日志的格式
 7 # 1.文件 basicConfig 基本配置
 8 # logging.basicConfig(filename=‘access.log‘,format=‘%(asctime)s - %(name)s - %(levelname)s - %(module)s - %(message)s‘,datefmt=‘%Y-%m-%d %H:%M:%S %p‘,level=10,)
 9 # 2.终端
10 # logging.basicConfig(format=‘%(asctime)s - %(name)s - %(levelname)s - %(module)s - %(message)s‘,datefmt=‘%Y-%m-%d %H:%M:%S %p‘,level=10,stream=True)
11
12 # 一.日志的五个等级,等级类似于:地震的强度
13 # # 1.走马观花,最不重要的信息
14 # logging.debug(‘debug日志‘)  # 10
15 # # 2.普通信息
16 # logging.info(‘info日志‘)  # 20
17 # # 3.警告信息
18 # logging.warning(‘warning日志‘)  # 30
19 # # 4.错误信息
20 # logging.error(‘errorr日志‘)  # 40
21 # # 5.严重错误信息
22 # logging.critical(‘critical日志‘)  # 50
23
24 """
25 # 三.日志的四大成员--即四大对象
26 # 1.logger 对象 负责生产日志
27 # 2.filter 对象 过滤日志(了解) # 有好几层过滤
28 # 3.handler 对象 控制日志输出的位置(文件/终端)
29 # 4.formmater 对象 规定日志内容的格式
30 """
31 """
32 ps:日志的配置字典.py
33
34 """
35 # 案例
36 # 1.logger 对象 负责生产日志
37 logger = logging.getLogger(‘转张记录‘)
38 # print(logger)  # <Logger 转张记录 (WARNING)>
39
40 # 2.filter 对象 过滤日志(了解)
41
42 # 3.handler 对象 控制日志输出的位置(文件/终端)
43 hd1 = logging.FileHandler(‘a1.log‘,encoding=‘utf-8‘)  # 输入到文件中
44 hd2 = logging.FileHandler(‘a2.log‘,encoding=‘utf-8‘)  # 输出到文件中
45 hd3 = logging.StreamHandler()  # 输出到终端
46 # # 4.formmater 对象 规定日志内容的格式
47 fm1 = logging.Formatter(fmt=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s‘,
48         datefmt=‘%Y-%m-%d %H:%M:%S %p‘,)
49 fm2 = logging.Formatter(
50         fmt=‘%(asctime)s - %(name)s:  %(message)s‘,
51         datefmt=‘%Y-%m-%d‘,)
52
53 # 5.给logger对象绑定handler对象
54 logger.addHandler(hd1)
55 logger.addHandler(hd2)
56 logger.addHandler(hd3)
57 # 6.给hander绑定formmate对象
58 hd1.setFormatter(fm1)
59 hd2.setFormatter(fm2)
60 hd3.setFormatter(fm1)
61 # 7.设置日志登记 Level 等级
62 logger.setLevel(10)
63 # 8.记录日志
64 logger.debug(‘haofana,zhengshisble,nidayede aaaaaaaaaaaaaaaaaaaaaaa‘)
65
66 # 值:2019-07-19 21:33:29 PM - 转张记录 - DEBUG -logging模块:  haofana,zhengshisble,nidayede aaaaaaaaaaaaaaaaaaaaaaa

1.logging模块

 1 import os
 2 import logging.config   # 配置,布局
 3 """
 4 知识点1:日志输出的格式
 5 """
 6 # 定义三种日志输出的格式   # 开始
 7 # standart 标准格式
 8 standart_format = ‘[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]‘  9                   ‘[%(levelname)s][%(message)s]‘  # name 为getlogger 指定的名字
10 # simple 简单格式
11 simple_format = ‘[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s‘
12 # 定义日志输出的格式   # 结束
13
14 """
15 # 知识点2
16 下面的两个变量对应的值 需要你手动修改
17 """
18 # # log文件的目录
19 logfile_dir = os.path.dirname(__file__)
20 # log文件名
21 logfile_name = ‘a3.log‘
22
23
24 """
25 # 知识点3
26 # 如果不存在定义的日志目录就创建一个
27 """
28 # os.path.isdir 判断指定路径是否存在
29 if not os.path.isdir(logfile_dir):
30     # os.mkdir 创建新文件
31     os.mkdir(logfile_dir)
32 """
33 知识点4
34 log文件的全路径
35 """
36 # 把指定路径拼接到名字中
37 logfile_path = os.path.join(logfile_dir,logfile_name)
38
39 """
40 知识点5
41 log配置文件
42 """
43 LOGGING_DIC = {
44     ‘version‘: 1,  # version版本
45     ‘disable_existing_loggers‘: False,  # disable_existing_loggers 禁用现有记录器
46     ‘formatters‘: {
47         ‘standard‘: {
48             ‘format‘: standart_format
49         },  # format 格式
50         ‘simple‘: {
51             ‘format‘: simple_format
52         },
53     },
54     ‘filters‘: {},  # 过滤日志
55     ‘handlers‘: {
56         #打印到终端的日志
57         ‘console‘: {
58             ‘level‘: ‘DEBUG‘,
59             ‘class‘: ‘logging.StreamHandler‘,  # 打印到屏幕
60             ‘formatter‘: ‘simple‘
61         },
62         #打印到文件的日志,收集info及以上的日志
63         ‘default‘: {
64             ‘level‘: ‘DEBUG‘,
65             ‘class‘: ‘logging.handlers.RotatingFileHandler‘,  # 保存到文件
66             ‘formatter‘: ‘standard‘,
67             ‘filename‘: logfile_path,  # 日志文件
68             ‘maxBytes‘: 1024*1024*5,  # 日志大小 5M
69             ‘backupCount‘: 5,
70             ‘encoding‘: ‘utf-8‘,  # 日志文件的编码,再也不用担心中文log乱码了
71         },
72     },
73     ‘loggers‘: {
74         #logging.getLogger(__name__)拿到的logger配置
75         ‘‘: {
76             ‘handlers‘: [‘default‘, ‘console‘],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
77             ‘level‘: ‘DEBUG‘,
78             ‘propagate‘: True,  # 向上(更高level的logger)传递
79         },  # 当键不存在的情况下 默认都会使用该k:v配置
80     },
81 }
82 """
83 知识点5
84 使用日志字典配置
85 """
86 # 自动加载字典中的配置
87 logging.config.dictConfig(LOGGING_DIC)
88 # 负责生产日志
89 logger1 = logging.getLogger(‘随机日志‘)
90 # 记录日志
91 logger1.debug(‘haoxiang偶啊没但是我不能加油坚持就是胜利‘)
92
93 # 结果
94 # 文件 a3.log
95 # cmd
96 # [DEBUG][2019-07-19 22:14:18,991][logging配置字典.py:91]haoxiang偶啊没但是我不能加油坚持就是胜利

2.日志配置字典

4.openpyxl模块

 1 """
 2 # 操作Excel表格读写
 3     03版本之前 excel文件的后缀名 叫xls
 4     03版本之后 excel文件的后缀名 叫xlsx
 5 """
 6 """
 7 方法一
 8     openpyxl模块  -- 近期比较火的操作 -- 只支持03版本之后
 9         1.写
10         from openpyxl import Workbook
11         2.读
12         from openpyxl import load_workbook
13 方法二 及支持03版本之前,也支持03版本之后
14     xlwd 写
15     xlrt 读
16 """
17 # 写
18 # from openpyxl import Workbook
19 # # 1.先生成一个工作铺
20 # wb = Workbook()
21 # # 2.创建一个表单页,0 :后面可以通过数字控制位置
22 # wb1 = wb.create_sheet(‘index‘,0)
23 # wb2 = wb.create_sheet(‘index1‘)
24 # # 3.创建标题,即表单页名称
25 # # ps:后期可以通过表单页对象点title修改表单页名称
26 # wb1.title = ‘login‘
27 # # 4.单元格赋值
28 # # wb1[‘A3‘] = 666
29 # # wb1[‘A4‘] = 444
30 # # # 5.按坐标复制 row 列 column 行
31 # # wb1.cell(row=6,column=3,value=88888888)
32 # # # sum()  总和
33 # # wb1[‘A5‘] = ‘=sum(A3:A4)‘
34 # # wb2[‘G6‘] = 999
35 # # 6.添加行标题
36 # wb1.append([‘username‘,‘age‘,‘hobby‘])
37 # # 7.行标题赋值
38 # wb1.append([‘jason‘,18,‘study‘])
39 # wb1.append([‘tank‘,72,‘吃生蚝‘])
40 # wb1.append([‘egon‘,84,‘女教练‘])
41 # wb1.append([‘sean‘,23,‘会所‘])
42 # wb1.append([‘nick‘,28,])
43 # wb1.append([‘nick‘,‘‘,‘秃头‘])
44 # # 8.保存新建的excel文件
45 # wb.save(‘2test.xlsx‘)
46
47 # 读
48 from openpyxl import load_workbook
49 # 1.添加指定工作簿声明  data 数据  仅仅读数据
50 wb = load_workbook(‘2test.xlsx‘,read_only=True,data_only=True)
51 # print(wb)  # <openpyxl.workbook.workbook.Workbook object at 0x000001E4E75D6AC8>
52 # 2.打印表格页的名称  sheetnames 表格名字
53 # print(wb.sheetnames)  # [‘login‘, ‘Sheet‘, ‘index1‘]
54 # print(wb[‘login‘][‘A3‘].value)  # tank
55 # print(wb[‘login‘][‘A4‘].value)  # egon
56 # print(wb[‘login‘][‘A5‘].value)  # sean
57 # # ps:通过代码产生的excel表格必须经过人为操作之后才能读取出函数计算出来的结果值
58
59 res = wb[‘login‘]
60 # print(res)  # <openpyxl.worksheet._read_only.ReadOnlyWorksheet object at 0x00000283375ECA58>
61 ge1 = res.rows
62 for i in ge1:
63     for j in i:
64         print(j.value)

操作表格

5.深浅拷贝

 1 """
 2 深拷贝与浅考的区别:
 3 浅拷贝的本质:
 4 对于可变类型,浅拷配指向依然是原可变类型,子突然而然随之变化
 5
 6 深拷配的本质:
 7 对于可变类型,他另外创建了一个栈区存储,可变类型内的不可变类型依然,指向不可变类型,原值发生重指向,而,深拷贝不变,故而,不影响深拷贝
 8 """
 9 import copy
10 l = [1,2,[3,4]]
11 l1 = l
12 print(l1)  # [1, 2, [3, 4]]
13
14 # 浅拷贝
15 l2 = copy.copy(l)
16 # 对可变类型做新增
17 l2[2].append(666)
18 print(l,l2) # [1, 2, [3, 4, 666]] [1, 2, [3, 4, 666]]
19 # ps:对不可变类型无效,浅拷贝,不会随之变化,只针对可变类型
20
21 # 深拷贝
22 l3 = copy.deepcopy(l)
23 # 对深拷贝的可变类型做小改
24 l3[2].pop()
25 print(l3,l)  # [1, 2, [3, 4]] [1, 2, [3, 4, 666]]
26 # 不变类型,不会相互影响
27 #
28 l3[1]=111
29 print(l3,l)

深浅拷贝

原文地址:https://www.cnblogs.com/llx--20190411/p/11216213.html

时间: 2024-10-13 21:25:37

函数知识点 1.包 2.hashlib模块 --- 摘要算法模块 3.logging模块 4.openpyxl模块 5.深浅拷贝 # 17的相关文章

包、logging模块、hashlib加密模块、openpyxl模块、深浅拷贝

一.什么是包? 1.1包是一系列模块文件的总和,就是一个文件夹.该文件夹通常(python3和python的区别)会有一个init文件,包的本质还是一个模块 1.2具体的:包就是一个包含有__init__文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来 需要强调的是: 1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错 2. 创建包的目的不是为了运行,而是被导

包/logging模块/hashlib模块/openpyxl模块/深浅拷贝

一.包 1.什么是包 包就是一系列模块文件的结合体,表示形式是一种文件夹,该文件夹内部通常有一个__init__.py文件. 2.为什么要用包 当一个模块功能太多的时候不方便进行管理,我们用包来进行管理 3.包的使用 首次发导入包发生的几件事: 1.先产生一个执行文件的名称空间 2.创建包下面的__init__文件的名称空间 3.执行包下面的__init__.py文件中的代码,将产生的名字放在包下面的__Init__,py文件名称空间中 4.在执行文件中拿到 一个指向包下面的__Init__文件

包,logging模块,hashlib模块,openpyxl模块,深拷贝,浅拷贝

1 包 研究模块与包 还可以站另外两个角度分析不同的问题1.模块的开发者2.模块的使用者 什么是包? 它是一系列模块文件的结合体,表示形式就是一个文件夹 该文件夹内部通常会有一个__init__.py文件 包的本质还是一个模块 首次导入包: 先产生一个执行文件的名称空间 1.创建包下面的__init__.py文件的名称空间 2.执行包下面的__init__.py文件中的代码 将产生的名字放入包下面的__init__.py文件名称空间中 3.在执行文件中拿到一个指向包下面的__init__.py文

包、logging模块、hashlib模块、openpyxl模块、深浅拷贝

包.logging模块.hashlib模块.openpyxl模块.深浅拷贝 一.包 1.模块与包 模块的三种来源: 1.内置的 2.第三方的 3.自定义的 模块的四种表现形式: 1.py文件 2.共享库 3.文件夹(一系列模块的结合体),即包 4.C++编译的连接到Python内置的 2.模块的导入过程 先产生一个执行文件的名称空间 1.创建模块文件的名称空间 2.执行模块文件中的代码,将产生的名字放入模块的名称空间中 3.在执行文件中拿到一个指向模块名称空间的名字 3.什么是包 它是一系列模块

Python常用模块-摘要算法(hashlib)

Python常用模块-摘要算法(hashlib) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MD5算法参数详解 1.十六进制md5算法摘要 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%

包、logging、hashlib、深浅拷贝

一.包: 包的本质就是一个模块 什么是包:它是一系列模块文件的结合体,表示形式就是一个文件夹,该文件夹内部通常会有一个__init__..py的文件 导入包的过程:先产生一个执行文件的名称空间 1:创建包下面的__init__.py文件的名称空间 2:执行包下面的__init__.py文件中的代码,将产生的名字放入下面的__init__.py文件的名称空间中 3:在执行文件中拿到一个指向包下面的__init__.py文件名称空间的名字 在导入的语句中.号的左边肯定是一个包(文件夹):from d

Winpcap笔记4之不用回调函数捕获数据包

函数1: pcap_next_ex(pcap_t*                       p, struct pcap_pkthdr**   pkt_header, const u_char*             pkt_data ) 从一个网络接口或离线捕获方式(例如读文件)读取一个数据包.该函数被用来重新获得下一个可用的数据包,没有使用libpcap提供的传统的回调方法.pcap_next_ex用指向头和下一个被捕获的数据包的指针为pkt_header和pkt_data参数赋值.

欧拉函数知识点总结及代码模板及欧拉函数表

概念梳理: 欧拉函数是少于或等于n的数中与n互质的数的数目. 欧拉函数的性质:它在整数n上的值等于对n进行素因子分解后,所有的素数幂上的欧拉函数之积. 欧拉函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数.φ(1)=1(唯一和1互质的数(小于等     于1)就是1本身). (注意:每种质因数只一个.比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)

Lua进阶(二)——函数环境、包

函数环境 function foo() print(g or "No g defined!") end foo() setfenv(foo, { g = 100, print = print }) --设置foo的环境为表{ g=100, ...} foo() print(g or "No g defined!") --No g defined! --100 --No g defined! 定义:函数环境就是函数在执行时所见的全局变量的集合,以一个表来承载. 说明: