一、装饰器:

  本质是函数,装饰其他函数,为其他函数添加附加功能。

  原则:

    1.不能修改被装饰函数的源代码。 

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

  装饰器用到的知识:

          1.函数即变量   (把函数体赋值给函数名)

          2.高阶函数 (1.一个函数接受另一个函数名作为实参2.返回值中含有函数名)

          3.嵌套函数(一个函数嵌套这另一个函数)  

    先看高阶函数 :

           1。要实现不修改被装饰函数的源代码,就要使用一个函数接受另一个函数名作为实参

          

            2.要实现不修改源代码的调用方式,使用返回值中包含函数名

 

    嵌套函数:

def test1():
print("in the test1")
def test2():
print("in the test2")
test2()
test1() #一个函数中包含另一个函数,而且内部的函数只能在内部调用

     装饰器的实现

#给计算test的运行时间
def timer(func):
def wrapper():
start_time = time.time()
func()
end_time = time.time()
print("函数运行时间:%s"%(end_time-start_time))
return wrapper
@timer
def test():
time.sleep(1)
# test = timer(test)
test()
import time
def timer(func):
def wrapper(n):
start_time = time.time()
func(n)
end_time = time.time()
print("函数运行时间:%s"%(end_time-start_time))
return wrapper
@timer
def test(n): #当函数中含有参数时
time.sleep(1)
print("打印的值为:%s"%n)
# test = timer(test)
test(5)
 import time
def timer(func):
def wrapper(*args,**kwargs): #当函数中含有任意多个参数参数时
start_time = time.time()
func(*args,**kwargs)
end_time = time.time()
print("函数运行时间:%s"%(end_time-start_time))
return wrapper
@timer
def test(age,name):
time.sleep(1)
# print("打印的值为:%s")
print("年龄是%s,名字是%s"%(name,age))
# test = timer(test)
test(24,name='小明')

二、迭代器与生成器

  列表生成式     [i *2 for i in range(10)]

  生成器      1.只有在调用的时候才会生成数据。2.只记录当前位置。3.只有next方法,直到最后抛出stopiteration才终止

      第一种形式

 [i *2 for i in range(10)]   #列表生成式
x = (i *2 for i in range(10)) #生成器
print(x.__next__())
print(x.__next__())
print(next(x))

       第二种形式

 def f(maxiter):
n,a,b = 0,0,1
while n<maxiter:
yield b #用函数形成生成器 含有 yield
a,b = b,a+b
n += 1
x = f(10)
print(x.__next__()) #要想生成数据,需要调用next方法
print(x.__next__())

      

    如果要获取生成器的值,就要捕获stopiteration异常

 def f(maxiter):
n,a,b = 0,0,1
while n<maxiter:
yield b
a,b = b,a+b
n += 1
return "done" #如果要获取函数的返回值,就要捕获stopiteration异常
x = f(3)
while True:
try:
print("x:",x.__next__())
except StopIteration as e:
print("生成器返回值:",e.value)
break
 #最简单的生产者消费者模型
import time
def consumer(name):
print("%s要准备吃包子了"%name)
while True:
baozi = yield
print("%s包子被%s吃了"%(baozi,name))
def produser(name):
c1 = consumer('A')
c2 = consumer('B')
c1.__next__()
c2.__next__()
for i in range(10):
time.sleep(1)
print("%s做了2个包子"%name)
c1.send(i)
c2.send(i)
produser('xiaoming')
  可迭带对象iterable:可以直接用for循环的对象称为可迭代对象   可以用isinstance()函数判断是不是可迭代对象

  迭代器iterator:可以调用next方法,并不断返回下一个值的对象     生成器都是迭代器,list、dict、str 都是可迭代对象,但不是迭代器。可用iter方法使之称为迭代器

          

三、map、filter、reduce函数

  

 print(map(lambda x:x*2,range(10)))
print(list(map(lambda x:x*2,range(10))))
#map(func,iterable)对iterable调用func 得到的是
print(list(filter(lambda x:x>5,range(10))))
#filter(func,iterable) #对可迭代对象进行筛选
print(list(filter(lambda x:x.startswith('m'),['mn','mb','b'])))
from functools import reduce
print(reduce(lambda x,y:x+y,range(10))) #进行累加操作
# reduce(func,iterable)

四、json和pickle模块

  

 data ={'name':'zqq','age':8,'sex':"boy"}
