On Monday, September 18, 2017 at 6:25:09 PM UTC+5:30, Rustom Mody wrote: > On Monday, September 18, 2017 at 5:23:49 PM UTC+5:30, Rick Johnson wrote: > > On Sunday, September 17, 2017 at 8:51:38 PM UTC-5, INADA Naoki wrote: > > > > > > > > > > > > > > I would agree that testing any of those for '== True' or > > > > > the like is pointless redundancy, > > > > > > > > But what's wrong with syntactical redundancy when it brings > > > > _clarity_ to the source code? And why can't Python be smart? > > > > Consider the collowing code: > > > > > > > > if bool(someObject) == True: > > > > # Do something > > > > > > > > Yes, from a "byte-code perspective", this source code is > > > > superfluous, but, from a source code perspective, this code > > > > is perfectly balanced between explicit and implicit. > > > > > > I can't agree with you. It's too redundant. It doesn't > > > provide any information about what coder think. > > > > It's not about what the "coder thinks", many times what the > > coder thinks is wrong, it's about writing code that is > > intuitive to as wide an audience as possible. > > > > > While PEP 8 recommends `if x:`, I accept `if x > 0` or `if > > > len(x) > 0` when I review code in my company. > > > > So when `x` is an iterable, as in: > > > > if len(x) > 0: > > # blah > > > > You're okay with the explicit test. Or when `x` is a > > numeric, as in: > > > > if x > 0: > > # blah > > > > You're okay with the explicit test. So, from a standpoint of > > consistency, you /should/ be okay with this: > > > > if bool(x) == True: > > # blah > > > > But you're not! :-). > > I have a feeling Rick that you are mixing up two unrelated things: > - the bool(x) part > - the ... == True part > > The operation > x == True > for true(!)/proper booleans x is a no-op > because True == True is True > and False == True is False > And there are no other (proper) booleans > > However because anything else can be bool-ish even though not boolean > you need the bool(x) to effect the mapping: > > {None, 0, "" {}, []} → False > Everything_else → True > > This mapping is neither obvious nor trivial
Sufficiently non-obvious that I missed the key element: {None, 0, "" {}, [], False} → False -- https://mail.python.org/mailman/listinfo/python-list