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.

all 8 comments

sorted by: hot top controversial new old
[–] 4 points 1 year ago (7 children)

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.

  • source
  • hideshow 7 child comments
  • [–] 5 points 1 year ago (5 children)

    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()):
    
  • source
  • parent
  • hideshow 5 child comments
  • [–] 3 points 1 year ago (1 child)

    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
    
  • source
  • parent
  • hideshow 1 child comment
  • 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.

  • source
  • parent