• Jerkface (any/all)@lemmy.ca
    link
    fedilink
    English
    arrow-up
    5
    ·
    edit-2
    3 days ago

    Truthiness is so fundamental, in most languages, all values have a truthiness, whether they are bool or not. Even in C, int x = value(); if (!x) x_is_not_zero(); is valid and idiomatic.

    I appreciate the point that calling a method gives more context cues and potentially aids readability, but in this case I feel like not is the python idiom people expect and reads just fine.

    • iAvicenna@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      ·
      3 days ago

      I don’t know, it throws me off but perhaps because I always use len in this context. Is there any generally applicable practical reason why one would prefer “not” over len? Is it just compactness and being pythonic?

      • Jerkface (any/all)@lemmy.ca
        link
        fedilink
        English
        arrow-up
        1
        ·
        edit-2
        3 days ago

        It’s very convenient not to have to remember a bunch of different means/methods for performing the same conceptual operation. You might call len(x) == 0 on a list, but next time it’s a dict. Time after that it’s a complex number. The next time it’s an instance. not works in all cases.

        • sugar_in_your_tea@sh.itjust.works
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 days ago

          dict

          len also works on a dict.

          The point stands. If you want to check if a value is “empty,” use the check for whether it’s “empty.” In Python, that’s not. If you care about different types of empty (e.g. None vs [] vs {}), then make those checks explicit. That reads a lot better than doing an explicit check where the more common “empty” check would be correct, and it also make it a lot more obvious when you’re doing something special.

        • iAvicenna@lemmy.world
          link
          fedilink
          English
          arrow-up
          2
          ·
          3 days ago

          I feel like that only serves the purpose up to the point that methods are not over reaching otherwise then it turns into remembering what a method does for a bunch of unrelated objects.