zoukankan      html  css  js  c++  java
  • functools学习记录

    装饰器demo

    def wrapper(func):
    	print('装饰器工作了')
    	def inner(*args,**kwargs):
    		return func(*args,**kwargs)
    	return inner
    
    @wrapper
    def index():
    	print('index')
    
    @wrapper
    def order():
    	print('order')
    
    print(index.__name__)
    print(order.__name__)
    
    # 结果
    装饰器工作了
    装饰器工作了
    inner
    inner

    functools.wraps

    import functools
    
    def wrapper(func):
    	print('装饰器工作了')
    	@functools.wraps(func)  # 能够保留被装饰函数的元信息
    	def inner(*args,**kwargs):
    		return func(*args,**kwargs)
    	return inner
    
    @wrapper
    def index():
    	print('index')
    
    @wrapper
    def order():
    	print('order')
    
    print(index.__name__)
    print(order.__name__)
    
    # 结果
    装饰器工作了
    装饰器工作了
    index
    order
    

    functools.partial

    偏函数:对函数进行封装,执行的时候自动传参数。

    from functools import partial
    
    def func(a,b,c):
        return a+b+c
    
    f1 = partial(func,1)
    v = f1(2,3)
    print(v)   # 6

    偏函数应用

    from functools import partial
    
    class RequestContext():
        def __init__(self):
            self.request = '__request__'
            self.session = '__session__'
    
    obj = RequestContext()
    
    def get_data(name):
        if hasattr(obj,name):
            return getattr(obj,name)
        else:
            return None
    
    request_proxy = partial(get_data,'request')
    session_proxy = partial(get_data,'session')
    request = request_proxy()
    session = session_proxy()
    
    print(request)
    print(session)
    
  • 相关阅读:
    PHP开发者的MySQL错误
    shell编程技术和实例《linux0.01内核分析与操作系统设计》
    函数问题1 init_EMUX
    sizeof问题
    C语言读书心得
    《深入浅出MFC》读书感受
    计算机专业学习多年的苦恼
    一个完整的字符设备驱动程序导读
    学习书籍选择
    鼠标滑动、文本添加(倒计时)
  • 原文地址:https://www.cnblogs.com/standby/p/9054155.html
Copyright © 2011-2022 走看看