测试求道之路 关于 python partial 结合反射

陈子昂 · 2018年12月24日 · 954 次阅读

partial 偏函数

在保证面向对象编程下,尽量少生成函数代码。

from functools import partial
import os
path = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))

#python用partial和生平不见陈近南一样,学了partial会更加好。
def check_dir(dirname,filename):  #(dirname,filename)形参列表
    """
    检查上面的文件夹和文件是否存在,如果不存在就创建
    :param dirname:
    :param filename:
    :return:
    """
    dirpath = path + os.sep + dirname
    if os.path.exists(dirpath):
        if os.path.exists(dirpath+os.sep+filename):
            print("文件夹和文件已存在")
        else:
            os.makedirs(dirpath)
            file = open(dirpath + os.sep + filename, 'w')
            file.close()  # 关闭文件句柄

check_1 =partial(check_dir,filename="__init__.py") #本质是用关键字参数来填充 形参列表的第2个参数
check_2 =partial(check_dir,filename="__init__.py") #同上
check_1("test3") #本质是形参列表的第一个参数
check_2("test2")

上面是创建在项目根目录下,按形参列表第一个参数去创建文件夹。形参列表第二个参数是用来添加文件的。
这段似乎对于形参列表多个没有描述清楚。

python 形参列表

形参列表数量>2 的解释

def sum(a, b,c,d):
    """
    实体sum函数,提供给下面复用
    :param a:
    :param b:
    :return:
    """
    return a + b +c+d

#默认作用函数作为partial()函数的第一个参数
sum_1 =partial(sum,b=10,c=10)
print(sum_1(20,d=10))
print(sum_1(a=20,d=10)) #这个同上

改个方法名

python 不是没重载吗。看完下面的,这个是什么哇?结合专栏上面一篇文章的

import sys
module = sys.modules[__name__]
print(module) #看看是啥<module '__main__' from 'E:/invoke/actions/invoke_t.py'>
if hasattr(module,"sum"):
    get_sum =getattr(module,"sum")
    sum_2 =partial(get_sum,b=10,c=15,d=5)
    print(sum_2(5))
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册