
[code]

    with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:
      処理1
      処理2
    
[/code]


CC BY-SA 4.0
2022-05-25T12:12:25.477
89053
2022-05-25T21:51:46.063
2022-05-25T16:18:05.157
3060
47606
question
python
以下のようなPythonコードをwith文を使わずに実現することはできるでしょうか？


これらの記事とPEP 343,346に情報があるようです。  
with文の仕様がどんなものか、どのような動きをするものかが説明されているのでしょう。

[Is Python _with_ statement exactly equivalent to a try - (except) - finally
block?](https://stackoverflow.com/q/26096435/9014308)  
[What is the equivalent try statement of the with
statement?](https://stackoverflow.com/q/59322585/9014308)  
[PEP 343 – The "with" Statement](https://peps.python.org/pep-0343/)  
[PEP 346 – User Defined ("with")
Statements](https://peps.python.org/pep-0346/)

こうした構文が：

>
[code]

>     with EXPR as VAR:
>         BLOCK
>  
[/code]

こちらに展開されると書いてあります。

>
[code]

>     mgr = (EXPR)
>     exit = type(mgr).__exit__  # Not calling it yet
>     value = type(mgr).__enter__(mgr)
>     exc = True
>     try:
>         try:
>             VAR = value  # Only if "as VAR" is present
>             BLOCK
>         except:
>             # The exceptional case is handled here
>             exc = False
>             if not exit(mgr, *sys.exc_info()):
>                 raise
>             # The exception is swallowed if exit() returns true
>     finally:
>         # The normal and non-local-goto cases are handled here
>         if exc:
>             exit(mgr, None, None, None)
>  
[/code]

質問のように、`EXPR as
VAR`の部分が2つ存在するのだとしたら、それぞれ用に`mgr,exit,value`のセットを作成して、`mgr1,exit1,value1`,`mgr2,exit2,value2`とでもしてみれば出来そうな感じです。  
完全には等価に出来ないかもしれませんが、試してみてください。


CC BY-SA 4.0
2022-05-25T15:59:28.777
89056
2022-05-25T21:51:46.063
2022-05-25T21:51:46.063
26370
26370
89053
answer