f = open("file.json","r")
# f.write(str(data))
import json
x = json.dumps(data) #序列化 或 json.dump(data,f) dump可以多次,load只能一次
f.write(x)
data = json.loads(f.read()) #反序列化 或json.load(f)
print(data)
f.close() f = open("ddd.txt","wb")
import pickle
x = pickle.dumps(data) #序列化 pickle.dump(data,f)
f.write(x)
f.close()
f = open("ddd.txt","rb")
import pickle
data = pickle.loads(f.read()) #反序列化 pickle.load(f)
print(data)

我的Python分析成长之路5的更多相关文章

  1. 我的Python分析成长之路7

    类 一.编程范式: 1.函数式编程   def 2.面向过程编程   (Procedural Programming) 基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个 ...

  2. 我的Python分析成长之路6

    模块:本质就是.py结尾的文件.从逻辑上组织python代码. 包: 本质就是一个目录,带有__init__.py文件,从逻辑上组织模块. 模块的分类: 1.标准库(内置的模块) 2.开源库(第三方库 ...

  3. 我的Python分析成长之路10

    matplot数据可视化基础 制作提供信息的可视化(有时称作绘图)是数据分析中最重要任务之一. 1.图片(画布)与子图 plt.figure :创建一张空白的图片,可以指定图片的大小.像素. figu ...

  4. 我的Python分析成长之路8

    Numpy数值计算基础 Numpy:是Numerical Python的简称,它是目前Python数值计算中最为基础的工具包,Numpy是用于数值科学计算的基础模块,不但能够完成科学计算的任而且能够用 ...

  5. 我的Python分析成长之路11

    数据预处理 如何对数据进行预处理,提高数据质量,是数据分析中重要的问题. 1.数据合并 堆叠合并数据,堆叠就是简单地把两个表拼在一起,也被称为轴向链接,绑定或连接.依照轴的方向,数据堆叠可分为横向堆叠 ...

  6. 我的Python分析成长之路2

    2018-12-29 一.python数据类型: 1.数字 int(整形) float(浮点型) complex(复数型) 2.布尔值(bool)     真或假 True or False 3.字符 ...

  7. 我的Python分析成长之路1

    Python是什么?                                                                                           ...

  8. 我的Python分析成长之路9

    pandas入门 统计分析是数据分析的重要组成部分,它几乎贯穿整个数据分析的流程.运用统计方法,将定量与定性结合,进行的研究活动叫做统计分析.而pandas是统计分析的重要库. 1.pandas数据结 ...

  9. 我的Python分析成长之路4

    一.函数 1.什么是函数?:函数是带名字的代码块,调用函数,只要调用函数名就可以.    2.函数的性质:1.减少重复代码 2.使程序变得可扩展 3.使程序变得易维护 3.编程范示: 1.面向对象编程 ...

随机推荐

  1. layui 单选框选中事件

    <div class="layui-form-item" pane=""> <label class="layui-form-lab ...

  2. 选择器 nth-child和 nth-of-type的区别

    <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li&g ...

  3. 【bzoj1726】Roadblocks

    1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1578  Solved: 795[ ...

  4. siege官方文档(译)(一)

    WHAT IS siege? Siege is an open source regression test and benchmark utility. Siege是一款开源回归测试和基准测试工具. ...

  5. php出现Warning: file_put_contents,failed to open stream

    Warning: file_put_contents(D:/wwwroot/jinxiongdi/web/temp/caches/f/index_40F756F0.php) [function.fil ...

  6. SpringMVC和Spring的配置文件扫描包详解

    在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景 ...

  7. Spring AOP初步总结(二)

    该篇为Spring AOP的一个应用案例:系统日志 需求:将任何删除,更改或新增数据库的操作汇总到数据库中 步骤1:编写切面 @Aspect @Component public class SysLo ...

  8. 关于img

    为img添加属性max-width min-height之类的属性可以对图片溢出部分实行自动裁剪功能 非常方便!!!!!!!!!(仅适用于那些原始图片大于max-width,max-height的图片 ...

  9. jquery实现跑马灯效果(一)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. crop层

    A是要进行剪裁的blob,B是参考,C是由A剪裁出来的输出. 模式1和模式2不同在于offset,模式1中每个dimension可以不同,模式2中用一个值表示了所有dimension的值. axis表 ...