問題タブ [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.

0 投票する
7 に答える
12500 参照

python - 動的に作成されたメソッドとデコレーター、エラー「functools.partial」オブジェクトに属性「__module__」がありません

現在、EndpointsModel を使用して、AppEngine 上のすべてのモデル用の RESTful API を作成しています。RESTful であるため、これらの API には繰り返しのコードが多くあり、これを回避したいと考えています。

例えば:

それらをジェネリックにしたい。だから私はクラスにメソッドを動的に追加しようとします。私がこれまでに試したこと:

しかし、のデコレータとパーシャルの'functools.partial' object has no attribute '__module__' exception. 間にいくつかの競合があるためだと思います。endpoints.methodしかし、それを回避する方法がわかりません。

関連記事:

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

python - Python: 複数引数の関数の合成 /without/ functools

物事の蓄積を見つける一見単純な関数の作成に取り組んでいます。これは非常に抽象的で、署名は次のとおりです。

この質問の詳細:

「Accumulate は、合計と積と同じ引数 term と n を引数として取り、現在の項を前の項の累積とどのように結合するかを指定する (2 つの引数の) コンバイナ関数と、何を指定するかを指定する開始値を指定します。累積を開始するために使用する基準値。」-- カリフォルニア大学バークレー校 CS61A 2013 年秋、John DeNero より

「コンバイナ」とは、「開始」から「n」までの用語が累積される方法を指します (add、sub、mul など)。コンバイナーは最大 2 つの引数を取ります。

「項」とは、「開始」で始まり「n」で終わる各項に適用される機能を指します。これは、各項の 2 乗、sqrt、n%//2 を取ることを意味する場合があります。

functools.reduce を使用せずにこの問題に取り組みたいと考えています。

関数合成のループを作らなければならないことはわかっていますが、ここが私を混乱させる部分です。そして、各関数に 2 つの引数 (古い累積と現在の項) を取らせる必要があります。

私はこれに2日間取り組んできましたが、自分自身をたくさん混乱させたので、私のコードはめちゃくちゃです. 助言がありますか?

「start+now+1」とは、少なくとも n の項を取得するまで、term(n) でコンバイナ関数の実行を開始できないという事実を指します。しかし、古い合計を保存して更新しながら、最後の2つの値を結合し続ける必要があるため、混乱します。

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

python - Python モック: @wraps(f) の問題

私が書いた単純なデコレータをテストしたい:

次のようになります。

次に、python-mock を使用してテストします。

しかし、それは次のようにキックバックします:

functools.wraps()はヘルパーラッパーであることを知っています。したがって、それを取り出すと、テストは機能します。

functools.wraps() で Mock をうまくプレイさせることはできますか?

パイソン 2.7.3

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

python - functools.partial が期待される関数オブジェクトを生成することをテストする方法

ある API から別の API に移行する場合、各 API の同様のキーワード間でマッピングすると役立つ場合があります。これにより、ユーザーが内部でさまざまな API に煩わされることなく、1 つのコントローラー API を他のライブラリに柔軟にディスパッチできるようになります。

あるライブラリ にother_apiというメソッドが"logarithm"あり、ベースのキーワード引数がコードから除外する必要があるものであるとし"log_base_val"ます。それを使用するには、other_api次のように入力する必要があります(たとえば):

次のようなおもちゃのクラスを考えてみましょう。

を使用すると、次のようFooに、この引数が常に と呼ばれる他の A​​PI をマップできます。base

andは ( in 、 fromを使用して)lnと論理的に同等です。log_base_val=math.ekwargsfunctools

ただし、呼び出しによって同じ引数を手動でバインドするfunctoolsと、異なる関数オブジェクトが生成されます。

したがって、テストはf1 == f2意図したとおりに成功しません。

問題は、引数バインディング関数が正しい出力関数オブジェクトになったかどうかをテストする規定の方法は何ですか?

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

python - Pandas ビューの動的生成

すべてが同じ pandas データフレームを参照するいくつかのクラスがありますが、各クラスに関連するのはデータ フレームの一部のみです。また、高度なインデックス作成を使用せずに、関連する行に簡単にアクセスできるようにしたいと考えています。これは、インデックス内のレベルが数によって繰り返されるためです。その結果、各クラスがそのスライスを表示できるように、部分関数を生成するコードを作成しました。

ただし、参照が foo.x()[date] のように見える必要はなく、代わりに foo.x[date] のように見えることが望ましいと思います。

その結果、関数をラップして値を返すデコレーターを作成しました。

私の懸念は、データフレームの現在の状態を常に取得できるとは限らないことです。

これは私の目標を達成するための正しい方法ですか?

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

python - デコレータの引数を修正する

次のサードパーティのデコレータがあります。

@my_retryに似て@retryいますが、引数が固定されている別のデコレータ を作成したいと思います。

私はそれを使ってみましたfunctools.partial:

しかし、新しいデコレータを使用すると、次の例外が発生します。

私は何を間違っていますか?

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

python - Python: functools、メソッドのラッパー デコレータ: '?' を使用すると ipython が適切な定義を返すようにする

functools を使用してデコレータを作成しています。これにより、メソッド呼び出しの詳細をログに記録できます。

私はそれを書くためにここで多くの助けを得ました...それは私自身のものではなく、私はまだそれがどのように機能するかを学んでいます...

私は ipython をよく使います。使用するときは次のとおりです。

これは私の問題行です...さらに、ドキュメント文字列をまだ書いていません... :|

私はそれをしたい:

ラッパー:

更新: ipython 内から、何が起こっているかを確認するためにこれを行いましたが、まだ役に立ちませんでした..

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

python - ボタン信号を Qt のスロットにバインドするために必要なさらに別のソリューション

Slicerqtを使用して、Pythonでモジュールを開発しようとしています。ボタンのリスト ( QPushButton) があり、それぞれの"clicked"シグナルを同じメソッドにバインドするが、異なる引数を渡す必要があります (つまり、どのボタンが押されたかを知るためです)。

私が探しているのは次のようなものです:

ここここで提案されている3つの方法をすべて使用しましたが、別の問題があります。

  • QSignalMapperPyQt/PySide を使用できないため、解決策はめちゃくちゃです。

  • ラムダソリューションにより、どのボタンが押されても、コードは常に最後のボタンのテキストを出力します。私は次のようなものを書きました:

    /li>
  • 部分的な解決策は次のように実装されました。

    しかし、次のエラーが発生しました。

    /li>

現在、私はさまざまな書かれた方法の恐ろしいリストを使用しているので、うまくいく私の醜い解決策は次のとおりです。

私の質問が以前に尋ねられていないことを願っています。あなたが私を助けてくれることを願っています.

ありがとう!