日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 嵌套型partials(nested partials)的使用

發布時間:2024/7/5 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 嵌套型partials(nested partials)的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python嵌套型partial的使用

partial對象中包含partial對象的使用
要實現的目標,簡單示例:

from functools import partialdef func1(f):return fdef func2(f1):return f1def func(n):return np = partial(func2, partial(func1, partial(func, 5))) print(p()()()) # 輸出5

簡化嵌套式的partial對象p,不要調用三次

p() # 輸出5

可以直接跳到最后的看解決方法
場景:
為了實現一個通用性較高的sql生成方法,我寫了一個通用的轉換時間格式的方法,簡略版大概如下

def date_trunc(time_unit: str, field):return f'date_trunc("{time_unit}", `{field}`)'print(date_trunc("WEEK", "event_date")) print(date_trunc("DAY", "event_date")) ...

實際就是sql中的date_trunc方法
輸出

date_trunc("WEEK", `event_date`) date_trunc("DAY", `event_date`)

由于校驗日期參數和日期截斷是前后挨著執行的
我把上面的幾個方法寫進了一個Enum對象TimeFormatter
使用partial將date_trunc方法包起來以充當Enum的成員,實現用Enum類校驗日期參數,用Enum類成員的date_trunc方法執行日期截斷
這樣在校驗完日期參數后立馬調用它本身的date_trunc方法執行日期截斷:執行日期截斷date_trunc方法時需要傳入參數time_unit,也就是"DAY", “WEEK”, "MONTH"等字符串

from enum import Enum from functools import partialdef date_trunc(time_unit: str, field): # 注意這里的date_trunc和上面簡略版舉例的有所不同,需要兩個參數return f'date_trunc("{time_unit}", `{field}`)'class TimeFormatter(Enum):DAY = partial(date_trunc, "DAY")WEEK = partial(date_trunc, "WEEK")MONTH = partial(date_trunc, "MONTH")def __call__(self, *args, **kwargs):return self.value(*args, **kwargs)

這里的call方法讓Enum對象TimeFormatter的成員變得可以被調用(callable),關于Enum的一些用法可以參考我上期的文章
到這里我依然可以正常調用我的date_trunc方法

field = "event_time" tf_wk = TimeFormatter.__getattr__("WEEK") # 先校驗格式 print(tf_wk(field)) # 傳入相應的field對象就會執行對應的date_trunc方法截斷時間 tf_day = TimeFormatter.__getattr__("DAY") # 校驗格式 print(tf_day(field)) # 執行date_trunc

輸出

date_trunc("WEEK", `event_time`) date_trunc("DAY", `event_time`)

直到我想要使用二次的時間格式轉換時,也就是在date_trunc之后再執行一個from_timestamp將sql中的日期對象event_time轉換為指定的"yyyy-MM-dd"格式

from_timestamp(date_trunc("DAY", `event_time`), "yyyy-MM-dd")

發現好像沒那么順利地執行時間格式轉換:

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")

不是想要的結果

查了一些解決辦法,有循環調用,有用組合函數(function composition)的,
最后發現可以用一個簡單的方法解決:

from enum import Enum from functools import partialdef date_trunc(time_unit: str, field):return f'date_trunc("{time_unit}", `{field}`)'def from_timestamp(field, time_fmt: str):return f'from_timestamp(`{field}`, "{time_fmt}")'def fts(time_fmt, time_unit, field):return from_timestamp(date_trunc(time_unit, field), time_fmt)class TimeFormatter2(Enum):month = partial(fts, "yyyy-MM", "month")def __call__(self, *args, **kwargs):return self.value(*args, **kwargs)

輸出

from_timestamp(`date_trunc("month", `acmonth`)`, "yyyy-MM")

焯!原來只要多寫一個函數就可以了!

前面簡單示例的解決方法

def nested_partials(f2, f1, n):return f2(f1(n))p = partial(nested_partials, func2, func1) print(p(5))

輸出

5

總結

以上是生活随笔為你收集整理的python 嵌套型partials(nested partials)的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 痴女扩张宫交脱垂重口小说 | 天天干狠狠爱 | 98成人网 | 天堂在线| 国产精品videossex久久发布 | 日韩黄色视屏 | 一区二区不卡视频在线观看 | 国产又黄又粗又猛又爽 | 欧美久久综合 | 国产91丝袜 | www.日韩高清 | 手机av网| 宅男在线视频 | 福利在线电影 | 国语对白做受按摩的注意事项 | 五月婷婷导航 | 国产污污视频 | 欧美丰满少妇 | 法国空姐在线观看视频 | 欧美干干| 夜夜骑日日操 | 国产精品一二三四五 | www.精品视频 | 亚洲九九夜夜 | 奴色虐av一区二区三区 | 欧美××××黑人××性爽 | 一区二区精 | 日本人妻换人妻毛片 | 中文字幕在线免费看 | 久久久久久国产精品三级玉女聊斋 | 亚洲午夜激情 | 国模私拍一区二区三区 | 欧美激情电影一区二区 | 国产精品久久久久久久免费观看 | 大粗鳮巴久久久久久久久 | 久久婷综合 | 欧美一区自拍 | 精品日本一区二区三区在线观看 | 国产丝袜一区二区 | 岛国二区三区 | 深夜免费视频 | 欧美一级大片在线观看 | 日本天天操 | 四虎精品一区二区三区 | 久久精品片 | 米奇7777狠狠狠狠视频 | 高清一二三区 | 久久伊人成人网 | 91精品区 | 你懂得在线 | 日韩羞羞 | 91九色pron| 国产视频精品视频 | 爱爱三级视频 | 奇米影视中文字幕 | 色桃视频| 欧美aaa视频| 欧美一级做 | 男女日批在线观看 | 精品91久久久久久 | 欧美精品一区二区免费看 | 久久久久久免费精品 | 欧美久久久久久久久久久久 | 欧美成人自拍视频 | 婷婷深爱五月 | 久久久久久福利 | 午夜小视频网站 | 91精品综合久久久久久五月天 | 天堂在线资源库 | 污污内射久久一区二区欧美日韩 | 性色av无码久久一区二区三区 | 久久久久久久久国产精品 | 美女人人操 | 欧美精品一二三四区 | 瑟瑟视频免费观看 | 热99精品 | 欧美性受xxx| 五月天激情国产综合婷婷婷 | 日本在线一区二区三区 | 九九在线精品视频 | 成人欧美一区二区三区小说 | 中文字幕在线免费视频 | 天天天天色 | 操极品美女 | 欧美一区永久视频免费观看 | 亚色视频在线观看 | 张柏芝亚洲一区二区三区 | 91麻豆影视 | 国产主播自拍av | 中文字幕色站 | 外国电影免费观看高清完整版 | 可以直接看的毛片 | 久久黄色影视 | 久久精品视频5 | 亚洲人体一区 | 妖精视频在线观看免费 | 精品| 国产chinasex对白videos麻豆 | 亚州a级片|