I'm sorry for the confusion, but what is frozen_tree_set() here, and what is ipop? frozensets don't have pop or 'ipop', so my apologies that I'm a bit lost here.
-Ryan Birmingham On 28 February 2017 at 08:59, 语言破碎处 <[email protected]> wrote: > > Hi! > I write a '<'-based immutable set class. > But it is quit different from the standard set class. > I wish collections.abc.Set be more friendly to immutable tree sets or > Python add new syntax to unify such difference. > > > good example: > a = [] > a += a # "a" is the original list > > a = () > a += a # "a" is a new tuple > > bad example: > a = set() > a.add(1) # return None; "a" changed > e = a.pop(); > > a = frozen_tree_set() > a = a.add(1) # return another set; > e, a = a.ipop() # return two objects instead of one! > > solution I used: > a <<= 1 # <==> a = a.add(1) > but "a.ipop()" .... > my current solution is to write a wrapper class > to turn immutable set into mutable set, > but it is so noisy to box and unbox. > > > solution that I wish: > a :=.add(1) # "=." mimic "+="; return the result object > e ~ a :=.pop() > > d[key] :=.add(1) # in dict > > > > if only python add following features: > 1) modify the original object > 1-0) > 1) define: > def .method(self):... > # "." means "intend to modify self" > # return any thing > # to avoid immutable method > # which was intended to return new object > # leave self unchanged > > 2) invoke: > r = a..method(); > 1-1) ignore result > # no matter what returned, discard it > a.-.method(); # <==> [a..method(), None][-1] > 1-2) return self > # no matter what returned, return self > a.>.method().>.method();# <==> [a..method(), a..method(), a][-1] > > > 2) create new object > 2-0) > 1) define > # intend to return (result, new object) > def ^method():... > > 2)invoke: > r, a' = a.^method(); > 2-1) return other, discard result > a.-^method().-^method();# <==> a.^method()[1].^method()[1]; > 2-2) assign other to original variable > a=^method(); # <==> a = a.^method()[1]; > > 3) unify both: > a :=.method(); > # if defined ".method" then "a..method();" > # elif defined "^method" then "a = a.^method()[1];" > # elif defined "method" then "a.method();" > # else error > > r ~ a :=.method(); > # if defined ".method" then "r = a..method();" > # elif defined "^method" then "r, a = a.^method();" > # elif defined "method" then "r = a.method();" > # else error > > > > > > > > > _______________________________________________ > Python-ideas mailing list > [email protected] > https://mail.python.org/mailman/listinfo/python-ideas > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-ideas mailing list [email protected] https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
