1

私は次のクラスを持っています

class MetricLst(object):
    def __init__(self,n):
        self.min = min(n)
        self.max = max(n)

lst = [1,2,3,4,5]
p = MetricLst(lst)
print p.max
5
print p.min
1

引数付き

class MetricArg(object):
    def __init__(self,*args):
        self.min = min(args)
        self.max = max(args)

p = MetricArg(1,2,3,4,5)
p.max
print 5
p.min
print 1

次の質問があります。

  1. MetricArg を使用する場合、リストを使用してオブジェクトを作成するエレガントな方法はありますか?
  2. クラスを作成するときに *args を優先する必要がありますか (可能であれば)?
4

2 に答える 2

3
  1. *args*構文には、同等のミラー呼び出しがあります。

    p = MetricArg(*somelist)
    

    の要素はsomelistへの引数として使用されますMetricArg

  2. それは、提示する API の種類によって異なります。クラスが最も便利に呼び出されると予想されるため、0 個以上の引数を受け入れたい場合は、その形式を使用します。

    Python API では、関数print()os.path.join()関数は、任意の長さのパラメーター リストを使用する callable のよく知られた例です。

于 2013-02-24T21:22:09.297 に答える
1

リストを可変個引数関数またはコンストラクターに渡すことができます

L = [1, 2, 3, 4, 5]
p = MetricArg(*L)

リストを受け入れる関数の代わりに可変個引数関数を使用するかどうかは、実際には関数に依存します。

関数/コンストラクターは動的に構築されたリストで頻繁に呼び出されますか、それともほとんど固定数のパラメーターを受け取りますか?

リストがほとんど動的である場合は、コードをで乱雑にしないため、リストを受け入れることが最善のアイデアです*L。一方、ほとんどの場合、引数の数が呼び出し元で固定されていて少ない場合は、引数を渡すだけの方が、リストを作成して渡すよりも読みやすくなります。

于 2013-02-24T21:25:08.650 に答える