Nesta aula iniciaremos o estudo das funções, a principal estrutura para separarmos e modularizarmos nossas aplicações. E também, são as funções que originam do Paradigma de Programação Funcional. |
INTRODUÇÃO
Funções são blocos de instrução que podem ser invocados de qualquer parte do nosso código. Toda função, por definição, possui um nome, pode receber parâmetros e pode retornar valores. Nem toda função receberá parâmetros, da mesma forma, que nem toda função retornará valores. Tudo dependerá da situação, ainda assim, a estrutura sempre seguirá um padrão e por isso, é facilmente reconhecido.
Em Python, funções são objetos de primeira classe. |
A ideia mais primitiva das funções é o agrupamento de instruções, proporcionando um meio simples de execução sequencial e que pode ser invocado de qualquer parte a qualquer momento. Dessa forma, toda função irá possuir um bloco de instrução e quando invocada, o cursor de execução do programa se posicionará na primeira linha desse bloco e a execução ocorrerá de cima para baixo, uma instrução após outra.
As função podem definir em seu cabeçalho um conjunto de valores que devem ser enviados quando a função for invocada. Desta foram, a função só será invocada se os valores forem também definidos. Após a execução das instruções definidas no bloco de instrução da função, a mesma poderá retornar um valor e, dessa forma, temos um ciclo onde os dados são enviados, processados e retornados. Por isso é que raramente devemos utilizar variáveis globais, até porque, todos valores podem ser enviados e retornados pelas funções de maneira explicita.
Como todos os parâmetros estão por definição associados a função e possuem seu escopo restrito a esta, acabamos por ter uma situação em que é fácil depurar e encontrar problemas, até porque, é de certeza absoluta que o valor de um parâmetro foi alterado no escopo da função - situação que não ocorre quando os valores são manipulados por variáveis globais, até porque, estas podem ter seus valores alterados em qualquer lugar por qualquer função.
Num primeiro momento, temos que entender que uma função é um bloco de instrução independente, até porque, possui escopo restrito, e após a execução das instrução definidas em seu bloco de instrução, a mesma é finalizada, as variáveis desalocadas e o cursor de execução do programa volta ao ponto onde a função foi invocada.
FUNÇÃO vs MÉTODO
O conceito de função e método se diferenciam só e somente só pelo retorno de valores.
Toda função é um bloco de instrução que, possui um nome único que a identifica em seu escopo, pode receber parâmetros e SEMPRE retorna um valor.
Um método é um bloco de instrução, possui um nome único que o identifica em seu escopo, pode receber parâmetros e NUNCA retorna valores.
Na prática utilizamos diversas vezes ambos conceitos, até porque, é normal precisarmos agrupar um conjunto de instruções para que sejam executadas sequencialmente e após a execução da última instrução, o cursor volta e o programa continua de onde parou.
Outras vezes, implementaremos blocos de instruções que processarão uma informação e retornaram informações processadas, logo, estamos utilizando o conceito de funções.
No nosso caso, temos que o Python não faz distinção explicita entre ambos conceitos. Então, o importante é somente conhecer os conceitos, até porque, na prática a implementação se tornará transparente.
INTRODUÇÃO ÁS FUNÇÕES EM PYTHON
Em Python, funções são objetos que podem ser invocados. Os Callable objects, ou entao, objetos invocáveis, se diferenciam dos demais objetos por implementarem a função __call__(). Por definição, todo objeto pra ser invocado precisa implementar a função __call__().
Dessa forma, funções são objetos do tipo types.FunctionType ou então, types.LambdaType. Por isso a importância em entender as funções como sendo objetos executáveis.
Uma referência seguida por um par de parêntesis é a notação que distingue o uso de variáveis e de objetos invocáveis. Essa notação implica na execução da função __call__(). A função __call__ também receberá os argumentos definidos entre parêntesis. Por fim, a função __call__ tem definido a capacidade de retornar valores.
Dessa definição, concluimos que objetos capazes de serem invocados poderão receber parâmetros, como também, poderão retornar valores.
Quando falamos de objetos que podem ser invocados é normal pensarmos em funções, porém, classes também são objetos invocaveis, até porque, a notação utilizada é a mesma e inclusive, é possível utilizar classes como sendo funções.
OBJETOS INVOCÁVEIS
A seguir temos os tipos de objetos que podem ser invocáveis, isto é, objetos que funcionam como funções. Sintaticamente falando, objetos invocáveis fazem uso do call operator () (operador de invocação).
- User-defined functions
- Instance methods
- Generator functions
- Coroutine functions
- Asynchronous generator functions
- Built-in functions
- Built-in methods
- Classes
- Class Instances
class A():
def self.__init__(self, *arg):
pass
def func(num1, num2):
pass
A(1, 2, 3) #invocando a classe A
func(1, 2) #invocando a função func
DEFINIÇÃO
Para declararmos uma função utilizamos a palavra reservada def.
A nomenclatura das funções segue as mesmas regras de nomenclatura das variáveis.
Em Python, não utilizamos o tipo de nomenclatura CamelCase, isto é, definir a primeira letra de cada palavra como sendo maiúscula. O padrão é separar as palavras com o uso de um underline.
def minha_func()
print("Fala galera!")
INVOCANDO FUNÇÕES
O interpretador do Python tentará invocar uma função todas as vezes em que houver uma referência seguida por um par de parêntesis. Ao invocarmos uma função, é necessário enviar um valor válido para cada parâmetro contido na definição. Caso não haja parâmetros, basta somente abrirmos e fecharmos parêntesis.
minha_func()
EXEMPLO FEITO EM AULA
# coding: utf-8
# =================
# = eXcript.com =
# =================
# INTRODUÇÃO ÀS FUNÇÕES
def minha_func():
print("Fala galera!!")
Tags curso, python, função, procedimento, método, blog
Comentários
comments powered by Disqus