Python偏函数(partial)的一些应用

在看Flask源码时发现的偏函数,现整理一下一些可能的应用例子

示例1

from functools import partial


def lookup_req_object(name):
    top = instance_stack.pop()
    return getattr(top, name, None)


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def newBee(self):
        print("永远{}岁".format(self.age))

class Student(Person):
    def __init__(self, name, age, score):
        super().__init__(name, age)
        self.score = score

    def printScore(self):
        print("{}的分数为:{}".format(self.name, self.score))


class Teacher(Person):
    def __init__(self, name, age, salary):
        super().__init__(name, age)
        self.salary = salary

    def printSalary(self):
        print("{}的工资为:{}".format(self.name, self.salary))


s1 = Student("安分守己的小明", 17, 1)
t1 = Teacher("法外狂徒张三", 18, 9999)


instance_stack = [s1, t1]
lookup_req_object('newBee')()
lookup_req_object('newBee')()

"""
结果:
永远18岁
永远17岁
"""

instance_stack = [s1, t1]
a = lookup_req_object('printSalary')
b = lookup_req_object('printScore')
if a:
    a()
if b:
    b()
"""
结果:
法外狂徒张三的工资为:9999
安分守己的小明的分数为:1
"""

示例2

from functools import partial


int2 = partial(int, base=2)         # 把 int 的转换设为二进制了,这里 base 是 int 函数表示进制的参数。
print(int2('1000000'))              # 结果为:64
print(int2('1000000', base=10))     # 这里 base 变成了 10,覆盖了已设的默认值 2。 结果为:1000000
print(int2('100', 10))              # 报错,10 前未加 base=,不能分辨这是传给 base 的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值