我是张晨,一转眼,我在新课已经学习了很长一段时间。回顾这几个月的时间,我收获了很多知识。这里是我的一点学习笔记。
一、可迭代对象与迭代器
可迭代对象 for:什么样的对象可以被循环出来 以及为什么可以被循环出来
for i in object:
#有循环的魔法方法对象才可以被循环出来
二、生成器
生成器 是一个特别一点的迭代器
示例:
def func():
for i in range(5):
yield i # yield 讲数据返回到外面,但是不会杀死函数
# 生成器的作用就相当于一个工厂
data = func()
for i in data:
print(i)
#运行结果:0
#1
#2
#3
#4
三、闭包
什么是闭包?
函数的嵌套
保证数据的安全 同时函数不会死亡 函数里面的数据属于局部变量,外部无法使用
闭包格式的描述:
def 外层函数(参数):
def 内层函数():
print(“内层函数执行”, 参数)
return 内层函数
内层函数的引用 = 外层函数(“传入参数”)
内层函数的引用()
闭包示例1:
def outer(x):
def inner(y):
nonlocal x
x += y
return x
return inner
a = outer(10)
print(a(1))#运行结果:11
print(a(3))#运行结果:14
Python中,闭包主要用于装饰器的实现
示例2:
def outer():
list_data = []
def inner():
list_data.append(1)
return list_data
return inner # inner() None / inner
inner = outer() # outer() == inner
print(inner())
print(inner())
#运行结果:[1]
#[1, 1]
当外部需要使用到函数里面的数据
不希望这个数据直接被使用
调用函数修改列表 而不是直接调用列表进行修改
四、装饰器
装饰器 在原有的函数上新加一些东西
在不改变函数原本代码的前提下为其增加新的功能
示例1:
def func_dec(func):
def wrapper(*args):
if len(args) == 2:
func(*args)
else:
print("Error! Arguments = {}".format(list(args)))
return wrapper
@func_dec
def add_sum(*args):
print(sum(args))
args = range(1, 3)
add_sum(*args)
#运行结果:3
示例2:
import time
def func1():
start = time.time() # 记录开始时间
print(1 + 1)
time.sleep(2) # 休眠两秒 模拟函数运行的时间
stop = time.time()
print(stop-start) # 打印代码运行的时间
# func1()
def func2():
print(2 + 2)
func2()
#运行结果:4
需要这个功能的代码很多 统一管理和维护
使用场景
计算代码所需要运行的时间
暂时先分享这么多吧,希望大家在学习过程当中都能有所收获,感谢新课,如果想获取更多资料或者联系加群,可以关注我们新课的微信公众号,后台自动回复获取代码笔记资料。