It means there is a chance to modify the function contract during runtime. But would that causes surprise when most of users anticipate a function’s behavior per reading its definition(contract)?
Someone may argue that increases the flexibility, though I doubt if increasing flexibility is always a positive thing to take.
And is there any specific use cases demand function attributions being writeable?
To the very specific question about whether it’s modifiable:
says that __defaults__ is writable, so yes - allowed. I’ve never found a need to modify __defaults__ myself, nor have I ever seen it in code, and it feels kind of odd to do so, but other attributes at runtime - absolutely.