装饰器等

装饰器

1、函数的引申

#实际上函数的名字可以被赋值,也可以作为一个容器类型的元素,可以作为函数的参数
#变量怎么使用,函数的名字都可以怎么用

例如:

def a():
	print('in a ')
def wahaha(f): #形参是个变量
	f()                  #形参加( ) 就是a() 函数的调用
wahaha(a)   #传入的实参是个函数 的内存地址

2、函数名字作为返回值

def wahaha():
def a():
    print('in a ')
return a     ##这里是返回a 的内存地址 ,但是没有调用, 如果是return a()   就是会调用这个函数

func = wahaha()
func()    ##这个() 就是a 函数的调用  相当于=a()

3、闭包

def wahaha():
	name = 'alex'
	def a();
		print('ina',name)    ####内层函数引用了外层函数的变量,那么a就是一个闭包函数
	return a 

4、闭包的用处

 局部函数可以调用,但是全局调用不了,所以相对安全

5、装饰器固定格式

def 装饰器名字(func):
	def inner(*args,**kwargs):
	    '''在执行被装饰的函数之前做的事'''
		ret = func(*args,**kwargs)
		'''在执行被装饰的函数之后做的事'''’
		return ret
	return inner

@装饰器名字
def wahaha():
	pass
wahaha()

6、什么时候用装饰器?

#在已经写好的程序基础之上,需要对一个函数执行前后增加功能的时候

开放封闭原则:
开放:对扩展是开放的
封闭:对修改时的封闭,例如底层代码的封闭

7、 扩展

如果函数内部有注释例如:
def func(a,b):
‘’’
这是注释
‘’’

查看注释用:func.(doc)
查看函数的名字用:func.(name)

8、一个函数被好几个装饰器装饰

def wrapper(func):
	def inner(*args,**kwargs):
		print('start 1')
		ret = func(*args,**kwagrs)
		print('end 2')
		return ret
	return inner

在这里插入图片描述

9、自己理解带参数的装饰器

迭代器

1、定义

1.1 一个一个取值,而不是一次性把所有的数据都创建出来,迭代器中的数据不取不创建
1.2 只能按顺序取,不能跳过也不能回头
1.3 一个迭代器中的数据只能从头到尾取一次

2.可迭代协议
2.1 如果一个数据类型中,如果有iter方法,这个数据类型就是可迭代类型,

3.迭代器协议
3.1 一个数据类型中有iter和next方法,那么这个数据类型就是一个迭代类型

例如:
监听文件例子:

def listen():
f = open(‘test’,mode=‘r’,encoding=‘utf-8’)
while True:
content = f.readline().strip()
if content:
yield content

如果有错误日志的就打印出来
上述例子的
if content 就变更为 if ‘error’ in content

1、实时输出文件
for content in listen():
print(content )

列表推导式

1、 ls = 【i*i for i in range(30) if i%3==0】
print(ls)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值