zoukankan      html  css  js  c++  java
  • python之偏函数

    摘要:python的设计核心原则就是简洁——在这种原则的指导下,诞生了lambda表达式和偏函数:二者都让函数调用变得简洁。本文主要为你介绍偏函数的应用。

    为什么要用偏函数

    如果我们定义了一个函数,比如说将四个数相加add(one ,two,three,four),上层有很多函数需要调用这个函数。在这些调用中,80%的调用传递的参数都是one=1,two=20,如果我们每都输入相同的参数,这样乏味而且浪费,固然,我们可以通过默认参数来解决这个问题;但是如果另外我们也需要参数是one=2,two=10的情况呢?所以,我们需要一种函数,能够将任意数量的参数的函数转化成带剩余参数的函数对象。

    通过上面,我们大概明白了什么是偏函数:简单的说,偏函数就是某一种函数带有固定参数的实现,所以,我们需要:

    1)给偏函数命名

    2)传递固定参数

    from functools import partial
    def add(a,b):
        return a+b
    
    p1 = partial(add, 100)
    
    p2 = partial(add, 90)
    
    print('p1=', p1(99))
    
    print('p2=', p2(30))
    
    '''
    结果:
    p1=199
    p2=120    
    '''

    使用偏函数

    结合getattr反射

                import functools
                class RequestContext(object):
                    def __init__(self):
                        self.request = "xxxxx"
                        self.session = "iusdkfjlskdf"
    
                obj = RequestContext()
                # obj.request
                # obj.session
    
    
    
                def get_data(name):
                    return getattr(obj,name)
    
                request_proxy = functools.partial(get_data,'request')
                session_proxy = functools.partial(get_data,'session')
    
                request = request_proxy()
                print(request)
    
                session = session_proxy()
                print(session)
    结果:
    "xxxxx"
    "iusdkfjlskdf"


  • 相关阅读:
    获取windows所有用户名
    windbg内存查看(d*)
    Windbg查看调用堆栈(k*)
    Windbg调试互斥体(Mutex)死锁
    Windbg调试关键区(CriticalSection)死锁
    "R6002 floating point support not loaded"错误
    由可变参数引起的崩溃
    【Dubbo源码学习】负载均衡算法(2)-轮询算法的实现
    jdk1.8源码解析(1):HashMap源码解析
    Java annotation浅析
  • 原文地址:https://www.cnblogs.com/wangshuyang/p/8926884.html
Copyright © 2011-2022 走看看