写在前面:作为一个计算机小白,也不是学信息技术专业,单纯是出于自己的爱好,偶然间的一次机会接触到python,触发了自己想要学习这门语言的想法;每天分享一点点自己的学习笔记;
‘’’
三器: 装饰器 迭代器 生成器(明天学)
一闭:闭包
‘’’
高阶函数 + 嵌套函数 构成一个闭包
1、嵌套函数
2、内层函数 引用外层函数的变量
3、外城函数 返回内层函数的地址
def f1(x):
b = 3
def f2():
print(b+x)
return f2
res = f1(10)
res()
res()
可变类型
def fun():
l1 = []
l1.append(11)
print(l1)
def fun1():
l2 = []
def fun2():
l2.append(11)
print(l2)
return fun2
普通函数
fun()
fun()
fun()
print('-----')
闭包
res1 = fun1()
res1()
res1()
res1()
定义闭包 闭包的作用
装饰器是闭包的一种实现方式
装饰器的作用 在不改变原有函数的基础上 增加新的功能
装饰器的使用 @装饰器
定义一个装饰器
def zs(f):
def inner():
# 使用外城函数的变量
print('大家好,我是XXX')
f() # f函数的地址
return inner
@zs
def say_hello():
print('你好')
第一次调用
say_hello()
第二次调用
say_hello()
第三次调用
say_hello()
在不改变添加学生函数的基础上,增加一个查询功能
def zs_cx(f): # 函数地址
def inner1():
f() # 调用接收到的函数地址
if 'xx' in l1:
print('已经存在')
else:
print('没有')
return inner1
l1 = []
@zs_cx # 执行装饰的过程,add—stu以参数的形式传递给zs—cx
def add_stu():
name = 'xx' # 张三
l1.append(name)
print(l1)
#add_stu()
print(add_stu)
add_stu()
定义装饰函数 怎么调用装饰器
可迭代对象 迭代器 生成器
迭代: 从容器的第一个元素开始到最后一个元素结束
可迭代的对象(容器): 允许迭代的对象
迭代器: 访问容器的一个对象
生成器: 是一个特殊的迭代器 除了可以访问以外,可以自己创建数据和访问数据
from collections.abc import Iterator,Iterable
Iterator 迭代器
Iterable 可迭代对象
list1 = [23]
print(isinstance(list1,Iterable)) # 判断类型
print(isinstance(list1,Iterator))
res = map(lambda x:x+2,[2,3,4,5])
print(isinstance(res,Iterable))
print(isinstance(res,Iterator))
dir
print(dir(list1)) # iter
print('----------')
print(dir(res)) # next()
print(next(res)) # 取第一个元素
print(next(res)) # 取第二个元素
for 可第二代对象 不一定是迭代器 迭代器一定是可迭代对象
print(next(res))
list2 = iter(list1)
print(isinstance(list2,Iterator))
isinstance(1234,Iterable) # iter next