gpt4 book ai didi

python - 在 Python 3.4 中重用多个类型的函数参数是 pythonic,它与鸭子类型(duck typing)有何关系?我应该拆分功能吗?

转载 作者:行者123 更新时间:2023-11-28 18:38:32 25 4
gpt4 key购买 nike

我来自 C# 和 Java,所以失去输入对我来说仍然是新事物,它可能会显示出来。

我有一个功能,可以向数据库发出查询,以删除最近发生的重复项。比如说,在过去 14 天左右。当脚本每天运行时,我希望它只使用像 14 这样的整数来回顾;然而,有时我可能想提供一个日期时间并让它直接使用它,而不是通过减去一个整数来计算它是什么日期。

以下是我目前所拥有的:

def clean_up_duplicates(dup_lookback):
if hasattr(dup_lookback, 'strftime'):
dup_start_str = dup_lookback.strftime('%Y-%m-%d %H:%M:%S')
else:
dup_start = date.today() - timedelta(days=dup_lookback)
dup_start_str = dup_start.strftime('%Y-%m-%d %H:%M:%S')

# ... continue on and use dup_start_str in a query.

这是 ducktyping 的正确用法吗?这是 pythonic 吗?

在我的脑海中,我的替代方案是分成两个功能:

def clean_up_duplicates_since_days(dup_lookback_days):
dup_start_str = dup_lookback.strftime('%Y-%m-%d %H:%M:%S')
__clean_up_duplicates(dup_start_str)

def clean_up_duplicates_since_datetime(dup_lookback_datetime):
dup_start = date.today() - timedelta(days=dup_lookback)
dup_start_str = dup_start.strftime('%Y-%m-%d %H:%M:%S')
__clean_up_duplicates(dup_start_str)

def __clean_up_duplicates(dup_start_str):
# ... continue on and use dup_start_str in a query.

(在浏览器中编码最后一点,所以可能会关闭)

最佳答案

鸭子类型(duck typing)意味着您假设一个对象包含一个函数,如果它包含一个函数,那么一切正常。

如果在函数不存在的情况下有替代路径可以使用,则使用 try/except 捕获它。

def clean_up_duplicates(dup_lookback):
try:
dup_start_str = dup_lookback.strftime('%Y-%m-%d %H:%M:%S')
except AttributeError:
dup_start = date.today() - timedelta(days=dup_lookback)
dup_start_str = dup_start.strftime('%Y-%m-%d %H:%M:%S')

关于python - 在 Python 3.4 中重用多个类型的函数参数是 pythonic,它与鸭子类型(duck typing)有何关系?我应该拆分功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29931140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com