1. 装饰器
使用:装饰器其实就是一个函数,该函数有一个参数(函数类型),返回一个闭包。在返回的闭包中调用传递进来的函数,然后在调用函数的前后就可以添加内容
account = {
"is_authenticated":False,# 用户登录了就把这个改成True
"username":"Py小白雨", # 假装这是DB里存的用户信息
"password":"123456" # 假装这是DB里存的用户信息
}
def login(func):
def inner(*args,**kwargs): # 再定义一层函数
if account["is_authenticated"] is False:
username = input("user:")
password = input("pasword:")
if username == account["username"] and password == account["password"]:
print("welcome login....")
account["is_authenticated"] = True
else:
print("wrong username or password!")
if account["is_authenticated"] is True:
func(*args,**kwargs)
return inner # 注意这里只返回inner的内存地址,不执行
@login
def video(vip_level):
if vip_level < 3:
print("----视频普通会员----")
else:
print("尊贵的vip用户".center(50,"-"))
video(5)
2. 生成器
在Python中,一边循环一边计算后面元素的机制,称为生成器:generator。
print([x * x for x in range(10)])
print((x * x for x in range(10)))
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# <generator object <genexpr> at 0x0000025B4287B6D8>
因为 generator 也是可迭代(遍历)对象,所以可以用for循环来进行遍历
g = (x * x for x in range(10))
for i in g:
print(i)
著名的斐波拉契数列(Fibonacci)
# 输出前100 的斐波拉契数列
def fib(max):
a,b = 0,1
n = 0 # 斐波那契数
while n < max:
n = a + b
a = b # 把b的旧值给到a
b = n # 新的b = a + b(旧b的值)
print(n)
fib(100)
3. 迭代器
直接作用于for循环的数据类型有以下几种:
-
集合数据类型,如list、tuple、dict、set、str等;
-
generator,包括生成器和带yield的generator function。
这些可以直接作用于for循环的对象统称为可迭代对象
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
使用isinstance()判断一个对象是否是Iterator对象
本文深入探讨Python中的装饰器、生成器和迭代器。装饰器用于在不修改原有函数代码的情况下,添加额外功能,如用户认证。生成器允许在运行时动态生成序列,节省内存。迭代器则是可以被next()函数调用并返回下一个值的对象,支持for循环。示例中展示了如何使用装饰器实现登录验证,生成器生成斐波那契数列,以及迭代器的基本用法。

被折叠的 条评论
为什么被折叠?



