タグ付けされた質問 「yield」

yieldは、(1)ジェネレーター関数の作成を容易にするキーワード、(2)あるコルーチンから別のコルーチンに制御を移すRubyステートメント、(3)スイッチ式から値を生成するために使用されるJavaステートメントです。

30
「yield」キーワードは何をしますか?
yieldPython でのキーワードの用途とは何ですか? たとえば、私はこのコードを理解しようとしています1: def _get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance - max_dist < self._median: yield self._leftchild if self._rightchild and distance + max_dist >= self._median: yield self._rightchild そしてこれが呼び出し元です: result, candidates = [], [self] while candidates: node = candidates.pop() distance = node._get_dist(obj) if distance <= max_dist and distance >= min_dist: …

17
C#で使用されるyieldキーワードは何ですか?
「IList <>のフラグメントのみを公開するにはどうすればよいですか」の質問の回答の1つに、次のコードスニペットが含まれていました。 IEnumerable<object> FilteredList() { foreach(object item in FullList) { if(IsItemInPartialList(item)) yield return item; } } そこではyieldキーワードは何をしますか?私はそれがいくつかの場所で参照されているのを見ました、そしてもう一つの質問ですが、私はそれが実際に何をしているのか完全には理解していません。あるスレッドが別のスレッドに譲歩するという意味で、私は歩留まりについて考えることに慣れていますが、それはここでは関係がないようです。
828 c#  yield 


8
実際には、Python 3.3の新しい「yield from」構文の主な用途は何ですか?
PEP 380に頭を悩ませるのに苦労しています。 「yield from」が役立つ状況は何ですか? 従来の使用例は何ですか? なぜそれがマイクロスレッドと比較されるのですか? 【更新】 今、私は自分の困難の原因を理解しています。私はジェネレータを使用しましたが、実際にコルーチンを使用したことはありません(PEP-342で導入)。いくつかの類似点にもかかわらず、ジェネレーターとコルーチンは基本的に2つの異なる概念です。新しい構文を理解するには、ジェネレーターだけでなく、コルーチンを理解することが重要です。 私見コルーチンは最も不明瞭なPython機能であり、ほとんどの本はそれを役に立たなくて興味がないように見せています。 素晴らしい回答に感謝しますが、agfとDavid Beazleyのプレゼンテーションにリンクしている彼のコメントに特に感謝します。デビッド・ロックス。
407 python  yield 

23
Node.js(JavaScript)で待機するにはどうすればよいですか?
個人的なニーズに合わせて、スクリプトのようなコンソールを開発しています。長時間停止できるようにする必要がありますが、私の調査によると、node.jsには必要に応じて停止する方法がありません。しばらくするとユーザーの情報を読むのが難しくなっています...いくつかのコードを目にしましたが、次のような他のコードが動作するようにしておく必要があると思います。 setTimeout(function() { }, 3000); ただし、このコード行の後のすべてが、一定期間後に実行する必要があります。 例えば、 //start-of-code console.log('Welcome to My Console,'); some-wait-code-here-for-ten-seconds.......... console.log('Blah blah blah blah extra-blah'); //endcode. 私はまたのようなものを見てきました yield sleep(2000); しかし、node.jsはこれを認識しません。 どうすればこの拡張ポーズを達成できますか?


8
イールドリターンを使用したIEnumerableおよびRecursion
を持っています IEnumerable<T>WebFormsページでコントロールを見つけるために使用しメソッドがあります。 メソッドは再帰的でありyield return、再帰呼び出しの値がreturnigであるときに、必要なタイプを返すときに問題が発生します。 私のコードは次のようになります: public static IEnumerable<Control> GetDeepControlsByType<T>(this Control control) { foreach(Control c in control.Controls) { if (c is T) { yield return c; } if(c.Controls.Count > 0) { yield return c.GetDeepControlsByType<T>(); } } } これは現在、「式の型を変換できません」エラーをスローします。ただし、このメソッドがtypeを返す場合IEnumerable<Object>、コードはビルドされますが、誤ったタイプが出力に返されます。 yield return再帰を使用しながら使用する方法はありますか?

