黑马程序员技术交流社区

标题: 【上海校区】【笔记】python的装饰器,迭代器,生成器(yi... [打印本页]

作者: 不二晨    时间: 2018-12-14 17:46
标题: 【上海校区】【笔记】python的装饰器,迭代器,生成器(yi...
装饰器:



不改变home的源码,给它加上添加登录功能呢

            写在 被装饰函数 的 正上方 。可提前注明接下来的介绍内容

            比如:@property、@classmethod、@staticmethod 、

      @关键字

      被装饰函数()

def login(func):
    """
    在这里从新定义一个高阶函数,
    这就是decorator。
    我们一会儿会仔细分析。
    """
    def wrapper(*args, **kwargs):
        user = "zingp"   # 假设这是数据库中的用户名和密码
        passwd = "123"
        username = input("输入用户名:")
        password = input("输入密码:")
        if username == user and password == passwd:
            return func(*args, **kwargs)
        else:
            print("用户名或密码错误。")
    return wrapper


@login     # 利用python的@语法,把decorator置于home函数的定义处 相当于home = login(home)
def home():
    print("欢迎来到XX首页!")

home()




迭代器 (Iterator)

迭代器的特点:访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容,不能随机访问集合中的某个值,只能从头到尾依次访 问,访问到一半不能往后退,便于循环比较大的数据集合,节省内存
迭代器有两种类型:
1.集合数据类型:列表,字典,元组,集合,字符串
2.generator:包括生成器和带有yield的生成函数




生成器 (Generator)

包含 yield 的函数。

yield 与 return 相比,能 多次 返回 值。

定义生成器的方式:

(1)列表生成式的[]改为()

使用for循环进行调用即可

(2)定义yield关键字

如果一个函数定义中包含yield关键字,则这个函数为一个生成器

注意:yield的原理是,在每次进行迭代调用next()时执行,遇到yield语句返回,下次执行时从上次返回的yield语句处继续执行。
---------------------
【转载】仅作分享,侵删
作者:XHDANE
原文:https://blog.csdn.net/XHDANE/article/details/84930625



作者: 不二晨    时间: 2018-12-18 17:49
奈斯
作者: 梦缠绕的时候    时间: 2018-12-20 16:53





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2