0% acharam este documento útil (0 voto)
28 visualizações

Funcoes Python

Python - Funções

Enviado por

Marcos Botelho
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
28 visualizações

Funcoes Python

Python - Funções

Enviado por

Marcos Botelho
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 7

25/09/2024, 14:09 01 - Funcoes

FUNÇÕES

BEHRMAN, Kennedy R.Fundamentos de Python


para Ciência de Dados. Porto Alegre: Bookman,
2023, p. 67-75

Definindo Funções
Trata-se de uma declaração composta
As funções fornecem uma forma de nomear um bloco de código integrado como um
objeto
Esse código pode ser chamado usando esse nome, o que permite que o mesmo código
seja chamado diversas vezes e em vários lugares
Assim, a definição de uma função estabelece um objeto função, que integra um bloco
executável
Os blocos de construção de uma função são a declaração de controle, uma docstring
opcional, o bloco de código controlado e uma declaração de retorno (return)

Declaração de controle

A primeira linha de uma definição é a declaração de controle: def Nome Função


(Parâmetros):

In [5]: #Exemplo:

def soma(a,b):
resultado = a + b
return resultado

soma(5,2)

Out[5]: 7

Docstring

É a string de documentação (docstring), que contém a documentação da função


A docstring comunica a suas intenções ao escrever uma função, o que faz e como deve
ser chamada
Ela consiste em uma linha ou diversas linhas entre três pares de aspas duplas que
seguem imediatamente a declaração de controle

file:///C:/Users/Usuário/Downloads/01 - Funcoes.html 1/7


25/09/2024, 14:09 01 - Funcoes

In [14]: #Exemplo:

def soma(a,b):
"""
Esta função efetua a soma de duas variáveis e retorna o resultado
parâmetros:
a - variável numérica (float, int ou complexo)
b - variável numérica (float, int ou complexo)

Retorna o resultado de acordo com o tipo de variável numérica


"""
resultado = a + b
return resultado

print(soma(15.5, 23.7))
print(soma(2 + 10j,15 + 2j))
print(soma(13, 15))

39.2
(17+12j)
28

In [15]: help(soma)

Help on function soma in module __main__:

soma(a, b)
Esta função efetua a soma de duas variáveis e retorna o resultado
parâmetros:
a - variável numérica (float, int ou complexo)
b - variável numérica (float, int ou complexo)

Retorna o resultado de acordo com o tipo de variável numérica

Parâmetros

Os parâmetros permitem passar valores para a função, que podem ser usados no bloco
de código dessa função
Uma função não precisa aceitar nenhuma parâmetro
Os valores do parâmetro podem ser definidos com base na posição em que são
passados ou com base em palavras-chave. Não é possível usar uma atribuição de
palavra-chave à esquerda de uma atribuição posicional

In [2]: #Exemplo:

def multiplicacao(x,y):
"""
Função que recebe dois parâmetros e efetua a multiplicação entre eles

Parâmetros:

x - variável numérica tipo int


y - variável numérica tipo int

A função não aceita como parâmetro valores complexos, retornando um Type

file:///C:/Users/Usuário/Downloads/01 - Funcoes.html 2/7


25/09/2024, 14:09 01 - Funcoes

Mas aceita valores tipo float, retornando, porém, um resultado numérico


Ao se passar valores tipo float, a função os transforma em int, arredond

returna o resultado da multiplicação x * y

"""
mult = int(x) * int(y)
return mult

multiplicacao(2.6,1.7)

Out[2]: 2

In [28]: multiplicacao(2j,5.6)

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[28], line 1
----> 1 multiplicacao(2j,5.6)

Cell In[27], line 19, in multiplicacao(x, y)


3 def multiplicacao(x,y):
4 """
5 Função que recebe dois parâmetros e efetua a multiplicação entre eles
6
(...)
17
18 """
---> 19 mult = int(x) * int(y)
20 return mult

TypeError: int() argument must be a string, a bytes-like object or a real number,


not 'complex'

In [4]: multiplicacao(y=6, x=30)

Out[4]: 180

In [5]: def multiplicacao(a,b,c):


resultado = a*b*c
return resultado

In [8]: multiplicacao(a=2, b=3, c=4)

Out[8]: 24

In [9]: multiplicacao(c=10, a=-1, b=4)

Out[9]: -40

In [10]: multiplicacao(c=2, 2, 3)

Cell In[10], line 1


multiplicacao(c=2, 2, 3)
^
SyntaxError: positional argument follows keyword argument

file:///C:/Users/Usuário/Downloads/01 - Funcoes.html 3/7


25/09/2024, 14:09 01 - Funcoes

Pode-se requerer que um parâmetro seja chamado apenas usando o método da palavra-
chave colocando * à esquerda da definição da função
Todos os parâmetros à direita do asterisco podem ser chamados apenas usando palavra-
chave

In [1]: #Exemplo

def does_keyword(first, second, *, third):