14
JavaScriptのyieldキーワードは何ですか?
JavaScriptで「yield」キーワードについて聞いたことがありますが、それについてのドキュメントは非常に貧弱です。誰かがその使用法とその使用目的を説明してくれますか(または説明するサイトを勧めます)。

8
通常のIEnumerableを使用できるのに、なぜyieldキーワードを使用するのですか?
このコードを考えると: IEnumerable<object> FilteredList() { foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) yield return item; } } なぜ私はそれをこのようにコード化すべきではないのですか?: IEnumerable<object> FilteredList() { var list = new List<object>(); foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) list.Add(item); } return list; } yieldキーワードが何をするのか私は理解しています。コンパイラーに特定の種類のもの(イテレーター)を作成するように指示します。しかし、なぜそれを使うのですか?コードが少し少ないだけでなく、私にとって何ができるのでしょうか?
171 c#  yield 

6
イールドリターンを含むすべての列挙型を一度に返します。ループせずに
カードの検証エラーを取得する次の関数があります。私の質問は、GetErrorsの扱いに関するものです。両方のメソッドの戻り値の型は同じIEnumerable<ErrorInfo>です。 private static IEnumerable<ErrorInfo> GetErrors(Card card) { var errors = GetMoreErrors(card); foreach (var e in errors) yield return e; // further yield returns for more validation errors } エラーGetMoreErrorsを列挙せずにすべてのエラーを返すことは可能ですか? 考えてみると、これはおそらくばかげた質問ですが、私が間違っていないことを確認したいと思います。

17
Pythonでのジェネレーターオブジェクトのリセット
複数のyieldで返されたジェネレーターオブジェクトがあります。このジェネレータを呼び出す準備は、かなり時間がかかる操作です。そのため、ジェネレータを何度か再利用したいと考えています。 y = FunctionWithYield() for x in y: print(x) #here must be something to reset 'y' for x in y: print(x) もちろん、私はコンテンツを単純なリストにコピーすることを念頭に置いています。ジェネレーターをリセットする方法はありますか?
153 python  generator  yield 

12
同等のC ++からPythonジェネレーターへのパターン
C ++で模倣する必要があるPythonコードの例をいくつか持っています。特定のソリューション(コルーティンベースの歩留まりソリューションなど、それらは許容できる回答ですが)は必要ありません。何らかの方法でセマンティクスを再現する必要があるだけです。 パイソン これは基本的なシーケンスジェネレーターであり、実体化されたバージョンを格納するには明らかに大きすぎます。 def pair_sequence(): for i in range(2**32): for j in range(2**32): yield (i, j) 目標は、上記のシーケンスの2つのインスタンスを維持し、それらをセミロックステップでチャンクで反復処理することです。以下の例ではfirst_passバッファを初期化するための対の配列を使用し、そしてsecond_pass再生する同じ正確な配列をし、再度バッファを処理します。 def run(): seq1 = pair_sequence() seq2 = pair_sequence() buffer = [0] * 1000 first_pass(seq1, buffer) second_pass(seq2, buffer) ... repeat ... C ++ C ++のソリューションで見つけることができる唯一のことはyield、C ++コルーチンを模倣することですが、これを行う方法に関する適切なリファレンスは見つかりませんでした。この問題の代替(一般的ではない)ソリューションにも興味があります。パス間でシーケンスのコピーを保持するのに十分なメモリバジェットがありません。



8
Python:ジェネレータ式と収量
Pythonでは、ジェネレーター式を介してジェネレーターオブジェクトを作成することと、yieldステートメントを使用することの間に違いはありますか? 利回りの使用: def Generator(x, y): for i in xrange(x): for j in xrange(y): yield(i, j) ジェネレータ式を使用する: def Generator(x, y): return ((i, j) for i in xrange(x) for j in xrange(y)) どちらの関数も、(0,0)、(0,1)などのタプルを生成するジェネレーターオブジェクトを返します。 どちらか一方の利点はありますか?考え? みんなありがとう!これらの回答には多くの優れた情報と参考文献があります!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.