タグ付けされた質問 「namedtuple」

11
Pythonの「名前付きタプル」とは何ですか?
Python 3.1での変更を読んで、私は何かを見つけました...予期しない: sys.version_infoタプルは名前付きタプルになりました。 名前付きタプルについてこれまで聞いたことがなく、要素は(タプルやリストのように)番号で、または(dictsのように)キーでインデックス付けできると思いました。両方の方法でインデックス付けできるとは思いもしませんでした。 したがって、私の質問は次のとおりです。 名前付きタプルとは何ですか? それらを使用するには? なぜ/いつ通常のタプルの代わりに名前付きタプルを使用する必要がありますか? 名前付きタプルの代わりに通常のタプルを使用する必要があるのはなぜ/いつですか? 「名前付きリスト」(名前付きタプルの可変バージョン)はありますか?

21
オプションのキーワード引数の名前付きタプルとデフォルト値
長めの中空の「データ」クラスを名前付きタプルに変換しようとしています。私のクラスは現在次のようになっています: class Node(object): def __init__(self, val, left=None, right=None): self.val = val self.left = left self.right = right 変換後namedtupleは次のようになります。 from collections import namedtuple Node = namedtuple('Node', 'val left right') しかし、ここに問題があります。元のクラスでは、値のみを渡すことができ、named / keyword引数にデフォルト値を使用することでデフォルトを処理していました。何かのようなもの: class BinaryTree(object): def __init__(self, val): self.root = Node(val) しかし、これは、リファクタリングされた名前付きタプルの場合、すべてのフィールドを渡すことを期待しているため機能しません。もちろん、Node(val)to の出現を置き換えるNode(val, None, None)ことはできますが、それは私の好みではありません。 それで、コードの複雑さを大幅に追加せずに(メタプログラミング)、私の書き換えを成功させることができる優れたトリックはありますか?それとも、錠剤を飲み込んで「検索と置換」を続行する必要がありますか?:)

11
「self.x = x; self.y = y; __init__のself.z = z”パターン?
次のようなパターンが表示されます def __init__(self, x, y, z): ... self.x = x self.y = y self.z = z ... かなり頻繁に、多くの場合、より多くのパラメーターを使用します。このような退屈な繰り返しを避ける良い方法はありますか?クラスはnamedtuple代わりに継承する必要がありますか?

6
名前付きタプルを辞書に変換する
私はPythonで名前付きタプルクラスを持っています class Town(collections.namedtuple('Town', [ 'name', 'population', 'coordinates', 'population', 'capital', 'state_bird'])): # ... Townのインスタンスを辞書に変換したいのですが。タウンのフィールドの名前や数に厳密に結び付けられたくありません。 フィールドを追加したり、まったく異なる名前のタプルを渡して辞書を取得したりする方法はありますか? 他の誰かのコードのように元のクラス定義を変更することはできません。だから私は町のインスタンスを取り、それを辞書に変換する必要があります。

2
名前付きタプルにヒントを入力する
次のコードを検討してください。 from collections import namedtuple point = namedtuple("Point", ("x:int", "y:int")) 上記のコードは、私が達成しようとしていることを示すための方法にすぎません。namedtupleタイプヒントで作りたいのですが。 意図した結果を達成するためのエレガントな方法を知っていますか?

10
Pythonで変更可能な名前付きタプルの存在?
誰かがnamedtupleを修正したり、変更可能なオブジェクトで機能するように代替クラスを提供したりできますか? 主に読みやすくするために、これを行うnamedtupleに似たものを望みます。 from Camelot import namedgroup Point = namedgroup('Point', ['x', 'y']) p = Point(0, 0) p.x = 10 >>> p Point(x=10, y=0) >>> p.x *= 10 Point(x=100, y=0) 結果のオブジェクトをピクルすることが可能でなければなりません。また、名前付きタプルの特性に従って、表現されるときの出力の順序は、オブジェクトを構築するときのパラメーターリストの順序と一致する必要があります。

11
Pythonのnamedtupleをjsonにシリアル化する
namedtupleフィールド名を保持したままaをjsonにシリアル化するための推奨される方法は何ですか? anamedtupleをjsonにシリアル化すると、値のみがシリアル化され、フィールド名は変換時に失われます。json化したときにフィールドも保持したいので、次のようにしました。 class foobar(namedtuple('f', 'foo, bar')): __slots__ = () def __iter__(self): yield self._asdict() 上記は、私が期待するようにjsonにシリアル化しnamedtuple、反復中の非タプルのような結果(私のユースケースには問題ありません)を除いて、私が使用する他の場所(属性アクセスなど)と同じように動作します。 フィールド名を保持したままjsonに変換する「正しい方法」とは何ですか?

10
名前付きタプルにdocstringを追加しますか?
簡単な方法で名前付きタプルにドキュメント文字列を追加することは可能ですか? 私は試した from collections import namedtuple Point = namedtuple("Point", ["x", "y"]) """ A point in 2D space """ # Yet another test """ A(nother) point in 2D space """ Point2 = namedtuple("Point2", ["x", "y"]) print Point.__doc__ # -> "Point(x, y)" print Point2.__doc__ # -> "Point2(x, y)" しかし、それはそれをカットしません。他の方法で行うことは可能ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.