1 of 23

Escopo, Bibliotecas e Depuração de Funções e Procedimentos

2 of 23

  • Vamos escrever um programa que leia um número inteiro n. Em seguida n é passado como parâmetro para uma função que deve aumentar em 10 o valor de n. O programa principal deve imprimir o valor alterado.

Exemplo 1

3 of 23

1ª versão

#função

def soma10(n):

n = n + 10

# programa principal

n = int(input("Digite um número: "))

soma10(n)

print("Número acrescido de 10: %d." % n)

Não funciona !!!

4 of 23

1ª versão

#função

def soma10(n):

n = n + 10

# programa principal

n = int(input("Digite um número: "))

soma10(n)

print("Número acrescido de 10: %d." % n)

5

Soma10(5)

5

n = 5 + 10 = 15

5

5 of 23

2ª versão

# função

def soma10(n):

n = n + 10

return n

# programa principal

n = int(input("Digite um número: "))

n = soma10(n)

print("Número acrescido de 10: %d." % n)

6 of 23

  • O escopo das variáveis determina quais funções devem reconhecer certas variáveis;
  • Se uma função reconhece uma variável, a variável é visível a esta função;
  • O escopo das variáveis as protege de serem alteradas inadvertidamente por outras funções.
  • Uma função não deve ver ou alterar uma variável a que não tenha acesso;
  •  Uma variável local pode ser vista apenas no bloco dentro da função na qual foi definida.

Escopo de Variáveis

7 of 23

  • As variáveis podem ser locais ou globais:

    • As variáveis dentro das funções são chamadas de variáveis locais;

    • As que são declaradas fora de todas as funções são chamadas de variáveis globais.

Escopo de Variáveis

8 of 23

  • Elas passam a existir quando do início da execução da função onde foram definidas, e são destruídas ao final da execução da função (tempo de vida).

  • Uma variável local só pode ser referenciada, ou seja usada, dentro da função onde foi declarada.

  • Como as variáveis locais deixam de existir ao final da execução da função, elas são invisíveis para outras funções ou para o programa principal.

Variáveis Locais

9 of 23

  • Qual é o erro neste programa?

def fatorial(n):

fat = 1

for i in range(2, n+1):

fat = fat * i

return fat

x = int(input('Número: '))

print('Fatorial: %d' % fatorial(x))

print(n)

Variáveis Locais

10 of 23

  • As variáveis globais são definidas fora de qualquer bloco e são portanto disponíveis para qualquer função.
  • O uso de variáveis globais pode prejudicar a confiabilidade dos programas uma vez que a variável fica acessível em qualquer ponto do programa podendo, por exemplo, ser utilizada para duas finalidades diferentes ao mesmo tempo.

Variáveis Globais

11 of 23

  • Qual é o erro neste programa?

def fatorial(n):

print(x)

fat = 1

for i in range(2, n+1):

fat = fat * i

return fat

x = int(input('Número: '))

print('Fatorial: %d' % fatorial(x))

Variáveis Globais

12 of 23

  • Há erro neste programa? Há má prática neste programa?

x = int(input('Número: '))

def fatorial(n):

print(x)

fat = 1

for i in range(2, n+1):

fat = fat * i

return fat

print('Fatorial: %d' % fatorial(x))

Variáveis Globais

13 of 23

  • Importação de Bibliotecas

import <nome biblioteca>

ou

from <nome biblioteca> import <f1,f2,...>

  • Comando usado no início do arquivo do programa que serve para avisar ao interpretador que serão usados procedimentos ou funções declarados na biblioteca especificada

  • Bibliotecas de uso comum em Python

import random # Funções de números aleatórios

import math # Funções matemáticas

Import turtle # Funções de desenho do Logo

Uso de funções pré-definidas

14 of 23

Exemplos de bibliotecas de uso comum

  • https://docs.python.org/3/library/
  • Exemplos:

import math

print(math.factorial(10))

import random

for i in range(50):

print(random.random())

from random import randint, randrange

print (randint(1, 50))

print (randrange(50))

Inclui o 50

Não inclui o 50

15 of 23

Exemplo 2

  • Faça um programa que sorteie os seis números da Mega Sena (entre 1 e 50) e os apresente em uma ordem qualquer. Ignore a situação em que ocorrem números repetidos.

from random import randint

print('Mega sena. números sorteados')

for i in range(6):

print(randint(1, 50))

16 of 23

Criando suas próprias bibliotecas

  • Crie um arquivo Python (.py) com as funções desejadas
  • Exemplo: matemática.py

def fatorial(n):

fat = 1

for i in range(2, n+1):

fat = fat * i

return fat

def potencia(base, expoente):

potencia = 1

for i in range(1, expoente+1):

potencia = potencia * base

return potencia

17 of 23

Criando suas próprias bibliotecas (continuação)

  • Coloque o arquivo da biblioteca no mesmo diretório do seu arquivo de programa principal
  • Importe as funções no arquivo do seu programa principal:
  • Exemplo: principal.py

from matematica import *

num = int(input('Digite um número: ')

print('O fatorial de número é %d' % fatorial(num))

b = int(input('Digite a base da potencia: ')

e = int(input('Digite o expoente da potencia: ')

print('A potencia é %d' % potencia(b, e))

18 of 23

Depurando Funções e Procedimentos

  • Podemos passar para a linha de código seguinte, com algumas variações:
  • Step Over
  • Step Into My Code
  • Step Into

19 of 23

Step Over

  • Permite analisar linha a linha do seu código:

20 of 23

Step Over

  • Permite analisar linha a linha do seu código:

21 of 23

Step Into

  • Permite analisar o código de uma função importada.

22 of 23

Step Into My Code

  • Permite analisar o código de uma função do seu próprio código:

23 of 23

Usando Depuração com Funções e Procedimentos

  • Ao analisar uma função, apenas as variáveis locais são apresentadas na aba Variables: