I came across this older article from 2020 and I found it informative. It’s about how the shell does globbing and the potential issues it can cause if not understood correctly.
TLDR:
find . -not -name *.py -delete and find . -not -name '*.py' -delete will behave differently in certain scenarios.
In the first example, the shell will replace the wildcard pattern with a list of matching
file names IF there are any matches in the current directory. If there isn’t, then it
won’t do anything and will pass *.py to find.
In the second example, the shell won’t do any globbing at all and will just pass *.py


Presuming BASH:
https://www.gnu.org/software/bash/manual/bash.html#Quoting
Single quotes are much safer/predictable because:
Not to say they are always the right choice though.