python 嵌套型partials(nested partials)的使用
Python嵌套型partial的使用
partial對(duì)象中包含partial對(duì)象的使用
要實(shí)現(xiàn)的目標(biāo),簡(jiǎn)單示例:
簡(jiǎn)化嵌套式的partial對(duì)象p,不要調(diào)用三次
p() # 輸出5可以直接跳到最后的看解決方法
場(chǎng)景:
為了實(shí)現(xiàn)一個(gè)通用性較高的sql生成方法,我寫了一個(gè)通用的轉(zhuǎn)換時(shí)間格式的方法,簡(jiǎn)略版大概如下
實(shí)際就是sql中的date_trunc方法
輸出
由于校驗(yàn)日期參數(shù)和日期截?cái)嗍乔昂蟀ぶ鴪?zhí)行的
我把上面的幾個(gè)方法寫進(jìn)了一個(gè)Enum對(duì)象TimeFormatter
使用partial將date_trunc方法包起來以充當(dāng)Enum的成員,實(shí)現(xiàn)用Enum類校驗(yàn)日期參數(shù),用Enum類成員的date_trunc方法執(zhí)行日期截?cái)?br /> 這樣在校驗(yàn)完日期參數(shù)后立馬調(diào)用它本身的date_trunc方法執(zhí)行日期截?cái)?#xff1a;執(zhí)行日期截?cái)郿ate_trunc方法時(shí)需要傳入?yún)?shù)time_unit,也就是"DAY", “WEEK”, "MONTH"等字符串
這里的call方法讓Enum對(duì)象TimeFormatter的成員變得可以被調(diào)用(callable),關(guān)于Enum的一些用法可以參考我上期的文章
到這里我依然可以正常調(diào)用我的date_trunc方法
輸出
date_trunc("WEEK", `event_time`) date_trunc("DAY", `event_time`)直到我想要使用二次的時(shí)間格式轉(zhuǎn)換時(shí),也就是在date_trunc之后再執(zhí)行一個(gè)from_timestamp將sql中的日期對(duì)象event_time轉(zhuǎn)換為指定的"yyyy-MM-dd"格式
from_timestamp(date_trunc("DAY", `event_time`), "yyyy-MM-dd")發(fā)現(xiàn)好像沒那么順利地執(zhí)行時(shí)間格式轉(zhuǎn)換:
from enum import Enum from functools import partialdef from_timestamp(field, time_fmt: str):return f'from_timestamp(`{field}`, "{time_fmt}")'class TimeFormatter(Enum):HOUR = partial(from_timestamp, partial(date_trunc, "HOUR"))def __call__(self, *args, **kwargs):return self.value(*args, **kwargs)tf_hour = TimeFormatter.__getattr__("HOUR") print(tf_hour("event_hour"))輸出
from_timestamp(`functools.partial(<function date_trunc at 0x000002538E45E5E0>, 'HOUR')`, "event_hour")不是想要的結(jié)果
查了一些解決辦法,有循環(huán)調(diào)用,有用組合函數(shù)(function composition)的,
最后發(fā)現(xiàn)可以用一個(gè)簡(jiǎn)單的方法解決:
輸出
from_timestamp(`date_trunc("month", `acmonth`)`, "yyyy-MM")焯!原來只要多寫一個(gè)函數(shù)就可以了!
前面簡(jiǎn)單示例的解決方法
def nested_partials(f2, f1, n):return f2(f1(n))p = partial(nested_partials, func2, func1) print(p(5))輸出
5總結(jié)
以上是生活随笔為你收集整理的python 嵌套型partials(nested partials)的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机语言恢复,win10系统找回消失不
- 下一篇: 数据结构之堆:堆的介绍与python实现