Gostaria de contribuir com o que entendi, porém gostaria também que alguém me desse um feedback se estou raciocinando corretamente:
Resumindo: parâmetros opcionais, são aqueles que eu posso passar ou não, e se declarados explicitamente uma vez, mesmo que eu chame a função sem parâmetro algum ele irá entender como um "default" pois já foi setado.
def funcao(texto= 'A', valor = 2) => chamando a funçao ... funcao(texto,valor) ou funcao() "aqui os valores já estão fixados por padrão em (texto, valor)" ou ainda funcao('b', 3).
o que não pode ocorrer:
def funcao(valor) => chamando a funcao ... funcao() "aqui é obrigatório passar um parâmetro pois a variável valor não tem um valor pré-fixado"
parâmetros nomeados são aqueles que ao definirmos um valor devemos chamá-los na ordem de definição correta, a não ser que os dois estejam setados, ai independente da ordem ele entenderá pela sua definição
def teste(a, b=1) => chamando a função ... teste(a, 1)
def teste (a=2, b=1) => chamando a função ... teste(b,a) ou teste () "aqui os valores já estão fixados por padrão em (2,1)"
o que não pode ocorrer:
def teste(a, b=1) => chamando a função teste(1) aqui ele colocar o valor 1 em 'a'