どのようにポニー(ORM)はそのトリックを行いますか?
Pony ORMは、ジェネレーター式をSQLに変換する素晴らしいトリックを行います。例: >>> select(p for p in Person if p.name.startswith('Paul')) .order_by(Person.name)[:2] SELECT "p"."id", "p"."name", "p"."age" FROM "Person" "p" WHERE "p"."name" LIKE "Paul%" ORDER BY "p"."name" LIMIT 2 [Person[3], Person[1]] >>> Pythonにはすばらしいイントロスペクションとメタプログラミングが組み込まれていることは知っていますが、このライブラリが前処理なしでジェネレータ式を変換する方法を教えてください。魔法のようです。 [更新] ブレンダーは書きました: これがあなたが探しているファイルです。イントロスペクションウィザードを使用してジェネレータを再構築しているようです。Pythonの構文が100%サポートされているかどうかはわかりませんが、これは非常に優れています。–ブレンダー 私は彼らがジェネレータ式プロトコルからいくつかの機能を探っていると思っていましたが、このファイルを見て、ast関連するモジュールを見つけました...いいえ、彼らはその場でプログラムソースを検査していませんね?心が吹く... @BrenBarn:select関数呼び出しの外でジェネレータを呼び出そうとすると、結果は次のようになります。 >>> x = (p for p in Person if p.age > 20) >>> x.next() …