because they can
make code more difficult to understand and use. return statements are usually
best, but changing mutables is fine, if expected. Functions may also communicate
with system devices such as files and sockets, but these are beyond our scope here