問題タブ [functools]
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.
python - functools.wraps は何をしますか?
this answer to another question へのコメントで、何をしているのかわからないと誰かが言いましたfunctools.wraps
。だから、私はこの質問をしているので、将来の参照のために StackOverflow に記録が残されます:functools.wraps
正確には何をしますか?
python - functools.wraps デコレータの機能を拡張するには?
代わりに使用する新しいデコレータを作成したいと思います。それは、@wraps(f)
魔法@wraps(f)
が行うことと他のことを行います。どうすればいいですか?
具体的には、次の形式のデコレータがいくつかあります。
のようなデコレータを作成できるように思わ@wraps_with_first_line(f)
れ@wraps(f)
ますif not hasattr(wrapper, '_first_line'): wrapper._first_line = inspect.getsourcelines(f)[1]
。
python - 引数の定義を失うPythonデコレータ
私はこのようなブロックを使用しています:
一連のXML-RPC呼び出しをPythonモジュールにラップします。「提供される」デコレータは、リモートサーバーでの操作を公開するためにスタブ関数で呼び出されます。
このようなスタブを作成しているのは、後で関数、特にその引数に関する情報を調べることができるようにするためです。
リストされているように、上記のコードは引数情報を元の関数からラッパーに転送しません。で調べると、期待していたinspect.getargspec( remote_function )
のではなく、基本的に空のリストが表示されます。args=['a','b']
functools.update_wrapper()
オプションのパラメーターを使用して呼び出しに追加の指示を与える必要があると思いassigned
ますが、必要な効果を得るためにそのタプルに何を追加するかが正確にはわかりません。
名前とdocstringは新しい関数オブジェクトに正しく転送されますが、引数定義を転送する方法について誰かにアドバイスしてもらえますか?
ありがとう。
python - 関数ラップデコレータの「ブートストラップの問題」とは何ですか?
recursive_repr
Python 3.2 では、モジュールに新しい関数が導入されていreprlib
ます。
ソースコードを調べたところ、次のコードが見つかりました。
私が理解できなかったのは、 Bootstrapの問題とは何か、そしてなぜ@wraps(user_function)
適用できないのwrapper
ですか?
python - functools.partial と同様のラムダの違いは?
Python で、f
いくつかの 2 次引数を使用して渡したい関数があるとします (簡単にするために、最初の引数だけが変数のままであると仮定します)。
これら2つの方法の違いは何ですか(もしあれば)?
たとえば、のドキュメント ページにpartial
は、次の引用があります。
partial
クラスで定義されたオブジェクトは静的メソッドのように動作し、インスタンス属性のルックアップ中にバインドされたメソッドに変換されません。
クラスに提供された引数からクラスメソッドを作成するために使用された場合、ラムダメソッドはこれに悩まされますか(コンストラクターまたは後で関数を介して)?
python - 追加の引数を追加するfunctools.partialを実装する
functools.partialのドキュメントには、「ほぼ同等」と記載されています。
追加の引数を付加するバージョンを実装したい場合は、示された行を変更するだけでよいようです。
このコードをコピーするだけで心配すべき他の機能/落とし穴はありますか?
python - デコレーターを使用してラッパーを更新する際にエラーが発生しました
デコレータを使用して関数のラッパーを更新しようとしているときに、(少なくとも私には) 不可解なエラー メッセージが表示されました。これをどのように修正できるかについてのアイデアはありますか?
他の状況にも適用できるように、コードをできるだけ一般的なものにしようとしました。
望ましい出力:
実際の出力:
python - Python:オブジェクトを閉じる関数としてメソッドをエクスポートする
Python では、オブジェクト メソッドを通常の関数としてエクスポートしたいと考えています。オブジェクトは閉じられます。次のように:
これはうまく機能し、期待どおりに 15 を出力します。しかし、return-lambda-line をコメント行に置き換えると、次のエラーが発生して失敗します。
ラムダ式に頼るよりも functools を使用する方がクリーンであることを理解しています。したがって、functools の部分ツールまたはその他のツールを使用してこれを行う方法を知りたいと思います。
python - Pythonオブジェクトのリストを介したマップ/反復
複数の属性を持つユーザー定義のPythonオブジェクトのリストで関数を繰り返して呼び出す方法はありますか?それがEntryと呼ばれ、属性名と年齢が設定されているとしましょう。
私が何かを言うことができるように
functools.partial()の使用を考えていましたが、この場合でもそれが有効かどうかはわかりませんでした。
python - namedtuple クラスでのカスタムソート
私はnamedtupleクラスをよく使います。私は今日、そのようなクラスにカスタムソートを実装する良い方法があるかどうかを考えていました。つまり、デフォルトのソートキーをnamedtupleの最初の要素(次に2番目、3番目など)ではなくします。
私の最初の本能は、実装__lt__
して残り__eq__
を任せるtotal_ordering
ことでした(le、ne、gt、geに記入します):
でも:
ああ、そうです...他のメソッドが欠落している場合にtotal_ordering
のみ記入します。tuple/namedtuple にはそのようなメソッドがあるため、total_ordering は何もしていません。
だから私は私のオプションは
- namedtuple の使用をやめて、退屈なクラスを独自に作成し、total_ordering を使用し続けます
- namedtuple を使い続け、6 つの比較メソッドすべてを実装する
- namedtuple を使用し続け、ソート値を最初のフィールドとして挿入します。幸いなことに、クラスのインスタンスはそれほど多くありませんが、通常はフィールドの順序に依存してフィールドを初期化するだけなので、面倒な場合があります。たぶんそれは悪い習慣です。
これを解決するための最良の方法に関する提案はありますか?