ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

编程基础内容 - functools.partial

2021-09-14 18:33:45  阅读:205  来源: 互联网

标签:__ partial functools 编程 param add self def


functools.partial 固定函数的一些形参值

from functools import partial
RECORD_SIZE = 32

with open('./data/files.data', 'rb') as f:
    records = iter(partial(f.read, RECORD_SIZE), b'')
    for r in records:
        print(r)
b'1 2 3 4 5 6 7 8 9 10 11 12 13 14'
b' 15 16 17 18 19 20 21 22 23 24 2'
b'5 26 27 28 29 30 31'

records 对象是一个可迭代对象,它会不断的产生固定大小的数据块,直到文件末尾。 要注意的是如果总记录大小不是块大小的整数倍的话,最后一个返回元素的字节数会比期望值少。

本例中目的是读取固定长度数据,并一行一行迭代读取。

functools.partial 用来创建一个每次被调用时从文件中读取固定数目字节的可调用对象。 标记值 b’’ 就是当到达文件结尾时的返回值。

def add(a, b)->int:
    return a + b
add_100 = partial(add, a = 100)  # 固定形参a
add_100(b = 10) # -> 110
110

add的例子展示了partial可以固定函数add中的任意形参的值

给函数内的函数传字典参数

class Add:
    def __init__(self,  a, b):
        self.a = a
        self.b = b
    
    def get_values(self):
        return self.a + self.b
    

class Sub:
    def __init__(self, a, b):
        self.a = a
        self.b = b
    
    def get_values(self):
        return self.a - self.b


# 对拥有相同形参的对象进行统一实例化,即传入
def func(i, param=None)->int:
    """集中有序实例化对象"""
    default_param = {
        'a' : 10,
        'b' : 100
    }
    
    if param:
        default_param.update(param)

    ops = [
        partial(
            Add, 
            **param
        ),
        partial(
            Sub, 
            **param
        )
    ]
    
    assert i < len(ops)
    
    return ops[i]()

## 测试函数 func
d = {'a': 10, 'b':100}
add_ab = func(0, d)
add_ab.get_values()
110
type(add_ab)
__main__.Add

优势:直接将字典转化为对应的变量和值,key为变量名,value为变量取值

标签:__,partial,functools,编程,param,add,self,def
来源: https://blog.csdn.net/weixin_38292570/article/details/120293617

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有