Introdução às variáveis ​​globais e locais em Python

Publicados: 2021-08-26

Python lida com variáveis ​​de uma maneira muito independente. Enquanto muitas linguagens de programação consideram as variáveis ​​como globais por padrão (a menos que sejam declaradas como locais), o Python considera as variáveis ​​como locais, a menos que sejam declaradas ao contrário. A razão principal por trás do Python considerar variáveis ​​como locais por padrão é que o uso de variáveis ​​globais geralmente é considerado uma prática de codificação ruim.

Assim, ao programar em Python, quando a definição de variáveis ​​ocorre dentro de uma função, elas são locais por padrão. Quaisquer modificações ou manipulações que você fizer nesta variável dentro do corpo da função permanecerão apenas dentro do escopo desta função. Ou, em outras palavras, essas mudanças não serão refletidas em nenhuma outra variável fora da função, mesmo que a variável tenha o mesmo nome da variável da função. Todas as variáveis ​​existem no escopo da função em que são definidas e mantêm esse valor. Para obter experiência prática em variáveis ​​e projetos python, experimente nossas certificações de ciência de dados das melhores universidades dos EUA.

Por meio deste artigo, vamos explorar a noção de variáveis ​​locais e globais em Python, juntamente com como você define variáveis ​​globais. Também veremos algo conhecido como “variáveis ​​não locais”.

Leia!

Índice

Variáveis ​​globais e locais em Python

Vejamos um exemplo para entender como os valores globais podem ser usados ​​no corpo de uma função em Python:

Programa:

def func():

imprima(cadeia)

string = “Eu amo Python!”

func()

Saída

Eu amo Python!

Como você pode ver, a variável string recebe o valor “I love Python!” antes de func() ser chamado. O corpo da função consiste apenas na instrução print. Como não há atribuição para a variável string dentro do corpo da função, ela assumirá o valor da variável global.

Como resultado, a saída será qualquer que seja o valor global da variável string, que neste caso é “I love Python!”.

Agora, vamos alterar o valor da string dentro do func() e ver como isso afeta as variáveis ​​globais:

Programa:

def func():

string = “Eu amo Java!”

imprima(cadeia)

string = “Eu amo Python!”

func()

imprima(cadeia)

Saída:

Eu amo Java!

Eu amo Python!

No programa acima, definimos uma função func(), e dentro dela, temos uma variável string com o valor “I love Java!”. Portanto, esta variável é local para a função func(). Então, temos a variável global como antes, e então chamamos a função e a instrução print. Primeiro, a função é acionada, chamando a instrução print dessa função e entregando a saída “I love Java!” – que é a variável local para essa função. Então, uma vez que o programa está fora do escopo da função, o valor de s é alterado para “I love Python”, e é por isso que obtemos ambas as linhas como saída.

Agora, vamos adicionar os dois primeiros exemplos e tentar acessar a string usando a instrução print e, em seguida, tentar atribuir um novo valor a ela. Essencialmente, estamos tentando criar uma string como uma variável local e global.

Felizmente, o Python não permite essa confusão e gera um erro. Veja como:

Programa:

def func():

imprima(cadeia)

string = “Eu amo Java!”

imprima(cadeia)

string = “Eu amo Python!”

func()

Saída (Erro):

—————————————————————————

UnboundLocalError Traceback (última chamada mais recente)

<ipython-input-3-d7a23bc83c27> em <module>

5

6 string = “Eu amo Python!”

—-> 7 func()

<ipython-input-3-d7a23bc83c27> em func()

1 def func():

—-> 2 print(string)

3 string = “Eu amo Java!”

4 imprimir (cadeia)

5

UnboundLocalError: variável local 's' referenciada antes da atribuição

Evidentemente, o Python não permite que uma variável seja global e local dentro de uma função. Então, isso nos dá uma variável local, já que atribuímos um valor à string dentro do func(). Como resultado, a primeira instrução de impressão mostra a notificação de erro. Todas as variáveis ​​criadas ou alteradas dentro do escopo de qualquer função são locais, a menos que tenham sido declaradas como “globais” explicitamente.

Definindo variáveis ​​globais em Python

A palavra-chave global é necessária para informar ao Python que estamos acessando variáveis ​​globais. Veja como:

Programa:

def func():

seqüência global

imprima(cadeia)

string = “Mas eu quero aprender Python também!”

imprima(cadeia)

string = “Estou procurando aprender Java!”

func()

imprima(cadeia)

Saída:

Estou querendo aprender Java!

Mas eu quero aprender Python também!

Mas eu quero aprender Python também!

Como você pode ver na saída, o Python reconhece as variáveis ​​globais aqui e avalia a instrução print de acordo, fornecendo a saída apropriada.

Usando variáveis ​​globais em funções aninhadas

Agora, vamos examinar o que acontecerá se variáveis ​​globais forem usadas em funções aninhadas. Confira este exemplo onde a variável 'language' está sendo definida e utilizada em diversos escopos:

Programa:

def func():

idioma = “inglês”

def func1():

linguagem global

idioma = “espanhol”

print(“Antes de chamar func1: ” + idioma)

print("Chamando func1 agora:")

func1()

print(“Após chamar func1: ” + idioma)

func()

print(“Valor do idioma em main: ” + idioma)

Saída:

Antes de chamar func1: Inglês

Chamando func1 agora:

Depois de chamar func1: Inglês

