問題タブ [with-statement]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
18321 参照

python - Python の RAII - スコープを離れるときの自動破棄

PythonでRAIIを見つけようとしています。Resource Allocation Is Initialization は、オブジェクトが作成時に初期化される C++ のパターンです。失敗すると、例外がスローされます。このようにして、プログラマーは、オブジェクトが半分構築された状態のままになることは決してないことを知っています。Python はこれだけのことができます。

ただし、RAII は C++ のスコープ規則とも連携して、オブジェクトの迅速な破棄を保証します。変数がスタックからポップされるとすぐに、変数は破棄されます。これは Python で発生する可能性がありますが、外部参照または循環参照がない場合に限られます。

さらに重要なことに、オブジェクトの名前は、それが含まれている関数が終了するまで (場合によってはそれよりも長く) 存在し続けます。モジュール レベルの変数は、モジュールの存続期間中保持されます。

次のようなことをすると、エラーが発生します。

使用後に名前を手動で削除することもできますが、それは非常に見苦しく、私の努力が必要です。

そして、この場合、Do-What-I-Mean を実行したいと思います。

Python はある程度の範囲指定を行いますが、インデント レベルではなく、機能レベルでのみ行います。名前を再利用できるように、変数の範囲を限定するためだけに新しい関数を作成する必要があるのはばかげているように思えます。

Python 2.5 には"with" ステートメント がありますが、それには関数を明示的に配置する必要があり__enter____exit__通常は終了ベクトルに関係なく、ファイルやミューテックス ロックなどのリソースをクリーンアップする方向に向いているようです。スコーピングには役立ちません。または、何か不足していますか?

「Python RAII」と「Python スコープ」を検索しましたが、この問題に直接かつ正式に対処するものは見つかりませんでした。私はすべてのPEPに目を通しました。この概念は、Python 内では扱われていないようです。

Python でスコープ変数を使用したいので、私は悪い人ですか? それはあまりにも非Pythonicですか?

私はそれを理解していませんか?

おそらく、言語の動的な側面の利点を取り除こうとしているのでしょう。スコープを強制したい場合があるのは利己的ですか?

怠慢な変数の再利用の間違いをコンパイラ/インタプリタに見つけてもらいたいと思うのは怠惰ですか? そうですね、もちろん怠け者ですが、悪い意味で怠け者なのでしょうか。

0 投票する
3 に答える
25284 参照

python - コンテキストマネージャーを使用すると、オブジェクトはNoneになります

なぜこれが機能しないのですか?

私は得る:

0 投票する
6 に答える
20415 参照

python - __enter__ に引数を渡す

特にこの記事からのステートメントについて学ぶだけです

問題は、に引数を渡すことはでき__enter__ますか?

次のようなコードがあります。

filename と param_dict をパラメーターとして に渡したいと思います__enter__。それは可能ですか?

0 投票する
1 に答える
1746 参照

sql - サブSELECTクエリからのCOUNT値を使用して、FETCHROW制限を決定します

次の無効なDB2クエリを書き直して、必要なものを取得する方法があるかどうかを知りたいです。

'トークンINTEGERが無効でした。有効なトークン:ROWROWSのエラー。

私の目標は、2番目のWITHステートメントpull_countを使用して、1番目のWITHステートメントpullのFETCH制限を設定することです。使用可能な行の半分だけをSELECTしようとしています。

助言がありますか?

0 投票する
5 に答える
61226 参照

python - Python 条件付き "With" ロック設計

with ステートメントを使用して共有ロックを実行しようとしています

意味がある?私は基本的に、まだロックを持っていない場合にのみ実行したいと考えています。

これを達成できることに加えて、それは悪い設計ですか? 自分自身を取得/解放するだけですか?

0 投票する
3 に答える
255 参照

python - Python でファイルを閉じる

プロセスを実行してその出力を破棄する最も簡単な方法に関するこのディスカッションでは、次のコードを提案しました。

別の開発者がこのバージョンを提案しました:

私の中の C++ プログラマーは、いつオブジェクトがリリースされるかは実装の詳細であると言いたいので、不確定な期間ファイルハンドルを開いたままにしておくことを避けるために、with. しかし、いくつかリソースsubprocess.callは、Python がこのようなコードに対して常に、またはほぼ常に参照カウントを使用することを示唆していますwith

(特に、ファイルハンドルを開いたままにしておくこと/dev/nullは問題にならないと思うので、重要なファイルであると考えてください。)

どのアプローチが最適ですか?

0 投票する
1 に答える
4641 参照

python - Python 'with' ステートメントの使用中に例外をキャッチする - パート 2

これは、Python 'with' ステートメントを使用しているときに例外をキャッチするという質問の続きです。
私はかなりの初心者で、GNU/linux で Python 3.2 を使用して次のコードをテストしました。

上記の質問では、「with」ステートメントから例外をキャッチするために、これに似たものが提案されました。

some_code が IOError をキャッチせずに発生させたらどうなるでしょうか? 明らかに外側の「except」ステートメントに引っかかっていますが、それは私が本当に望んでいたものではありませんでした。
大丈夫、some_code を別の try-except でラップする、などと言うことができますが、例外はどこからでも発生する可能性があり、コードのすべての部分を保護することは不可能であることを知っています。
要約すると、 open('foo.txt', 'a') で例外が発生した場合にのみ 'error' を出力したいので、次のコードが標準的な推奨方法ではない理由を尋ねるためにここにいます。これを行う:

ありがとうございました!

0 投票する
2 に答える
363 参照

vb.net - ブロックを使用してVB.NETを終了する

次のコードブロックでは、VB.NETは次の場合にWithブロックを正常に終了しますかVar1 = 2

これがVB6の問題であり、予測できない動作で頭痛を引き起こすことを覚えています-VB.NETにも同じことが当てはまりますか?

0 投票する
1 に答える
1184 参照

plsql - ネストされたテーブルを検索し、結果を新しいネストされたテーブルに挿入します。

WITH SELECTの結果をネストされた配列(2つの属性を持つ)に挿入するにはどうすればよいですか?

DDLおよびDMLSQLは次のとおりです。

NUMBER(8)について心配する必要はありません





または、ネストされた配列のパラメーターを含むVIEWを作成して、単純に呼び出すことができますか?

0 投票する
3 に答える
467 参照

javascript - パフォーマンスと「より良い実践」:一連のパラメーターを使用したステートメントと関数

私は最近JSで多くのテンプレートを作成しているので、常に「邪悪な」withステートメントに出くわしました。

変数の前にオブジェクトを付ける必要がないため、テンプレートの操作がはるかに簡単になります。

withステートメントが悪いことと、パフォーマンスが低下する可能性があることを聞いて、私は別の解決策に着手しました。

私の解決策:たくさんのパラメーターを持つ関数

これが私のコードです:

注:これらはまったく同じことを実現します。どちらも誰からも抽象化されているので、不愉快に長いパラメータリストは大したことではありません。

どちらが優れているのか疑問に思います。withステートメントを使用するか、パラメーターの数が非常に多くなる可能性のある関数を使用するかです。

誰かがより良い解決策を持っていない限り...?

ありがとう!マットミューラー