• 闭包函数与装饰器


    闭包函数

    函数的传参方式(闭包函数,把变量和函数一起包起来,下次要用直接调用)

    def outter(x):
    	def inner():
    		print(x)
    	return inner
    

    爬虫运用闭包函数

    方法一:函数
    import request
    def get_res(url):
    	res = request.get(url)
    	print(res.text)
    get_res('https://www.baidu.com/')
    get_res('https://www.taobao.com')
    
    def func(url):
         def get_res():
             res = requests.get(url)
             print(res.text)
         return get_res
    
     baidu_spider = func('https://www.baidu.com')  # baidu_spider=get_res()
     baidu_spider()
     baidu_spider()
    

    闭包函数: 传参的另外一种方式, 参数+函数包在一起返回出去

    装饰器

    import time
    
    def index():
        print('hello index')
        time.sleep(1)
    
    
    # 检测index的运行的时间,但是不能改变index的调用方式,以及index的源码
    
    # 写一个装饰器
    
    def deco(func):  # func = 真正的index
        """装饰器"""
        def f1():
            start = time.time()
            func()  # 真正的index()
            end = time.time()
            print(end-start)
        return f1
    
    index = deco(index)  # index = f1
    index()  ## 这个时候的index就是deco的参数了,真正的index在deco函数里面会调用
    

    三层装饰器(了解)

    # 三层装饰器: 给双层装饰器加参数
    
    
    # 判断账号密码来自于哪个地方
    def auth(engine):
        def login(func):
            def inner(*args, **kwargs):
                # 登录功能
                if engine == 'file':
                    username = input('usrename:')
                    pwd = input('pwd:')
                    if username == 'nick' and pwd == '123':
                        print('登录成功')
                        res = func(*args, **kwargs)  # shopping()
                        return res
                    else:
                        print('登录失败')
    
                elif engine == 'db':
                    print('账号密码来自于数据库,非法请求')
    
            return inner
        return login
    
    @auth('file')
    def shopping():
        print('shopping')
    
    
    # login = auth('db')  # login = login
    # shopping = login(shopping)  # shopping = inner
    shopping() # inner()
    
  • 相关阅读:
    OneProxy与其它数据库中间件的对比
    防御式编程
    google jam 比赛题(设计有问题)
    Python 代码性能优化技巧
    Python性能鸡汤
    如何避免重构带来的危险
    Linux/Unix工具与正则表达式的POSIX规范
    代码抽象层次2
    chinaunix:腾讯面试题
    C++异常处理小例
  • 原文地址:https://www.cnblogs.com/oxtime/p/11341175.html
Copyright © 2020-2023  润新知