On 5/19/2020 4:53 PM, Rob Cliffe via Python-ideas wrote:
I have already replied to the OP and to the list, but there seems to be a problem with my posts getting through,
so let me try again.  Apologies if you see this twice:

To strip at most 1 character from the end:
    txt[:-1] + txt[-1:].rstrip(chars)
To strip at most N characters:
    txt[:-N] + txt[-N:].rstrip(chars)

Assuming N==0 means "don't do anything", you'll to test for that case.

Eric


Rob Cliffe

On 18/05/2020 19:32, Caleb Donovick wrote:
Certainly the way default arguments work with mutable types is not the most intuitive and I think your complaint has some merit.

However how would you define the following to work:

def foo():
    cons = [set(), [], (),]
    funs = []
    for ds in cons:
        def g(arg:=ds):
            return arg
        funs.append(g)
    return funs

How would you evaluate "ds" in the context of the call?
If it were to have the same observable behavior as def g(arg=ds) except that you would get "fresh" reference on each invocation you would get the following:

assert [f() for f in foo()]  == [set(), [], ()]

Note it cannot be a simple syntactic transform because:

class _MISSING: pass
def foo():
    cons = [set(), [], (),]
    funs = []
    for ds in cons:
        def g(arg=_MISSING):
            if arg is _MISSING:
                arg = eval('ds') # equivalent to arg = ds so does not produce a fresh reference
            return arg
        funs.append(g)
      return funs

assert [f() for f in foo()]  == [(), (), ()]

Granted the way closures work (especially in the context of loops) is also a pretty unintuitive, but stands as a barrier to easily implementing your desired behavior. And even if that wasn't the case we still have the issue that eval('ds') doesn't give you a fresh reference.

Wouldit implicitly deepcopy ds?  e.g.:

class _MISSING: pass
def build_g(default):
    def g(arg=_MISSING):
        if arg is _MISSING:
            arg =  deepcopy(default)
        return arg
    return g

def foo():
    cons = [set(), [], (),]
    funs = []
    for ds in cons:
        g = build_g(ds)
        funs.append(g)
      return funs

What if ds doesn't implement __deepcopy__?


On Mon, May 18, 2020 at 7:11 AM Richard Damon <rich...@damon-family.org <mailto:rich...@damon-family.org>> wrote:

    On 5/18/20 9:06 AM, James Lu wrote:
    > "There should be one-- and preferably only one --obvious way to
    do it."

    *obvious*

    multiple ways are allowed as long as there is one clear preference.

-- Richard Damon
    _______________________________________________
    Python-ideas mailing list -- python-ideas@python.org
    <mailto:python-ideas@python.org>
    To unsubscribe send an email to python-ideas-le...@python.org
    <mailto:python-ideas-le...@python.org>
    https://mail.python.org/mailman3/lists/python-ideas.python.org/
    Message archived at
    
https://mail.python.org/archives/list/python-ideas@python.org/message/PCAVU6BEI4KUYUUVL7F3CKV2EQ7ZPBPK/
    Code of Conduct: http://python.org/psf/codeofconduct/


_______________________________________________
Python-ideas mailing list --python-ideas@python.org
To unsubscribe send an email topython-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived 
athttps://mail.python.org/archives/list/python-ideas@python.org/message/YE77WSNCGMLNVCTTD472WFWAELURMHSF/
Code of Conduct:http://python.org/psf/codeofconduct/


_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/QG6OFYNNE3LX45BIQ244NW2A7TVHHF6L/
Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/VUP2WS35NR5JSSBHTTOLFNX66253L5OO/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to