Eu fiz o mesmo teste aqui e não funcionou.
TypeError: cadastrar() takes exactly 1 argument (0 given)
Você fez exatamente assim? Digitou linha a linha no seu console?
O que esse código faz é declarar uma função. Você precisa chamá-la logo em seguida.
Se chamar
cadastrar()
Vai receber um erro, porque não passou o a lista de nomes.
Se fizer assim:
def cadastrar():
print 'Digite seu nome'
nome = raw_input()
nomes.append(nome)
Terá outro erro, porque a chamada de cadastrar()
vai funcionar, mas depois de você ler o nome, o Python tentará adicionar o nome em uma lista que não existe resultado no erro:
NameError: global name 'nomes' is not defined
No entanto, se você declarar a variável nomes
antes de chamar a função, ela estará no escopo global e vai funcionar. Mas é uma boa prática passar os dados de que a função precisa ao invés de pegá-las no escopo global.