Скажем, у меня есть метод python для получения последнего синхронизируемого списка изменений в p4. (Сам вопрос не связан с p4, но только основным питона вопросом)Параметры обработки Python в контексте «с»
def get_last_synced_changelist(p4port, client_name, p4 = None):
with P4Connection(p4port) as p4:
last_change_list = p4.run_changes("-m1", "@%s" % client_name)
if last_change_list:
return last_change_list[0]["change"]
else:
return None
Вызывающие этот метод может либо питания P4PORT, который является строкой, или они могли бы поставить объект p4 в себе. Мое требование заключается в том, что если «p4» объект поставляется Я хочу, чтобы запустить тело метода безс контекста, то есть, я не хочу, чтобы ввести или Выйдите метод, называемый на p4. Это связано с тем, что ответственность за закрытие/ввод объекта p4 лежит теперь на вызывающем абоненте. Если объект p4 не указан, в этой программе должен быть сконфигурирован синтаксис с использованием строки p4port.
Может ли кто-нибудь сказать мне, что является лучшим способом структурирования этого метода? Я хочу изменить тело как можно меньше. В основном что-то вроде
p4 or with P4Connection(p4port) as p4:
p4.run_changes(...)
Но я не уверен, какой лучший синтаксис.
+1 довольно элегантный! – delnan
Dummyctx довольно элегантен. Он многоразовый, и я могу назвать его no_op_ctx_mgr или какой-то такой штукой, и это похоже на шаблон Null-Object-Design-Pattern –