ほとんどのpythonic callableはTrueを生成しますか?


11

このクラスcollections.defaultdictは、デフォルト値を生成するために使用されるデフォルトファクトリを取ります。

dict-likeオブジェクトに含まれる値のデフォルトをFalseにする必要がある場合、インスタンスは次のように作成できます。

d_false = defaultdict(bool)

デフォルト値の同じことを達成するための最もpythonicな方法は何Trueですか?

言い換えると、標準の呼び出し可能なオブジェクトが返さTrueれるのboolですか?

もちろん、ファクトリーはラムダ式として構築できます。

d_true = defaultdict(lambda: True)

しかし、これは車輪を再発明するかもしれません。


6
lambda: Trueそのdefaultdictをピクルスにする必要がない限り問題ありません。
アランフェイ

:うーん、私はすべての組み込み型のコンストラクタはfalsy値を返すと思うint() == 0list() == []str() == ''、など私はこれを行うための標準的な方法はないと思うので。
wjandrea

2
lambda: value構築物は、静的なデフォルト値で辞書を構築するための慣用的なPython的な方法です。関数を返す簡単な方法は知らないTrue
Mark Reed、


私の以前のコメントに続き、object()真実であること判明しました -それが有用かどうかはわかりません
wjandrea

回答:


9

さて、あなたはすることができます

d = defaultdict(True.__bool__)

しかし、私は個人的にはに行きlambda: Trueます。


4
@ Aran-Freyが上記で述べたようにpickle、ラムダでdefaultdictを使用することはできません。ですから、それが検討事項である場合True.__bool__は、それを実行する方法です。しかし、それは間違いなく醜い解決策です。(また、Python 2.xでは使用できません。EOLになるまで1か月で問題にならない可能性があります...)
Mark Reed

4

partial代わりに使用できますlambda

from functools import partial
from collections import defaultdict

d_true = defaultdict(partial(bool, True))

print(d_true['bona fide'])

(どちらもPython 2に対応しています。)


3

「真実の」値だけが必要な場合は、を使用できますobject。そのコンストラクターは、ブールコンテキストでtrueと評価されるオブジェクトを返します。しかし、実際のブール値が必要Trueな場合は、lambda: True構成よりも良い方法がわかりません。

ただし、Aran-Freyが上で述べたように、pickleファクトリがであるdefaultdict は使用できませんlambda。それが考慮事項である場合は、Andrej Keselyのの解を使用しTrue.__bool__ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.