print(f'First: {first}')
print(f'Second: {second}')
print(f'Third: {third}')

In [2]: does_keyword(1,2, third=3)

First: 1
Second: 2
Third: 3

In [3]: does_keyword(1,2,3)

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[3], line 1
----> 1 does_keyword(1,2,3)

TypeError: does_keyword() takes 2 positional arguments but 3 were given

É possível tornar opcional um parâmetro atribuindo um valor padrão a ele na definição


da função
Esse valor será uasdo se nenhum valor for fornecido para o parâmetro durante a
chamada da função
Não é possível definir uma função com um parâmetro de valor padrão à esquerda de um
parâmetro de valor não padrão

In [4]: #Exemplo

def soma(a,b,c=3):
resultado = a + b + c
return resultado

In [5]: soma(1,2,4)

Out[5]: 7

In [6]: soma(1,2)

Out[6]: 6

In [7]: #Exemplo2

def soma(a=2,b,c):
resultado = a + b + c
return resultado

file:///C:/Users/Usuário/Downloads/01 - Funcoes.html 4/7


25/09/2024, 14:09 01 - Funcoes

Cell In[7], line 3


def soma(a=2,b,c):
^
SyntaxError: non-default argument follows default argument

O uso de objetos mutáveis (lista ou dicionários) para valores padrão pode gerar
problemas

In [8]: def funcao_default(lista=[]):


lista.append(1)
print(lista)

In [9]: funcao_default()

[1]

In [10]: funcao_default()

[1, 1]

In [11]: funcao_default()

[1, 1, 1]

Sempre que a função é chamada, a lista mantém os valores das chamadas anteriores
Recomenda-se não usar objetos mutáveis como parâmetros padrão para evitar erros
difíceis de rastrear e confunsão
Uma forma de solucionar é definir o valor padrão como None

In [17]: def funcao_default(lista=None):


lista = lista or []
lista.append(1)
print(lista)

In [18]: funcao_default()

[1]

In [19]: funcao_default()

[1]

É possível restringir os parâmetros à atribuição posicional apenas


Um parâmetro à esquerda da barra (/) em uma definição de função é restrito à atribuição
posicional

In [20]: def does_positional(first, /, second, third):


print(f'First: {first}')
print(f'Second: {second}')
print(f'Third: {third}')

In [21]: does_positional(1,2,3)

First: 1
Second: 2
Third: 3

file:///C:/Users/Usuário/Downloads/01 - Funcoes.html 5/7


25/09/2024, 14:09 01 - Funcoes

In [22]: does_positional(first=1, second=2, third=3)

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[22], line 1
----> 1 does_positional(first=1, second=2, third=3)

TypeError: does_positional() got some positional-only arguments passed as keyword


arguments: 'first'

O parâmetro first é posicional apenas

In [24]: does_positional(1,2,third=3)

First: 1
Second: 2
Third: 3

In [25]: does_positional(1,third=3, second=2)

First: 1
Second: 2
Third: 3

In [26]: does_positional(1,second=2, 3)

Cell In[26], line 1


does_positional(1,second=2, 3)
^
SyntaxError: positional argument follows keyword argument

O parâmetro first é posicional apenas


O parâmetro second pode ser definido usando a atribuição posicional ou de palavra-
chave. O third é palavra-chave apenas

In [2]: def does_positional(first, /, second, *, third):


print(f'First: {first}')
print(f'Second: {second}')
print(f'Third: {third}')

does_positional(1,2,third=3)

First: 1
Second: 2
Third: 3

É possível passar curingas nas definições da função para aceitar um número indefinido
de argumentos posicionais ou palavras-chave
Parâmetros curinga posicionais (*args) e de palavra-chave (**kwargs) podem ser usados
na mesma função, bastando definir os parâmetros posicionais primeiro e os parâmetros
de palavra-chave depois.

In [3]: def does_wildcard_positions(*args):


for item in args:
print(item)

does_wildcard_positions('Marcos', 'Cesar', 'Botelho', 49)

file:///C:/Users/Usuário/Downloads/01 - Funcoes.html 6/7


25/09/2024, 14:09 01 - Funcoes

Marcos
Cesar
Botelho
49

In [4]: does_wildcard_positions(1,10, '14', 9.6, 1+20j, True)

1
10
14
9.6
(1+20j)
True

In [5]: def does_wildcard_keywords(**kwargs):


for key, value in kwargs.items():
print(f'{key} : {value}')

does_wildcard_keywords(number=49, name='Marcos', bool=True)

number : 49
name : Marcos
bool : True

In [6]: def does_wildcards(*args, **kwargs):


print(f'Posicional: {args}')
print(f'Keyword: {kwargs}')

In [7]: does_wildcards(1,2,a='a', b=3)

Posicional: (1, 2)
Keyword: {'a': 'a', 'b': 3}

file:///C:/Users/Usuário/Downloads/01 - Funcoes.html 7/7

Você também pode gostar