将kwargs和默认值传递到有序列表

时间:2019-05-31 14:49:20

标签: python-2.7 list tuples kwargs

使用python 2.7,我一直在研究使用关键字参数来传递将新元组插入列表的函数。

我的目标:有一个带有一个必需参数的函数,然后将n个参数插入特定位置的元组中,并且如果没有传递任何参数,则具有默认值。

这是我到目前为止所拥有的:

def add_tagging_log_row(key, **time_stamp):
    tagging_log_rows.insert(len(tagging_log_rows), (key, time_stamp.get('is_processed'), time_stamp.get('is_processed')))



add_tagging_log_row('zzz', is_processed=datetime.datetime.now(), is_audited=datetime.datetime.now())

这是我正在构建的tagging_low_rows列表的示例,其中填充了元组中的所有值:

[('key1', datetime.datetime.now(), datetime.datetime.now(), datetime.datetime.now(), datetime.datetime.now()), ('key2', datetime.datetime.now(), datetime.datetime.now(), datetime.datetime.now(), datetime.datetime.now())]

这是列表中每个元组中项目的顺序:

key | is_processed | is_archived | is_error | is_audited

问题是,当调用函数add_tagging_log_row()时,我将始终传递一个“键”,但在将其插入列表时,可能会或可能不会将其他时间戳字段传递给元组。我需要这些字段为空字符串('')。

使用** kwargs处理此问题是否正确?

1 个答案:

答案 0 :(得分:1)

是的,使用kwargs是可行的。但是,您将需要在函数内部进行一些异常处理。 kwargs作为字典传入。您可以检查字典中是否存在给定的时间戳,如果不存在则使用空字符串。尝试在函数内部执行以下操作:

timestamps_order = ['is_processed', 'is_archived', 'is_error', 'is_audited']
required_tuple = tuple([key] + [time_stamp[k] if k in time_stamp else "" for k in timestamps_order])

顺便提一句-请考虑切换到Python3。Python2.7生命周期即将尽头,以后将不再获得任何支持。大多数图书馆已停止支持它。