ブール型コンテキストでPythonタプルを使用する場合、空でない場合にのみTrue
とみなされます。ブール型コンテキスト内のPython namedtuple
collections.namedtuple
の場合も同様ですか?
ブール型コンテキストでPythonタプルを使用する場合、空でない場合にのみTrue
とみなされます。ブール型コンテキスト内のPython namedtuple
collections.namedtuple
の場合も同様ですか?
が、あなたはできません任意の名前付きタプルの空のインスタンスを作成します。なぜなら、名前付きタプル型を作成するときには、先頭の要素の数を指定する必要があるからです。空のnamedtupleを持つことができる唯一の方法は、常に空の名前付きタプル型を持つことです。
はい、一般的には、namedtuple
の各値の名前を指定するので、実際には起こりません。何の名前を指定しないと、あなたは空のタプル型を作成できるようになるが、そのインスタンスは常にが空になりますので、このようなタイプは、非常に有用ではない:はい、理論的には
>>> empty = collections.namedtuple("empty", [])
>>> empty()
empty()
>>> bool(empty())
False
はい。これは、名前付きタプルクラスを調べることで確認できます。
Python 3.3以降で._source
、verbose=True
というオプションを使用して、名前付きタプルクラスのソースコードを表示する方法の1つは、namedtuple()
です。名前付きタプルがtuple
まで拡張され、__nonzero__()
または__len__()
メソッドをオーバーライドしないことがわかります。つまり、彼らは考えたようにtuple
と同じロジックを使用しています。
また、名前付きタプルクラスの__nonzero__
および__len__
属性をチェックすることもできます。あなたはそれが何を持っていることを__nonzero__
属性が定義されて見ていない、と__len__
属性がtuple
ためのものと同じであることになります。
>>> A = namedtuple('A', ['x'])
>>> A.__len__ == tuple.__len__
True
ので、明確にするために、便利な 'namedtuple'sは常にtruthyですか? – user200783
@PaulBaker:はい、いつも空ではないからです。 – BrenBarn