Unit variables upon their first appearance

Hello there,
I have an idea for initializing a variable the first time it’s created; it can especially be helpful with containers, and dicts specifically. Let me demonstrate with some examples:
Dic = {} # format fruit:count for fruit in fruits: If fruit in Dic: Dic[fruit]+=1 Else: Dic[fruit]=1
With my proposal, using := to init (similar to how in math parlance, the := is used for defining something for the first time)
Dic = {} # format fruit:count For fruit in fruits: Dic[fruit]:= 0 Dic[fruit]+=1
Would be great to hear your feedback. Thanks.
Moj

This is `collections.Counter`.
On Sat, Feb 5, 2022, 3:19 PM Mirmojtaba Gharibi mojtaba.gharibi@gmail.com wrote:
Hello there,
I have an idea for initializing a variable the first time it’s created; it can especially be helpful with containers, and dicts specifically. Let me demonstrate with some examples:
Dic = {} # format fruit:count for fruit in fruits: If fruit in Dic: Dic[fruit]+=1 Else: Dic[fruit]=1
With my proposal, using := to init (similar to how in math parlance, the := is used for defining something for the first time)
Dic = {} # format fruit:count For fruit in fruits: Dic[fruit]:= 0 Dic[fruit]+=1
Would be great to hear your feedback. Thanks.
Moj _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-leave@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/G4KJNQ... Code of Conduct: http://python.org/psf/codeofconduct/

Hi Mirmojtaba, thanks for your suggestion.
I doubt this idea will fly with this syntax because it could easily be confused with the walrus operator. x := 0 is *almost* legal syntax currently. In fact (x := 0) is legal, and it is quite possible that at some time in the future (Dic[fruit]:=0) will also be made legal.
Your particular example can be written
Dic = {} for fruit in fruits: Dic[fruit] = Dic.get(fruit, 0) + 1 # 0 is default value if key not in dict
Actually I can see this idea being more useful with ordinary variables. At the moment we can write something like this:
try: count = count + 1 except NameError: # count has not been initialised yet count = 1
which is fairly clumsy, and with your idea would be more concise:
count := 0 # or a different syntax, maybe count <== 0 or something count += 1
(NB In fact if PEP 463 "Exception-catching expressions" had been accepted, we could write something like count = count + 1 except NameError: 1 but the PEP has been rejected, regrettably in my opinion. 🙁)
That said, in most real examples, one could write count = 0 initially, and count = count +1 to increment.
So I think it is up to you to provide further convincing examples in favour of your idea. Best wishes Rob Cliffe
On 05/02/2022 20:18, Mirmojtaba Gharibi wrote:
Hello there,
I have an idea for initializing a variable the first time it’s created; it can especially be helpful with containers, and dicts specifically. Let me demonstrate with some examples:
Dic = {} # format fruit:count for fruit in fruits: If fruit in Dic: Dic[fruit]+=1 Else: Dic[fruit]=1
With my proposal, using := to init (similar to how in math parlance, the := is used for defining something for the first time)
Dic = {} # format fruit:count For fruit in fruits: Dic[fruit]:= 0 Dic[fruit]+=1
Would be great to hear your feedback. Thanks.
Moj
Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-leave@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/G4KJNQ... Code of Conduct: http://python.org/psf/codeofconduct/

On Sat, Feb 5, 2022, 12:19 PM Mirmojtaba Gharibi mojtaba.gharibi@gmail.com wrote:
With my proposal, using := to init (similar to how in math parlance, the := is used for defining something for the first time)
Dic = {} # format fruit:count For fruit in fruits: Dic[fruit]:= 0 Dic[fruit]+=1
To my eye, this does not look like a conditional assignment. And how would an operator like this work with objects other than dicts?
Besides, it's easier and clearer to write this as
dic = defaultdict(int) for fruit in fruits: dic[fruit] += 1
--- Bruce
participants (4)
-
Bruce Leban
-
David Mertz, Ph.D.
-
Mirmojtaba Gharibi
-
Rob Cliffe