Python基础14—Python函数进阶(装饰器&生成器&迭代器)(2022年)

本文深入探讨Python中的装饰器、生成器和迭代器。装饰器用于在不修改原有函数代码的情况下,添加额外功能,如用户认证。生成器允许在运行时动态生成序列,节省内存。迭代器则是可以被next()函数调用并返回下一个值的对象,支持for循环。示例中展示了如何使用装饰器实现登录验证,生成器生成斐波那契数列,以及迭代器的基本用法。


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对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值