Несколько переменных в 'с' оператором?

Вам не нужен массив a

b.map(&:values).map.with_index {|(item, quantity), index| 
 "#{index + 1}. #{item} #{quantity}"
}.join(' ')
=> "1. apple 92 2. banana 43 3. kiwi 55"
346
задан martineau 14 January 2019 в 04:29
поделиться

4 ответа

Это возможно в Python 3, начиная с v3.1 и Python 2.7 . Новый с синтаксисом поддерживает несколько менеджеров контекста:

with A() as a, B() as b, C() as c:
    doSomething(a,b,c)

В отличие от contextlib.nested , это гарантирует, что a и b ] будет вызывать их __ exit __ () , даже если метод C () или метод __ enter __ () вызывает исключение.

Вы также можете использовать более ранние переменные в более поздних определениях (h / t Ahmad ниже):

with A() as a, B(a) as b, C(a, b) as c:
    doSomething(a, c)
605
ответ дан 23 November 2019 в 00:30
поделиться

В Python 3.1 + можно указать несколько выражений контекста, и они будут обработаны, как будто приблизительно with операторы были вложены:

with A() as a, B() as b:
    suite

эквивалентно

with A() as a:
    with B() as b:
        suite

, Это также означает, что можно использовать псевдоним от первого выражения во втором (полезный при работе с соединениями/курсорами дб):

with get_conn() as conn, conn.cursor() as cursor:
    cursor.execute(sql)
0
ответ дан 23 November 2019 в 00:30
поделиться

Я думаю, вы захотите сделать это вместо этого:

from __future__ import with_statement

with open("out.txt","wt") as file_out:
    with open("in.txt") as file_in:
        for line in file_in:
            file_out.write(line)
18
ответ дан 23 November 2019 в 00:30
поделиться

contextlib.nested поддерживает это:

import contextlib

with contextlib.nested(open("out.txt","wt"), open("in.txt")) as (file_out, file_in):

   ...

Обновление:
Чтобы процитируйте документацию относительно contextlib.nested :

Не рекомендуется, начиная с версии 2.7 : Оператор with теперь поддерживает это функциональность напрямую (без сбивающих с толку причуд, подверженных ошибкам).

См. ответ Рафала Довгирда для получения дополнительной информации.

56
ответ дан 23 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: