A chamada de função não atualiza a variável global
Esta questão explora um desafio de programação em que uma variável global, inicialmente atribuída como falsa, não é t sendo atualizado quando referenciado em uma função. Apesar da função alterar o valor da variável global, o loop do programa principal continua em execução, levando a um loop infinito. Compreender esse problema requer aprofundar o conceito de namespaces e escopo de variáveis.
Namespace e escopo de variáveis
Na programação, cada função e módulo cria seu próprio namespace. Um namespace é uma coleção de nomes (variáveis, funções, etc.) que são conhecidos e acessíveis dentro desse escopo. Quando um valor é atribuído a uma variável dentro de uma função, uma nova variável é criada no namespace da função, mesmo que exista uma variável global com o mesmo nome.
Usando variáveis globais
Neste caso, quando uma variável global chamada "done" é referenciada dentro da função, uma nova variável local com o mesmo nome é criada no namespace da função. Este “pronto” local é diferente do “pronto” global. Alterar o "concluído" local não tem efeito na variável global.
Solução
Para superar isso, a palavra-chave global deve ser usada para referenciar explicitamente a variável global dentro a função. Ao usar global done, a função diz ao intérprete para acessar a variável global "done" em vez de criar uma nova variável local.
Código Modificado
Para corrigir o problema , a função pode ser modificada da seguinte forma:
def function():
global done
for loop:
code
if not comply:
done = True
Explicação
Usar global done estabelece uma conexão entre a variável usada dentro da função e a global. Quando a função modifica o valor de pronto, ela atualiza a mesma variável global que foi referenciada inicialmente. Isso garante que o loop while do programa principal terminará conforme planejado quando a função for definida como True.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3