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

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

文章目录
  • 1. 装饰器
  • 2. 生成器
  • 3. 迭代器


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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/869204.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-13
下一篇2022-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存