一、装饰器

##装饰器:

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

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

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

# 装饰器对被装饰函数来说,是完全透明的。装饰函数不知道装饰器的存在。

###实现装饰器知识储备

#1.函数即“变量”

#2.高阶函数

#3.嵌套函数

#高阶函数+嵌套函数---》装饰器

import time

def timmer(func):

def warpper(*args,**kwargs):

start_time = time.time()

func()

stop_time = time.time()

print('the func run time is {a}'.format(a=stop_time-start_time))

return warpper

@timmer

def test1():

time.sleep(3)

print('in the test1')

import time

def timer(func):

def deco(*args,**kwargs):

start_time = time.time()

# print(func)

func(*args,**kwargs) #run test1

stop_time = time.time()

print('the func time is {a}'.format(a=stop_time-start_time))

return deco

@timer # 等价于test1 = timer(test1) (相当于把原来的test1给偷梁换柱为我们的timer(test1)了)

def test1():

time.sleep(1)

print('in the test1')

@timer #test2 = timer(test2) = deco test2(name) = deco(name)

def test2(name,age,):

print('test2:',name,age)

test1()

##(相当于把原来的test1给偷梁换柱为我们的timer(test1)了)

##思考1.要想达到装饰函数效果:即不改变调用方式,不改变函数源代码,增加函数功能,那么

##思路必然是搞一个新的函数,并且把函数地址赋给test1,即完成test1函数的偷梁换柱。

test2('alex',22) ##2.目的是增加函数功能,那么前提是保证原来函数功能,所以就要把test1函数地址作为实参

##传递给装饰函数,并且在装饰函数中执行test1. 此外,就是在装饰函数中实现附加功能。

#####最后,要返回嵌套内函数的地址,(外函数只是个形式,起到传参作用),赋给test1,保证被

#####偷梁换柱后的test1,具有原功能和附加功能。

二、迭代器

# 我们已经知道,可以直接作用于for循环的数据类型有以下几种:

# 一类是集合数据类型,如list、tuple、dict、set、str等;

# 一类是generator,包括生成器和带yield的generator function。

# 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。

# 可以使用isinstance()判断一个对象是否是Iterable对象:

#*可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

#可以使用isinstance()判断一个对象是否是Iterator对象:

#生成器都是迭代器Iterator,但list、dict、str虽然是Iterable,却不是迭代器Iterator。

#把list、dict、str等Iterable变成Iterator可以使用iter()函数:

#range(10)是个迭代器

#for line in f 也是迭代器

from collections import Iterable

from collections import Iterator

print(isinstance([],Iterable))

print(isinstance([],Iterator))

a = [1,2,3]

b = iter(a)

print(b.__next__())

三、生成器

import time

def consumer(name):

print("%s 准备吃包子啦!" %name)

while True:

baozi = yield

print("包子[%s]来了,被[%s]吃了!" %(baozi,name))

# c = consumer('llw') #产生一个生成器,不会执行consumer里面语句

# c.__next__() #只是调用yield

# b1 = '韭菜馅'

# c.send(b1) #调用yield,并给yield传值

def producer(name):

c = consumer('A')

c2 = consumer('B')

c.__next__()

c2.__next__()

print("老子开始准备做包子啦!")

for i in range(10):

time.sleep(1)

print("做了2个包子!")

c.send(i)

c2.send(i)

producer("alex")

四、匿名函数

#匿名函数:函数即变量。没有名字,就没有门牌号,就会被回收。

# (变量和函数均有内存回收机制,当没有门牌号时,内存回收)

# calc = lambda x:x*3

# print(calc(3))

#

#

# def sayhi(n):

# print(n)

# sayhi(3)

#

# calc = (lambda n:print(n)) ##只能把简单函数搞成匿名函数

# calc(5)

#

# calc = lambda n:3 if n<4 else n ##三元组

五、内置方法

#匿名函数:函数即变量。没有名字,就没有门牌号,就会被回收。

# (变量和函数均有内存回收机制,当没有门牌号时,内存回收)

# calc = lambda x:x*3

# print(calc(3))

#

#

# def sayhi(n):

# print(n)

# sayhi(3)

#

# calc = (lambda n:print(n)) ##只能把简单函数搞成匿名函数

# calc(5)

#

# calc = lambda n:3 if n<4 else n ##三元组

