一闭三器
一闭
闭包
- 作用
保证数据安全。
- 结构
闭指的是:该函数的内部函数
包指的是:内部函数在外部被引用
- 构成条件
1、函数嵌套
2、外部函数返回内部函数名
3、内部函数使用外部函数的变量
def exeral():
print("我是外部函数")
def inside():
print("我是内部函数")
return inside
f = exeral()
f()
外层函数内的变量被称为自由变量,这个自由变量和内层函数形成一种绑定关系,自由变量不会和全局变量产生冲突
def demo1():
name = "外层函数"
def demo2():
print("我是内层函数")
return name
return demo2
result = demo1()
f = result()
print(f)
三器
装饰器
装饰器是 Python 的一个重要部分。简单地说:他们是不改变函数功能的基础上,给函数增加一些功能。他们有助于让我们的代码更简短,也更有范儿。
装饰器的本质是一个闭包
例如:外挂
def waigua(fun):
def inside():
print("打开外挂")
fun()
print("关闭外挂")
return inside
@waigua
def game1():
print("打开王者荣耀")
@waigua
def game2():
print("打开CSGO")
game1()
game2()
装饰器的参数传递:用“ *args ”和“ **kwargs "
例如:
def waigua2(fun):
def inside(*args, **kwargs):
print("打开外挂")
re = fun(*args, **kwargs)
print("关闭外挂")
return re
return inside
@waigua2
def game3(username, password):
print("账号:{}".format(username))
print("密码:{}".format(password))
print("打开游戏")
return "装备"
a = game3(123, "abc")
print(a)
迭代器
- 迭代器是一种对象,该对象包含值的可计数数字。迭代器是可迭代的对象,这意味着您可以遍历所有值。
- 从技术上讲,在 Python 中,迭代器是实现迭代器协议的对象,
- 它包含方法 iter() 和 next()。
- 列表、元组、字典和集合都是可迭代的对象
iter()方法:
var = "abcd"
list1 = [1, 2, 3, "a", "b"]
set1 = {1, 2, 3, "a", "b"}
var1 = iter(var)
list2 = iter(list1)
set2 = iter(set1)
print(var1) # >>><str_iterator object at 0x000001AA888DBBB0>
print(list2) # >>><list_iterator object at 0x000001DCB0F2BB80>
print(set2) # >>><set_iterator object at 0x000001DCB0F58980>
next()方法:
从迭代器中获取数据。
print(next(var1)) # a
print(next(var1)) # b
print(next(var1)) # c
print(next(list2)) # 1
print(next(set2)) # 随机
生成器
- 生成器的本质就是迭代器
- 生成器函数中有一个关键字 yield
- 生成器函数执行的时候,并不会执行函数,得到的是生成器
def func():
print("123456")
yield "大家好"
res = func()
print(res) # >>><generator object func at 0x00000259CABE9FC0>
只要函数中出现了yield,那他就是一个生成器函数可以分段执行函数的内容,通过next,执行到下一个yield的位置
def func():
print("这是第一段")
yield "大家好"
print("这是第二段")
yield "散了吧"
res = func()
print(res.__next__())
print(res.__next__())
和 return 相比,yield 除了可以返回相应的值,还有一个更重要的功能,即每当程序执行完该语句时,程序就会暂停执行。不仅如此,即便调用生成器函数,Python 解释器也不会执行函数中的代码,它只会返回一个生成器(对象)