zoukankan      html  css  js  c++  java
  • 装饰器实例

    1.用装饰器实现访问两个网页只用输入一次密码

    flag = False           #标志位
    def login(func):
        def inner(*args, **kwargs):
            global flag
            if flag == False:
                username = input('用户名:')
                password = input('密码:')
                if username == "alex" and password == "123":
                    print("登陆成功")
                    flag = True
            if flag == True:    #如果不加入判断,就会有两次密码输入
                ret = func(*args,**kwargs)
                return ret
        return inner
    
    @login
    def art():
        print('欢迎来到文章页')
    @login
    def dar():
        print('欢迎来到日记野')
    art()
    dar()
    
    结果:
    用户名:alex
    密码:123
    登陆成功
    欢迎来到文章页
    欢迎来到日记野

    2.生成日志系统

    def wrapper(func):
        def inner(*args,**kwargs):
            ret = func(*args,**kwargs)
            the_Name = func.__name__
            f = open('log', 'a', encoding="utf-8")
            f.write("你访问了%s
    "% the_Name)
            f.close()
            return ret
        return inner
    
    @wrapper
    def f1():
        print("欢迎来到凤凰大视野")
    
    @wrapper
    def f2():
        print("欢迎来到东方卫视")
    
    f1()
    f2()
    
    结果:
    欢迎来到凤凰大视野
    欢迎来到东方卫视
    
    文件中的存入:
    你访问了f1
    你访问了f2
    你访问了f1
    你访问了f2
    你访问了f1
    你访问了f2
    你访问了f1

     3.实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中

    from urllib.request import urlopen
    
    def wrapper(func):
        def inner(*args,**kwargs):
            with open('web','rb') as f:
                web_content = f.read()   #如何判断文件存在了?
    
            if not web_content:       #如果文件不存在,
                web_content = func(*args,**kwargs)
                with open('web','wb') as f:
                    f.write(web_content)
    
            return web_content
        return inner
    
    @wrapper
    def get_url(url):
        content = urlopen(url).read()
        return content
    
    web_content = get_url("http://www.cnblogs.com/Eva-J/articles/7194277.html")
    print(web_content)
  • 相关阅读:
    Linux下g++编译与使用静态库和动态库(仅命令)
    Shell算数运算
    (转载)解决/usr/bin/ld: cannot find -lxxx 问题
    (转)C语言中的EOF和feof()
    204 Count Primes
    228 Summary Range
    235 Lowest Common Ancestor of a Binary Search Tree
    242 Valid Anagram
    简易计算器实现优化
    原生JS操作cookie
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7771879.html
Copyright © 2011-2022 走看看