Hi, I recently realised one can use immutable default arguments to avoid a chain of:

def append_to(element, to=None):
    if to is None:
        to = []

at the beginning of each function with default argument for set, list, or dict.

  • Narann@jlai.lu
    link
    fedilink
    arrow-up
    4
    ·
    8 days ago

    This is the way you’re supposed to write it in Python.

    It is something you get used to, yet I think it’s sad.

    • m_f@discuss.online
      link
      fedilink
      English
      arrow-up
      5
      ·
      8 days ago

      You can use mutable default arguments now with a new syntax:

      https://peps.python.org/pep-0671/

      def bisect_right(a, x, lo=0, hi=>len(a), *, key=None):
      def connect(timeout=>default_timeout):
      def add_item(item, target=>[]):
      def format_time(fmt, time_t=>time.time()):
      
      • Doccool@lemmy.world
        link
        fedilink
        arrow-up
        4
        ·
        8 days ago

        Oh wow! This would be great I really hope it’s accepted and implemented, makes a lot of sense!

      • Narann@jlai.lu
        link
        fedilink
        English
        arrow-up
        2
        ·
        7 days ago

        Does not seems to work on 3.12:

        Python 3.12.11 (main, Jun 29 2025, 16:18:35) [MSC v.1944 64 bit (AMD64)] on win32
        >>> def toto(tata=>[]):
          File "<stdin>", line 1
            def toto(tata=>[]):
                          ^
        SyntaxError: invalid syntax
        
        • logging_strict@programming.dev
          link
          fedilink
          arrow-up
          1
          ·
          edit-2
          5 days ago

          Upvote for the sanity check.

          As the OP mentioned, this is a proposed/draft feature that may or may not ever happen.

          With these kinda posts, should start a betting pool. To put money down on whether this feature sees the light of day within an agreed upon fixed time frame.