装饰器:

定义:本质就是函数,(装饰其他函数)就是为其他函数添加附加功能

原则:1、不能修改被装饰的函数的源代码

   2、不能修改被装饰的函数的调用方式

实现装饰器知识储备:

1、函数即"变量"

2、高阶函数

  a:把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码的情况下为其添加功能)

  b:返回值中包含函数名(不修改函数的调用方式)

3、嵌套函数

高阶函数+嵌套函数=》装饰器

高级装饰器

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:kiko0o0 import time user,passwd = 'zk',''
def auth(auth_type):
def outer_wrapper(func):
def wrapper(*args, **kwargs):
if auth_type == 'local':
username = input('username = ').strip()
password = input('password = ').strip()
if username == user and password == passwd:
print('\033[32;1m User has passed authentication \033[0m')
res = func(*args, **kwargs)
return res
else:
print('\033[31;1m Invalid username or password\033[0m')
elif auth_type =='ldap':
print('ldap,不过去了')
res = func(*args, **kwargs)
return res
return wrapper #返回地址
return outer_wrapper #返回地址 @auth(auth_type='ldap')
def index(name):
print('welcome to index page :',name) @auth(auth_type='local') #home = auth()
def home(name):
print('welcome to home page:',name)
return 'from home' def bbs():
print('welcome to bbs page') index('zk')
print(home('syf'))
bbs()

高阶参数装饰器

斐波那契,以及异常抓取

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:kiko0o0 #一种
# def fib(max):
# n,a,b=0,0,1
# while n<max:
# print(b)
# a,b = b,a+b #相当于 F = (b,a+b) a = F[0] b=F[1]
# n+=1
# return 'done'
# fib(100) #生成器
def fib(max):
n,a,b=0,0,1
while n<max:
yield b
a,b = b,a+b #相当于 F = (b,a+b) a = F[0] b=F[1]
n+=1
return 'done'
f = fib(10)
while True:
try:
x = next(f)
print('f:',x)
except StopIteration as e:
print('Generator return value:',e.value)
break

斐波那契

通过生成器实现协程并行运算

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:kiko0o0
import time
def consumer(name):
print("%s 准备发布系统!" %name)
while True:
baozi = yield print("上线包[%s]来了,被[%s]发布了!" %(baozi,name)) def producer(name):
c = consumer('A') #函数变成生成器
c2 = consumer('B')
c.__next__() #next只唤醒yield ,调用下生成器 也就是才能开始运行生成器
c2.__next__() #等同c2.send(None)
print("准备传包!")
for i in range(10):
time.sleep(1)
print("传2个上线包!")
c.send(i) #send 是唤醒yield并传值给他
c2.send(i) producer("alex")

内置函数

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:kiko0o0 print(abs(-123)) #abs()取绝对值
print(all([1,2,3,0]) ) #如果可迭代对象里全为真,返回为真
print(any([0,1])) #如果可迭代对象里只要有一个为真,返回就为真,但是空为假
print(type(ascii([1,1,1]))) #把内存数据对象,表示成一个可打印字符串形式
repr() #用字符串表示这个对象
print(bin(1)) #把数字转换2进制
print(bool(1)) #判断真假 0和空为False
#字符串和二进制字节默认不可以修改
a = bytearray('abcd',encoding='utf-8') #变成可修改的二进制字节格式
print(a)
a[1] = 100
print(a) def zl(): pass
print(callable(zl)) #判定一个是不是可以调用的(就是是否可以后面加'()',例如函数就是可以调用)
print(chr(101)) #返回ascii的对应表,必须数字
print(ord('a')) #和chr()相反,必须输入ascii的字符
# classmethod()
code = '1+3*2+5'
c = compile(code,' ','eval') #把字符串编译成可执行的代码
print(eval(c))
code = '''
def fib(max):
pass
print('ok') '''
d = compile(code,' ','exec')
exec(d) #或是直接exec(code) complex() #可以使用参数real + imag*j方式创建一个复数。也可以转换一个字符串的数字为复数;或者转换一个数字为复数
delattr() #函数作用用来删除指定对象的指定名称的属性,和setattr函数作用相反。
dir() #可以查看对像内所有属于及方法
print(divmod(5,2)) #把除数和余数运算结果结合起来,返回一个包含商和余数的元组
print(eval('1+2+3+7*3')) #将字符串str当成有效的表达式来求值并返回计算结果
exec() #用来执行储存在字符串或文件中的Python语句
cale = lambda n:print(n) #匿名函数 只能处理简单的运算
cale(5)
res = filter(lambda n:n>5,range(10))
#接收一个函数f和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,
# filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list
res1 = map(lambda n:n*n,range(5))
# 将func作用于seq中的每一个元素,并将所有的调用的结果作为一个list返回
import functools
res2 = functools.reduce(lambda x,y:x*y,range(1,10)) #阶乘
print(res2)
for i in res1:
print(i) frozenset([1,4,222,3,4,3,444]) #不可变集合
print(globals()) #整个程序里会以字典类型返回当前位置的全部 全局变量。
hash() #用于获取取一个对象(字符串或者数值等)的哈希值。
hex() #转换16进制
id() #返回内存地址
locals() #会以dict类型返回当前位置的全部 局部变量
max() #返回列表里的最大值
min() #返回列表里的最小值
oct() #转换8进制
pow(2,8) #返回多少的幂次方
reversed() #反转一个序列对象,将其元素从后向前颠倒构建成一个新的迭代器。
round(1.332435,3) #小数保留小数点后3位
a = {3:2,1:4,-3:4,444:3}
print(sorted(a.items())) #字典排序默认按KEY排序
print(sorted(a.items(),key = lambda x:x[1])) #字典排序按value排序
sum() #列表求和
vars() #返回一个对象的所有属性
zip() #拉链,数据结合 数据不一样多就按照最少的组合
map() #类似zip 但是可以按照最多的组合,缺少的默认用None或指定一个值
__import__('decorat')

