Funções

Uma função é um objeto com um bloco de código reutilizável, com nome, que executa uma determinada tarefa.

Uma função pode, ou não, receber dados como argumentos e pode, ou não, retornar um valor.

Sintaxe:

def function_name( [lista_argumentos] ):
bloco_de_código
[return [expressao]]

Definição de uma função

Uma função é definida com a palavra reservada def seguida do nome da função e do bloco de código que ela irá executar quando fôr chamada:

O nome da função deve ser seguido de parentes curvos onde é definida a lista de argumentos da função, caso hajam. Se a função tiver argumentos, os parenteses curvos devem estar vazios.

Um função pode, ou não, ter a instrução return. Quando esta instrução é executada, a execução da função termina. A instrução return pode, ou não, retornar um valor.

Exemplo 1:

def funcao_a():
    print("ola")
    #termina a execução da função e retorna 1:
    return 1

Exemplo 2:

def funcao_b(msg):
    print(msg)

Chamada de uma função

Uma função só é executada quando é chamada. A chamada de uma função é feita escrevendo o nome da função como se fosse uma instrução:

#definição da função funcao_b:
def funcao_b():
    print("ola")
    print("Sou a função funcao_b em execução.")

#chamada da função funcao_b:
funcao_b()

Parâmetros de uma função

Parâmetros são variáveis definidas na definição de uma função, e que servem para guardar dados passados à função quando esta é chamada.

Argumentos são os valores passados à função, mais precisamente aos parâmetros.

Os argumentos são de 4 tipos:

  • Argumentos posicionais
  • Argumentos com nome
  • Argumentos com valor de defeito
  • Argumentos de comprimento variável

Argumentos posicionais

Argumentos posicionais são argumentos passados à função na ordem correta em que os parâmetros foram definidos:

#Definição da função funcao_b com dois parâmetros posicionais, a e b:
def funcao_b(a, b):
    print(a)
    print(b)

#chamada da função funcao_b, passando dois argumentos posicionais:
funcao_b("ola", 7)

Nota: Os argumentos posicionais são obrigatórios. Os dados passados a uma função com argumentos posicionais têm de ser iguais, em número, ao número de argumentos posicionais definidos.

Argumentos com nome

Os argumentos com nome tem a ver com a chamada da função. Ou seja, podemos passar dados à função na sua chamada evocando os nomes dos parâmetros para onde os queremos passar. Neste caso, a ordem de passagem dos dados é indiferente:

#Definição da função funcao_b com dois parâmetros posicionais, a e b:
def funcao_b(a, b):
    print(a)
    print(b)

#chamada da função funcao_b, passando valores, nomeando os parâmetros:
funcao_b(b=7, a="ola")

Argumentos com valor de defeito

Um parâmetro com valor de defeito é um argumento que assume um valor de defeito se, aquando da chamada da função, não for fornecido nenhum valor para esse parâmetro:

#Definição da função funcao_b com dois argumentos posicionais, a e b 
# tendo o argumento b o valor de defeito 4:
def funcao_b(a, b=4):
    print(a)
    print(b)

#chamada da função funcao_b, passando sómente um valor para o argumento a:
funcao_b("ola")

Output: ola, 4

Parâmetros de comprimento variável

Parâmetros variáveis são parâmetros que são definidos para poder ser passado na chamada da função um número arbitrário de dados.

Para indicar que um argumento é de comprimento variável, deve-se colocar um ‘*’ antes do seu nome. Para além disso, o parâmetro de comprimento variável deve ser o último da lista de parâmetros.

#Definição da função funcao_b com dois argumentos posicionais, a e b
# tendo o argumento b o valor de defeito 4
# e um argumento de comprimento variável c:
def funcao_b(a, b=4, *c):
    print(a)
    print(b)
    for arg in c:
        print(arg)

#chamada da função funcao_b, passando sómente um valor para o argumento a,
#outro para o argumento b, e 3 para o argumento variável c:

funcao_b("ola", 7, 11, 12, 13)

A instrução return

A instrução return termina a execução de uma função. Pode, ou não retornar um valor de forma explícita. Se não o fizer retorna None.

Exemplo 1:

def somar(a, b, c):
    return a+b+c

resultado = somar(3, 4, 5)

Exemplo 2:

def mostra():
    print("Boa tarde")
    return


r = mostra()
print(r)

Output:

Boa tarde
None

Variáveis locais e variáveis globais

As variáveis globais são declaradas fora de qualquer função e têm um alcance global, podendo ser acedidas de qualquer ponto do programa.

As variáveis locais são declaradas dentro de uma função e têm um alcance limitado à função onde foram declaradas não podendo ser acedidas fora dela.

Exemplo 1:

nr1=7  #variável global

def func_a():
    nr2=11 #variável local
    print(nr1 + nr2)

Exemplo 2:

nr1=7  #variável global

def func_a():
    nr2=11 #variável local
    print(nr1 + nr2)
	
def func_b():
    nr3=4

#ERRO:a variável nr2 é local à função func_a()
print(nr2 + nr3)