Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Funções embutidas e tipos embutidos e o que são (*args, **kwargs)

Boa tarde, pessoal. Tudo bem?

Depois da aula Ordenação básica fiquei com uma dúvida: qual a diferença entre tipos embutidos e funções embutidas? Verifiquei na documentação que o sort ( *, key=None, reverse=False) é um método enquanto o sorted(iterable, *, key=None, reverse=False) é uma função. Além disso, gostaria de saber o que são ( *args, **kwargs) que aparecem quando chamamos funções ou métodos no Python.

Obrigado pela ajuda!

2 respostas
solução!

Boa tarde Carlos, tudo bem? Espero que sim!

O sort é um método, que pertence à classe list. Portanto você consegue usá-lo somente usando o ponto ( . ) a partir de uma lista já criada.

Portanto você faz coisas do tipo:

lista_exemplo = [10, 6, 1, 3]
lista_exemplo.sort()

Isso altera a lista original, e é um método que funciona exclusivamente para listas.

Já o sorted é uma função built-in do Python, não é exclusiva da lista, recebendo um argumento do tipo iterável, como lista, tuplas e dicionários.

Ele não altera a lista original, sendo necessário atribuir a uma variável:

tupla_exemplo =  (10, 6, 1, 3)
tupla_exemplo2 = sorted(tupla_exemplo)
lista_exemplo = [10, 6, 1, 3]
lista_exemplo = sorted(lista_exemplo)

Repare que podemos atribuir a mesma variável anteriormente existente, substituindo o valor original, ou atribuir a uma nova variável.

Portanto vemos aqui uma diferença, as funções retornam um valor para ser atribuído a uma variável. Enquanto os métodos não retornam valor.

  • Funções apresentam o return
  • Métodos não tem return

Ex: Se tentar atribuir a uma variável usando o sort, a variável terá retorno None.

Já o *args significa que a função pode receber uma quantidade de parâmetros indeterminado que poderão ser usados na função.

Exemplo:

def titulos_paises(pais, *args):
    print('País: ', pais))
    for titulo in args:
        print('Ano: ', titulo)

Podemos passar qualquer quantidade de argumentos na função e ele irá percorrer os argumentos.

E o **kwargs funciona da mesma maneira, mas com parâmetros nomeados.

Eles não necessariamente precisam se chamar args e kwargs, é só uma convenção utilizar esses nomes, podem ser chamados *lista ou **dict por exemplo.

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!

Obrigado pela resposta, João Vitor!