Este artigo ajudará o leitor a continuar a partir do blog anterior sobre funções em Python, juntamente com algumas aplicações básicas no mundo real. Estaremos usando o Visual Studio Code como nosso editor de código. Se você não instalou o Visual Studio Code, as instruções estão disponíveis no primeiro blog.
Como discutido no blog anterior, funções em Python são tratadas como objetos. Assim como objetos em Python, funções também podem ser passadas como argumento para outra função.
Por exemplo:
def mul(x, y): return x*y def add(mul, y): return mul+y x = add(mul(9, 10), 10) print(x)
No bloco de código acima, pode-se ver que a função mul é passada como um argumento para a função add e é armazenada na variável x, que é então impressa para verificar a resposta.
100
Em Python, podemos definir uma função dentro de outra função. Essas funções são chamadas de funções aninhadas. Mas neste caso de uso, a função interna ou função aninhada não pode ser chamada separadamente. Ambos os exemplos são ilustrados no bloco de código a seguir.
Vamos escrever nossa primeira função.
def mul(x, y): m = x*y def square(m): return m*m return square(m) x = mul(9, 10) print(x)
Saída: 8100
No bloco de código acima, a função externa é “mul” que retorna a função square que recebe um argumento “m” que é a multiplicação de dois argumentos dados à função “mul”. A execução do código começa chamando a função “mul”, então o produto de “x” e “y” é armazenado na variável “m”. Como esta função está retornando a função square, a função “square” é chamada e o produto final, que é o quadrado de “m”, é retornado.
Vamos aprender algumas coisas importantes em Python, que tornarão sua jornada de codificação com Python muito melhor.
Esses são os argumentos que usamos como parâmetros de função. Vamos escrever uma função usual usando o que aprendemos até agora. Estaremos escrevendo uma função que pode nos dar a área máxima de um retângulo dado 2 áreas de retângulos como parâmetros para a função.
def maxarea(a, b): if a > b: return f'o retângulo a tem a maior área que é {a}' else: return f'o retângulo a tem a maior área que é {b}' x = maxarea(100, 60) print(x)
Saída: o retângulo a tem a maior área que é 100 [code lang="js"]
Esta função é boa para 2 parâmetros ou argumentos, mas e se precisarmos comparar mais de 2 áreas? Uma abordagem seria passar uma lista de áreas para a função.
def maxarea(lis): max = 0 for i in lis: if i > max: max = i return f"o retângulo que tem a maior área é {max}" x = maxarea([100, 60, 50]) print(x)
Saída: o retângulo que tem a maior área é 100
Essa abordagem é boa, mas devemos saber o número de parâmetros ou argumentos a serem dados com antecedência. Na execução de código em tempo real, isso seria um incômodo. Portanto, para facilitar a vida do programador, Python usa *args e **kwargs.
Este operador é um operador de desempacotamento que é geralmente usado para passar um número não especificado de parâmetros ou argumentos.
Como vimos, o operador “*” é usado para desempacotar valores. O exemplo é ilustrado abaixo.
x = [1, 2, 3, 4] y = [5, 6, 7, 8] z = *x, *y print(type(z)) print(z)
Saída: <class 'tuple'> (1, 2, 3, 4, 5, 6, 7, 8)
Como podemos ver, o operador de desempacotamento desempacotou a lista x e a lista y em uma tupla que é z. Também podemos ver que o resultado é uma tupla.
Vamos escrever a mesma função usando *Args.
def maxarea(*lis): max = 0 for i in lis: if i > max: max = i return f"o retângulo que tem a maior área é {max}" x = maxarea(100, 60, 50, 200) y = maxarea(100, 60, 50, 200, 9000) z = maxarea(100, 60, 50, 20, 90) print(x) print(y) print(z)
Saída: o retângulo que tem a maior área é 200 o retângulo que tem a maior área é 9000 o retângulo que tem a maior área é 100
Neste bloco de código, podemos ver que agora os argumentos são dinâmicos, podemos adicionar qualquer número de argumentos que serão desempacotados na função maxarea para nos dar o resultado desejado. Além disso, podemos comparar qualquer número de áreas neste contexto.
Os kwargs são como args, mas aceitam argumentos posicionais. Ele usa o operador ** que possui alguns atributos, como desempacotar múltiplos argumentos posicionais de qualquer comprimento, também pode desempacotar dicionários, também pode ser usado para combinar dois dicionários.
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {**a, **b} print(type(c)) print(c) Podemos ver pelo código acima que temos 2 dicionários a e b que são mesclados usando o operador ** para dar outro dicionário. Saída: <class 'dict'> {'h': 1, 'n': 2, 'm': 5, 'l': 10}
Quando usamos o operador * em vez do operador **, o código para este caso é ilustrado abaixo.
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {*a, *b} print(type(c)) print(c)
Saída: <class 'set'> {'n', 'l', 'm', 'h'}
Portanto, quando o operador * é usado em dois dicionários para mesclar, o resultado será um conjunto com apenas as chaves do dicionário.
A função maxarea usando **kwargs é ilustrada no bloco de código abaixo.
def maxarea(**lis): max = 0 for i in lis.values(): if i > max: max = i return f"o retângulo que tem a maior área é {max}" x = maxarea(a=1, b=2, c=3) y = maxarea(a=1, b=2) z = maxarea(a=1, b=2, c=3, d=9) print(x) print(y) print(z)
Saída: o retângulo que tem a maior área é 3 o retângulo que tem a maior área é 2 o retângulo que tem a maior área é 9
Neste blog sobre funções avançadas em Python, cobrimos tópicos como passar funções para outras funções, usar funções dentro de uma função, *Args em Python, operador “*” em Python, **kwargs em Python, e mais. Os tópicos futuros que incluem classes serão abordados no próximo post do blog. O dever de casa sobre funções avançadas em Python é dado abaixo.
O que é análise de cargos? Você já ouviu esse termo, sabe o que precisa…
Arquivos em formato PDF nos acompanham todos os dias. Essa forma universal de salvar conteúdo…
O desenvolvimento da Internet e do aprendizado de máquina finalmente deixou de lado os tradicionais…
A busca por raios X é uma das muitas técnicas de busca de dados usadas…
Hoje, vamos nos concentrar na fase inicial do desenvolvimento de empresas - start-ups. Vamos tentar…
Programas para criar aplicativos sem codificação – você conhece algum deles? Como foi mostrado em…