Is reuse of a function argument for multiple types in Python 3.4 pythonic, and how does it relate to duck typing? Should I split the function up?
我来自C和Java,所以丢失打字对我来说还是新的,它可能会显示出来。
我有一个函数,它向数据库发送查询,以删除最近发生的重复项。比如说,在过去的14天左右。当脚本每天运行时,我希望它只使用像14这样的整数进行回退;但是,有时我可能希望提供一个日期时间并让它直接使用它,而不是通过减去整数来计算日期。
以下是我目前的情况:
1 2 3 4 5 6 7 8 | 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. |
这是杜克字体的正确用法吗?这是Python吗?
我的另一个选择,我的头顶,是分为两个功能:
1 2 3 4 5 6 7 8 9 10 11 | 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类型意味着你假设一个对象包含一个函数,如果它包含一个函数,那么一切都会正常工作。
如果函数不存在,则需要使用另一条路径,使用
1 2 3 4 5 6 | 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') |