タグ付けされた質問 「with-statement」

10
Pythonの「with」ステートメントはどのように設計されていますか?
with今日、初めてPython ステートメントに出会いました。Pythonを数か月間軽く使用していて、その存在すら知りませんでした!そのややあいまいなステータスを考えると、私は尋ねる価値があると思いました: Python withステートメントは何のために設計されたものですか? あなたはそれを何に使っているの? 私が知っておく必要がある落とし穴、またはその使用に関連する一般的なアンチパターンはありますか?それはよりよい使用である任意の例try..finallyよりもwith? なぜもっと広く使われないのですか? どの標準ライブラリクラスと互換性がありますか?

6
「with」ステートメント内の複数の変数?
withPythonのステートメントを使用して複数の変数を宣言することは可能ですか? 何かのようなもの: from __future__ import with_statement with open("out.txt","wt"), open("in.txt") as file_out, file_in: for line in file_in: file_out.write(line) ...または問題を同時に2つのリソースをクリーンアップしていますか?

30
JavaScriptの「with」ステートメントの正当な用途はありますか?
with声明に関する私の回答に対するアラン・ストームのコメントは私に考えさせられました。私はこの特定の言語機能を使用する理由をめったに見つけず、それがどのように問題を引き起こす可能性があるかについてあまり考えたことはありませんでした。さて、私はwithその落とし穴を避けながら、私がをどのように効果的に使用できるかについて興味があります。 このwithステートメントはどこで役に立ちましたか?

6
Pythonの「__enter__」と「__exit__」の説明
私はこれを誰かのコードで見ました。どういう意味ですか? def __enter__(self): return self def __exit__(self, type, value, tb): self.stream.close() from __future__ import with_statement#for python2.5 class a(object): def __enter__(self): print 'sss' return 'sss111' def __exit__(self ,type, value, traceback): print 'ok' return False with a() as s: print s print s


8
(PythonのMockフレームワークを使用して)withステートメントで使用されているopenをモックするにはどうすればよいですか?
モックを使用して次のコードをテストするにはどうすればよいですか(モック、パッチデコレーター、およびMichael Foordのモックフレームワークによって提供されるセンチネルを使用)。 def testme(filepath): with open(filepath, 'r') as f: return f.read()

4
Pythonの「with」ステートメントをtry-exceptブロックで使用する
これは、Pythonの「with」ステートメントをtry-exceptブロックと組み合わせて使用​​する正しい方法ですか?: try: with open("file", "r") as f: line = f.readline() except IOError: <whatever> もしそうなら、それから物事の古い方法を考えてください: try: f = open("file", "r") line = f.readline() except IOError: <whatever> finally: f.close() ここでの「with」ステートメントの主な利点は、3行のコードを削除できることですか?この使用例では、私にとって説得力があるとは思えません( "with"ステートメントには他の使用があることは理解していますが)。 編集:上記の2つのコードブロックの機能は同じですか? EDIT2:最初のいくつかの回答は「with」を使用することの利点について一般的に述べていますが、それらはここではわずかな利点のようです。私たちは何年もの間、明示的にf.close()を呼び出してきました(またはそうすべきだったはずです)。1つの利点は、ずさんなコーダーが「with」を使用することから利益を得るということです。

1
プロキシで「with」ステートメントを使用することは悪い習慣ですか?
まず第一に、明確にしたいのですが、これwithは非推奨であり、それを使用することは一般的に悪い習慣です。 しかし、私の質問は特別なケースについてです:Proxyのパラメーターとして特別なオブジェクトを使用しますwith。 バックグラウンド 私はプロジェクトに取り組んでおり、コードへのアクセスをグローバルスコープに制限する必要があります。 一つのアプローチは、ループを使用するのが良いかもしれないevalの値で一定の変数を作成している、undefinedグローバルオブジェクトのプロパティごとに、しかし使用するよりもさらに悪い思われるwith、として作成した変数へのアクセスを制限することはできませんletとconst。 アイデア のアイデアはProxy、の引数としてaを使用するwithことです... hastrapは常にを返すtrueので、withステートメントを超えて検索や割り当てを行うことはできません getトラップは正常に動作しますが、ReferenceError存在しない変数(プロパティ)にアクセスしようとするとs がスローされます。 set トラップは正常に動作します(またはカスタムロジックが含まれている可能性があります) targetオブジェクトにはありません[[Prototype]](つまり、で作成されましたObject.create(null)) targetオブジェクトには@@unscopables空のオブジェクトの値を持つプロパティがあり、すべてのプロパティのスコープを許可します だから、このコードのようなもの: const scope = Object.create(null) Object.assign(scope, { undefined, console, String, Number, Boolean, Array, Object, /* etc. */ [Symbol.unscopables]: Object.create(null) }) const scopeProxy = new Proxy(scope, { get: (obj, prop) => { if (prop in obj) return …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.