"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como acessar variáveis ​​não locais de funções aninhadas em Python?

Como acessar variáveis ​​não locais de funções aninhadas em Python?

Publicado em 2024-11-08
Navegar:509

How to Access Nonlocal Variables from Nested Functions in Python?

Acessando variáveis ​​não locais em escopos de funções aninhadas

Em Python, escopos de funções aninhadas fornecem acesso a escopos delimitadores. No entanto, tentar modificar uma variável em um escopo delimitador dentro de uma função aninhada pode resultar em um UnboundLocalError.

Para resolver esse problema, você tem várias opções:

1. Usando a palavra-chave 'nonlocal' (Python 3):

Para Python 3 e posteriores, a palavra-chave nonlocal permite religar variáveis ​​não locais dentro de funções aninhadas.

def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr  = 1

    inner()

2. Acesso indireto via listas (Python 2 e 3):

No Python 2 e 3, você pode usar uma lista para armazenar a variável e incrementá-la indiretamente dentro da função aninhada.

ctr = [0]

def inner():
    ctr[0]  = 1

3. Uso de variáveis ​​globais (não recomendado):

Embora o uso global possa permitir o acesso a variáveis ​​de escopos delimitadores, geralmente é desencorajado devido a possíveis conflitos e problemas de legibilidade do código.

def outer():
    global ctr
    ctr = 0

    def inner():
        ctr  = 1

A escolha da solução apropriada depende da sua versão específica do Python e das considerações de design do seu código.

Declaração de lançamento Este artigo foi reimpresso em: 1729507041 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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