Сегодня, играя с замками, я заметил следующую ситуацию. Предположим, что у меня есть следующий код, который необходимо заблокировать. Используя старый способ с приобретать и освободить:Python-грамматика с конструкцией недостаточно гибкая
lock=Lock()
lock.acquire()
a=foo()
if condition:
doSomething()
lock.release()
else:
lock.release()
doSomethingElse()
Этот фрагмент кода не может быть реализована с использованием with
конструкции:
lock=Lock()
with lock:
a=foo()
if condition:
doSomething()
else: #This is wrong grammar here.
doSomethingElse()
Или может? Пожалуйста, исправьте меня, если я ошибаюсь.
Нет '' '' '' с 'операцией'; присвойте свой 'else' тому же отступу, что и ваш оператор' if'. – Evert
Да, но это заставит меня удерживать замок на большее время, чем то, что я на самом деле хочу удержать. Если я использую первый способ, я могу его освободить, когда захочу. –
Ваш первый пример, если он испорчен: если 'condition' является' False', вы никогда не освобождаете блокировку. – Evert