2

以下のコードを見てください。

def getCrewListAll(self):
    """
    Set to crew list to all available crew
    """
    crew = getIdNumbers()
    return map(lambda cr: cr.id, crew)

cr.idここでの意味は何ですかid、組み込みのpython関数ですか?

4

4 に答える 4

6

あなたの例では、への参照cr.idは関数呼び出しではありません。変数のメンバー属性にアクセスします。これは、オブジェクトが何であれ、プレースホルダーです。crcrew

id はい、組み込み関数の名前です。しかし、実際のクラス定義を見ずに、これらのオブジェクトの内部で使用されているかどうかを知る方法はありません。

例として...これがたとえばdjangoアプリケーションの場合、モデルインスタンスにはid、そのレコードのデータベースIDを提供するメンバー属性があります。そのフレームワークのクラスの設計の一部です。

私はそれが属性であると仮定していますが...私たちが知っている限りでは、属性のように機能するメソッド呼び出しに似た計算されたプロパティである可能性もあります。あなたの例を見たときに見えるより多くのロジックを実行している可能性があります。

最後に、 はcr.id何でもよいので、メソッドである可能性もあり、マップは callable のリストを返します: cr.id()

于 2012-06-15T05:58:17.620 に答える
4

cr.id組み込み関数ではありません (割り当てない限り...)、crそこにあるオブジェクトの通常のメンバーです。

id(cr)はそのビルトインの呼び出しであり、の ID を返しcrます。

于 2012-06-15T05:41:49.387 に答える
2

ここでの本当の問題は、投稿したコードを理解していないことだと思います。このコンテキストでは、 と を理解する必要がありmapますlambda

mapリストの各要素に関数を適用し、これをリストとして返す関数です。

>>> def func(a):
...   return a * 2
...
>>> map(func, [1,2,3])
[2, 4, 6]

lambda関数を作成するためのショートカットと見なすことができます。上記は次のように記述できますlambda

>>> func = lambda a: a * 2
>>> map(func, [1,2,3])
[2, 4, 6]

あなたのコードmap(lambda cr: cr.id, crew)は何をしているのか: list 内の各オブジェクトから id 属性のリストを返しますcrew

問題は、このコードが実際にはあまり良くないことです。リスト内包表記を使用して同じ関数を書くことができます。これははるかに直感的です。

def getCrewListAll(self):
    return [cr.id for cr in getIdNumbers()]
于 2012-06-15T06:48:33.030 に答える
1

組み込みの id 関数がありますが、そのオブジェクトの実装に応じて、これに関連する場合と関連しない場合があります。いずれにせよ、ここでの id はそのオブジェクトのメンバー/プロパティです。

そのオブジェクトが持つメンバー/フィールドの種類を確認したい場合はdir(crew[0])、少なくとも 1 つを返すことを想定して行うことができます。適切に文書化されている場合は、これを行うこともできます。help(crew[0].id)

于 2012-06-15T05:38:31.653 に答える