> What if it does match, though?

The walrus operator returns the value on the right side so this wouldn't 
change. In your example the original dict would get printed.

some_dict  = {"x": 1, "y": 2}
print({"x": x} := some_dict)  # {"x": 1, "y": 2}

The only pattern where it's not possible to know if the pattern was matched by 
looking at the return value is the None pattern:

print(None := x) 

If the pattern matches this will print the value of x, None, and if the pattern 
doesn't match this will also print None because the walrus operator evaluates 
to None instead of the value on the right side when the pattern doesn't match. 
This is not a problem since testing for None is normally done with the is 
operator: x is None

The only patterns where it's not possible to know if the pattern was matched by 
looking at the truthiness of the return values are the following:

print(None := x)
print(False := x)
print(0 := x)
print(0.0 := x)
print("" := x)
print([] := x)
print({} := x)

This is not a problem since in all of these cases testing for truthiness is 
normally done with bool() or by testing the value directly in an if statement.

In my opinion the behavior is fairly unsurprising: return the right side if the 
pattern matches or None otherwise. We can even explain the current restricted 
behavior in terms of pattern matching: the name on the left side is an 
"irrefutable" pattern which will always match and therefore always return the 
right side of the expression.
_______________________________________________
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/YQRKWVCEAQ7D67ODF74IVBDLVXAQGQOL/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to