json和pickle

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:kiko0o0
import json #只能处理简单的 列表 字典 字符串等
import pickle #复杂可以
info = {
'name':'alex',
'age':22
} f = open('test.txt','w')
f.write(json.dumps(info)) #序列化
f.close() #--------------------------------
f = open('test.txt','wb') #pickle 需要用b 二进制
f.write(pickle.dumps(info)) #序列化
f.close()
#---------------------------------
f = open('test.txt','wb')
pickle.dump(info,f) #等同f.write(pickle.dumps(info))
f.close()

序列化

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:kiko0o0
import json #只能处理简单的 列表 字典 字符串等
import pickle
f = open('test.txt','r',encoding='utf-8')
data = json.loads(f.read()) #反序列化
f.close()
print(data)
#-----------------------------
f = open('test.txt','rb') #需要二进制
data = pickle.loads(f.read())
print(data) #------------------------
f = open('test.txt','rb')
data = pickle.load(f) #等同data = pickle.loads(f.read())
print(data)

反序列化

day4心得的更多相关文章

  1. Alpha冲刺Day4

    Alpha冲刺Day4 一:站立式会议 今日安排: 我们把项目大体分为四个模块:数据管理员.企业人员.第三方机构.政府人员.完成了数据库管理员模块.因企业人员与第三方人员模块存在大量的一致性,故我们团 ...

  2. Alpha冲刺——day4

    Alpha冲刺--day4 作业链接 Alpha冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602634 ...

  3. Beta冲刺——day4

    Beta冲刺--day4 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...

  4. 黑盒测试实践--Day4 11.28

    黑盒测试实践--Day4 11.28 今天完成任务情况: 分块明确自己部分的工作,并做前期准备 完成被测系统--学生管理系统的需求规格说明书 完成Mook上高级测试课程的第六章在线学习,观看自动化测试 ...

  5. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  6. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  7. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  9. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

随机推荐

  1. shiro源码解析--------欢迎指出错误地方,还有一起讨论一下ShiroFilterFactoryBean配置过滤URL规则

    啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 ...

  2. shell编程学习2

    1.shell中调用linux命令(1)直接执行(2)反引号括起来执行.有时候我们在shell中调用linux命令是为了得到这个命令的返回值(结果值),这时候就适合用一对反引号(键盘上ESC按键下面的 ...

  3. SpringCloud教程 | 第十一篇: docker部署spring cloud项目

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://blog.csdn.net/forezp. http://blog.csdn.net/forezp/art ...

  4. Java 使用 long 出现空指针异常

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} p.p2 {margin: ...

  5. 《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件

    一个标准的规则文件的格式为已".drl"结尾的文本文件,因此可以通过记事本工具进行编辑.规则放置于规则文件当中,一个规则文件可以放置多条规则.在规则文件当中也可以存放用户自定义的函 ...

  6. Kali Linux使用Aircrack破解wifi密码(wpa/wpa2)

    Kali Linux能做很多事,但是它主要以渗透测试及'破解wifi密码'闻名. 如果你使用Macbook 请看 使用macbook破解WPA/WPA2 wifi密码 要求: 安装有Kali Linu ...

  7. Python解析excel文件并存入sqlite数据库

    最近由于工作上的需求 需要使用Python解析excel文件并存入sqlite 就此做个总结 功能:1.数据库设计 建立数据库2.Python解析excel文件3.Python读取文件名并解析4.将解 ...

  8. 数据结构之最小生成树Prim算法

    普里姆算法介绍 普里姆(Prim)算法,是用来求加权连通图的最小生成树算法 基本思想:对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最 ...

  9. bzoj 4806 炮

    Written with StackEdit. Description 众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子". 炮跟炮 ...

  10. NET Core中使用MediatR实现命令和中介者模式

    NET Core中使用MediatR实现命令和中介者模式 https://www.cnblogs.com/yilezhu/p/9866068.html 在本文中,我将解释命令模式,以及如何利用基于命令 ...