编程基础内容 - functools.partial

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为变量取值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值