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/