python中da_python学习 da4相关推荐

  1. python中choicebox_学习python的第四天笔记

    26.032 异常处理 常用的异常警告语句: AssertionError:断言语句失败 AttributeError:访问的未知的对象属性,#例如f.dcp(),.dcp()是不存在的 IndexE ...

  2. python中with学习

    python中with是非常强大的一个管理器,我个人的理解就是,我们可以通过在我们的类里面自定义enter(self)和exit(self,err_type,err_value,err_tb)这两个内 ...

  3. python中da_Python中字符的编码与解码

    1 文本和字节序列 我们都知道字符串,就是由一些字符组成的序列构成串,那么字符又是什么呢?计算机只能识别二进制的东西,那么计算机又为什么会显示我们的汉字,或者是某个字母呢? 由于最早发明使用计算机是美 ...

  4. python中head_python学习笔记[headfirst]

    1内置函数 (BIF) python中有很多内置函数,再遇到一个需求时候,优先考虑内置函数.内置函数使用的时候不需要导入命名空间 range():生成一个从0到某个数的数字列表 2从文件读取数据 2. ...

  5. python中usecols_Python学习路线?

    10招!看骨灰级Pythoner如何玩转Python? [学会一时间爽,一直学一直爽!] pandas是基于numpy构建的,使数据分析工作变得更快更简单的高级数据结构和操作工具.本文为大家带来10个 ...

  6. python中待学习的内容

    目录 python类中的__init__: python类的继承与多态 PyQt 5信号与槽 Python 中的多线程 python类中的__init__: init()方法有两个方面的重大意义:1. ...

  7. Python中subprocess学习

    生命不息奋斗不止! subprocess的目的就是启动一个新的进程并且与之通信. subprocess模块中只定义了一个类: Popen.可以使用Popen来创建进程,并与进程进行复杂的交互.它的构造 ...

  8. python中isleap_Python学习笔记(十三)系统

    使用计算机时,经常需要列出一个文件夹或者目录的内容,创建和删除文件等操作,在 Python 程序中可以做到同样的事, 甚至能做更多的事.Python 在模块 os(操作系统,operating sys ...

  9. python中da_python数据类型一

    python数据类型一 1.int 整数 1 n = 56 2 print(n.bit_length()) #计算56的二进制是几位 3 # 0011 1000 4 注意: 5 # python2 中 ...

最新文章

  1. NanoDet:轻量级(1.8MB)、超快速(移动端97fps)目标检测项目
  2. 全国成人计算机考试题,成人计算机考试试题.docx
  3. svn无法读取日志问题解决
  4. buuctf 二维码
  5. 浅析DDD(领域驱动设计)
  6. 日报 18/06/25 26
  7. 华为宣布方舟编译器将开源;​苹果秋季发布会定档9月10日;TypeScript 3.6 发布 | 极客头条...
  8. linux python测试程序,linux下测试python程序执行时间
  9. 三国志战略版交易助手攻略
  10. Javascript设计模式-18-状态模式
  11. Visual Studio Coded的安装以及中文化
  12. uniapp苹果无法上架_uniapp无法上架IOS包怎么办
  13. 中国邮政国际航空挂号信是可以网上查询跟踪的
  14. 数字图像处理实验四平移性质和旋转性质
  15. 12306验证码破解思路分享
  16. 台式计算机usb接口无反应6,Win7电脑USB接口没反应不能用的解决方法
  17. 好的重疾险原来长这样!你被骗了这么多年...
  18. MCS-51单片机C语言程序注释,精通MCS-51单片机C语言编程
  19. JDBC之execute、executeQuery和executeUpdate之间的区别
  20. 估值最高的自媒体达38亿,不是咪蒙、一条,也不是逻辑思维,而是他..

热门文章

  1. Using rqt_console and roslaunch
  2. Linux下xz与tar的区别
  3. bzoj29894170: 数列
  4. GameBryo Shader 组织方式
  5. 一道异常处理执行顺序面试题的简单分析
  6. Transact_SQL小手册
  7. 41.虚拟存储器以及相关算法
  8. html输入框颜色属性,css 修改input输入框属性
  9. 监控ui_做了10年监控系统,有些经验想和你分享
  10. 西南石油大学计算机二级成绩查询,西南石油大学本科学生成绩自助查询打印终端管理办法...