передать kwargs и значения по умолчанию в упорядоченный список - PullRequest
0 голосов
/ 31 мая 2019

Используя 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 Ответ

1 голос
/ 31 мая 2019

Да, использование 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])

С другой стороны - пожалуйста, подумайте о переходе на Python 3. Python 2.7 в конце жизни и не получит никакой дальнейшей поддержки.Большинство библиотек перестали его поддерживать.

...