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"


  • 相关阅读:
    Asp.Net选择TreeView前面的复选框引起回发
    Asp.Net自动发送邮件代码
    Asp.Net类型转换类(通用类)
    Eclipse 快捷键
    结对项目开发之电梯调度问题
    输出文章中几个最高频率单词和次数
    求整数数组中和最大的子数组的和
    Android定位功能(二)
    分布式拒绝服务攻击(DDoS)原理及防范
    定义Profile用户文件详解
  • 原文地址:https://www.cnblogs.com/wangshuyang/p/8926884.html
Copyright © 2011-2022 走看看