Python3.5 学习四

装饰器

定义:本质是函数,装饰其他函数,即为其他函数添加附加功能的

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

     2  不能改变被装饰函数的调用方式(对于被装饰函数来说完全透明,不会受影响)

实现装饰器功能的知识储备:

  1  函数即变量

      匿名函数 calc=lambda x:x*3 使用完即回收

  2  高阶函数

    定义:a 把一个函数名当做实参传给另一个函数  (满足装饰器原则1)

         b 返回值中包含函数名 (返回值中包含函数名)

     举例:请见pycharm的练习代码

  3  嵌套函数

    在一个函数体内用def去声明另一个函数,而不是仅仅去调用另一个函数

  4  高阶函数+嵌套函数实现装饰器的功能

    思考:用以上两个知识点,怎么写一个装饰器 

    示例:import timedef timer(func):

    def deco(*args,**kwargs):
start_time = time.time()
func(*args,**kwargs)
end_time = time.time()
print("the func run time is %s" % (end_time - start_time), "s")
return deco

@timer #= test1=timer(test1) deco=test1 deco(*args,**kwargs)=test1(*args,**kwargs)
def test1():
time.sleep(3)
print("in the test1")
@timer #= test2=timer(test2) deco=test2 deco(*args,**kwargs)=test2(*args,**kwargs)
def test2(name):
time.sleep(3)
print("in the test2,the name is %s" % name)

test1()
test2("huhu")


如果装饰器声明需要有一个参数作为变量分类,则装饰器代码的外层再嵌入一层,传参func,装饰器的实参对应的是声明时的值即可。

协程并发 消费者生产者模型实例,详见Pycharm代码

我们已经知道,可直接作用于for循环的数据类型有:
A  list、tuple、dict、set、str
B  generator  包括生成器和带yield的generator function
这些可直接作用于for循环的对象,统称为可迭代对象:Iterable
可以使用Instanse()方法判断一个对象是否是Iterable对象
而生成器,不但可以被for循环,还可以被next()对象不断循环返回下一个值

迭代器
定义:可以被next()调用并不断返回下一个值的对象,我们叫做迭代器:Iterator
生成器都是Iterator对象,而list、tuple、dict、str等都不是Iterator对象
使用iter()可以变为迭代器

小结:
1  凡是可作用于for循环的对象,都是可迭代对象
2  凡是可作用于next()的对象,都是迭代器
3  非迭代器的可迭代对象,都可以通过iter()函数将其变为迭代器对象
4  Python3,本质上for循环的实现,其实本质就是一个迭代器,通过不断调用next()来实现的
  文件的读取,for line in f:也是一种迭代器的实现方式,如果用f.readlines()则生成一个list,占用大量系统资源
  而Python2里,f.xreadlines()和xrange(10)都是一种迭代器,只能用next()方法调用而动态计算生成下一个的值。

内置方法:
abs  取绝对值
all  判断可迭代对象中的每个元素,只要有一个为False,则返回False,否则返回True
any  同上,相反只要有一个为True,则返回True,否则返回False
ascii 列表转字符串
bin  数字转二进制
bool  判断真假
bytearray  字节数组格式,可单字节修改
bytes    字节格式
callable  判断是否可被当做方法调用
chr  返回ascII对应的值
compile  将字符串编译成指定执行格式的代码
complex  复数
dict  字典
dir  看对象有什么方法
divmod  返回商和余数
enumerate  枚举
eval  简单的字符串公式计算得出结果,即为取字符串的引号之间的内容并简化计算。
    复杂的只能用exec计算
fliter    filter(lambda n:n>5,range(10))
(匿名函数:只支持三元运算等简单函数的写法)
map      map(lambda n:n*2,range(10))
reduce    详见代码
float  浮点
format  格式化
frozenset  不可变集合
getattr   (面向对象时再讲)
gloables  返回当前程序中所有变量的字典

hash  散列值 后台有一种映射关系,将无序数据存成有序映射,便于快速折半查找检索方式的适用,字典的检索就是这种方式
这种映射关系叫做HASH.md5也是一种较复杂的hash算法
比较两个文件是否内容相同,最快的方式是转成md5,然后比较md5,也是用hash方式快速比较

help  方法的帮助
hex  数字转16进制
input
int
isinstance
issubclass
len
locals  本地变量的字典形式
max
min
next  相当于迭代器中的__next__
oct  转8进制
open
ord
pow
range
repr  用字符串表示对象
reversed  反转
round  保留小数
set  集合
setattr  面向对象会讲
slice  切片
sorted  排序
字典按照默认key排序:sorted(a.items())
指定按照value排序:sorted(a.items(),key=lambda x:x[1])
staticmethod
str
sum
super
tuple
type  python数据类型的祖师爷
vars  返回一个对象的属性名
zip  一一对应组合两个列表    zip按数量少的进行对应,map按数量多的进行对应

#import decorator等效于下列方法:
__import__('decorator')


json序列化:
Json用于所有开发语言之间的数据对接
默认只支持简单的数据类型的转换

pickle:
可支持所有类型的转换
其转换成二进制,请注意。
dumps()
loads()

注意:永远只Dump一次;只Load一次
每次都分开生成一次的记录文件

软件目录结构规范
/bin
/conf
/core
/doc

作业《购物商城+ATM》太难,以后再做吧~~~

猜你喜欢

转载自www.cnblogs.com/HU-HU/p/9391683.html