Valor do idioma em principal: espanhol

Como você pode ver, a palavra-chave global, quando usada dentro do func1 aninhado, não tem impacto na variável 'language' da função pai. Ou seja, o valor é retido como “inglês”. Isso também mostra que depois de chamar func(), existe uma variável 'language' no namespace do módulo com um valor 'Spanish'.

Essa descoberta é consistente com o que descobrimos na seção anterior – que uma variável, quando definida dentro do corpo de uma função, é sempre local, a menos que especificado de outra forma. No entanto, deve haver um mecanismo para acessar as variáveis ​​pertencentes a diferentes outros escopos também.

É aí que entram as variáveis ​​não-locais!

Variáveis ​​Não Locais

Variáveis ​​não locais são novos tipos de variáveis ​​introduzidas pelo Python3. Elas têm muito em comum com variáveis ​​globais e também são extremamente importantes. No entanto, uma diferença entre variáveis ​​não locais e globais é que as variáveis ​​não locais não permitem alterar as variáveis ​​do escopo do módulo.

Confira os exemplos a seguir para entender isso:

Programa:

def func():

linguagem global

imprimir(idioma)

idioma = “alemão”

func()

Saída:

alemão

Como esperado, o programa retorna 'Frankfurt' como saída. Agora, vamos mudar 'global' para 'nonlocal' e ver o que acontece:

Programa:

def func():

idioma não local

imprimir(idioma)

idioma = “alemão”

func()

Saída:

Arquivo “<ipython-input-9-97bb311dfb80>”, linha 2

idioma não local

^

SyntaxError: nenhuma ligação para 'idioma' não local encontrada

Como você pode ver, o programa acima gera um erro de sintaxe. Podemos compreender a partir daqui que atribuições não-locais só podem ser feitas a partir da definição de funções aninhadas. Variáveis ​​não locais devem ser definidas dentro do escopo da função e, se não for o caso, ela também não poderá encontrar sua definição no escopo aninhado. Agora, confira o seguinte programa:

Programa:

def func():

idioma = “inglês”

def func1():

idioma não local

idioma = “alemão”

print(“Antes de chamar func1: ” + idioma)

print("Chamando func1 agora:")

func1()

print(“Após chamar func1: ” + idioma)

idioma = “espanhol”

func()

print(“'idioma' em main: ” + idioma)

Saída:

Antes de chamar func1: Inglês

Chamando func1 agora:

Depois de chamar func1: alemão

'idioma' em principal: espanhol

O programa acima funciona porque a variável 'language' foi definida antes de chamar o func1(). Se não estiver definido, receberemos um erro como abaixo:

Programa:

def func():

#idioma = “inglês”

def func1():

idioma não local

idioma = “alemão”

print(“Antes de chamar func1: ” + idioma)

print("Chamando func1 agora:")

func1()

print(“Após chamar func1: ” + idioma)

idioma = “espanhol”

func()

print(“'idioma' em main: ” + idioma)

Saída:

Arquivo “<ipython-input-11-5417be93b6a6>”, linha 4

idioma não local

^

SyntaxError: nenhuma ligação para 'idioma' não local encontrada

No entanto, o programa funcionará bem se substituirmos não local por global:

Programa:

def func():

#idioma = “inglês”

def func1():

linguagem global

idioma = “alemão”

print(“Antes de chamar func1`: ” + idioma)

print("Chamando func1 agora:")

func1()

print(“Após chamar func1: ” + idioma)

idioma = “espanhol”

func()

print(“'idioma' em main: ” + idioma)

Saída:

Antes de chamar func1: Inglês

Chamando func1 agora:

Depois de chamar func1: alemão

'idioma' em main: alemão

Se você notar, o valor da variável global (idioma) também está sendo alterado no programa acima! Esse é o poder que as variáveis ​​não locais trazem consigo!

Para concluir

Neste artigo, discutimos variáveis ​​locais, globais e não locais em Python, juntamente com diferentes casos de uso e possíveis erros que você deve observar. Com esse conhecimento ao seu lado, você pode ir em frente e começar a praticar com diferentes tipos de variáveis ​​e perceber as diferenças sutis.

Python é uma linguagem de programação extremamente popular em todo o mundo – especialmente quando se trata de resolver problemas e desafios relacionados a dados. No upGrad, temos uma base de alunos em mais de 85 países, com mais de 40.000 alunos pagos em todo o mundo, e nossos programas impactaram mais de 500.000 profissionais. Nossos cursos de Ciência de Dados e Aprendizado de Máquina foram desenvolvidos para ajudar alunos motivados de qualquer formação a iniciar sua jornada e se destacar no campo da ciência de dados. Nossa assistência de carreira 360 graus garante que, uma vez matriculado conosco, sua carreira só avança. Entre em contato conosco hoje mesmo e experimente o poder do aprendizado entre pares e da rede global!

Quais são os tipos de variáveis ​​em Python?

Com base em seu escopo, as variáveis ​​em Python são locais, globais ou não locais.

As variáveis ​​globais em Python podem ser acessadas de dentro de uma função?

Sim, variáveis ​​globais podem ser acessadas de dentro de uma função em Python.

Qual é a diferença entre variáveis ​​locais e globais?

As variáveis ​​globais têm o programa inteiro como escopo, enquanto as variáveis ​​locais têm apenas a função na qual são definidas como escopo.