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)
    
  • 相关阅读:
    [转载]c++转python
    [转载]One-hot编码
    [转载]各种机器学习算法的应用场景
    SVC和SVR
    机器学习-正则化+回归与分类辨析
    C#编译时,提示缺少NuGet包
    C++中 左值和右值的区别
    C++11并发编程实战 免费书籍
    静态库和动态库
    C++中string类
  • 原文地址:https://www.cnblogs.com/standby/p/9054155.html
Copyright © 2011-2022 走看看