7

xデータ型の単一のインスタンス (たとえばfloat) または型のリストであるオブジェクトがあるとしfloatます。

リストとしてラップされていることを確認できるものはありますかx。おそらく、必要に応じてシングルトンリストであり、そのタイプをチェックしたり、そのようなことをしたりしません。

list(x)シングルトンであるかどうかにかかわらず、常に機能するようなものxが欲しいのですが、シングルトンは反復可能ではないため、これは機能しません。

編集:詳細については、以下の私の回答を参照してください。

同時に、シングルトンからリストを構築する独自の関数を定義したくありません。また、次のようなインラインでの処理も行いたくありません。

from collections import Iterable
y = [x] if not isinstance(x, Iterable) else list(x)

これより簡潔なものが存在しない場合は、それで問題ありません。言語に既に組み込まれている、これを行うためのクリーンな方法を探しています。

このアプローチはクリーンで優れていると考える人もいると思いますisinstanceが、私は特に、事前に何か新しいことを書く必要のない、より簡潔なものを探しています。ドキュメント ページを検索しても何も見つからず、検索エンジンにこの質問をする方法がわかりません。

4

3 に答える 3

5

これは、あなたが尋ねなかった質問に対する回答ですが、おそらく回答する必要があります。関連するコンテキストを提供できなかったため、推測することしかできません。

インターフェイス契約に違反する引数が渡された場合、どのように対処すればよいですか?

しようとすべきではありません。呼んだらsum(2)ちゃんと出る

TypeError: 'int' オブジェクトは反復可能ではありません

イテラブルsumを期待していたので、それを与えませんでした。誰かが両方に電話をかけることを懸念している場合

my_function(2.2)
my_function([2.2, 4.4])

適切な応答は、TypeError を発生させることです。最初のケースを修正するとすぐに、誰かが呼び出します。

my_function([2.2, 'loretta'])

その場合もカバーしますか?彼らがあなたに自己参照リストを渡したらどうしますか? 厳密に型指定された言語のバックグラウンドを持っている場合は、Python を悪用して Java のように動作させたいという強い誘惑があります。これは悪い Python コードを生成するだけです: 欠陥の上にハックを積み上げたのです。

また、「型の安全性」も少し前菜ですdouble sqrt(float)。そうしないと、ドメインエラーを返す必要はありませんが、返されます。sqrtその引数の絶対値を取る必要がありますか? 呼び出しシグネチャのエラーをマスキングしても、欠陥が発見されず、後で予期しない無効な引数を取得したときに壊れることが保証されます。

于 2012-08-09T23:08:17.227 に答える
0

組み込まれているこのようなものは知りません。あなたのソリューションは私にとって最善の策のように見えますが、Iterable の代わりにシーケンス ABC を使用することもできます。

于 2012-08-09T22:30:56.980 に答える