栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
  • 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对象

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/859376.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号