Funções em Python: Guia Completo
Funções em Python: Guia Completo
Uma função é um trecho de código em um programa. A função realiza uma tarefa específica. As vantagens
de usar funções são:
Reutilização de código
Ocultação de informações
As funções em Python são cidadãos de primeira classe. Isso significa que as funções têm status igual aos outros
objetos em Python. Funções podem ser atribuídas a variáveis, armazenadas em coleções ou passadas como
argumentos. Isso traz flexibilidade adicional à linguagem.
Existem dois tipos básicos de funções. Funções embutidas e funções definidas pelo usuário. As embutidas
funções são parte da linguagem Python. Exemplos são:dir(), len()ouabs()O usuário
funções definidas são funções criadas com odefpalavra-chave.
Definindo funções
Uma função é criada com odefpalavra-chave. As declarações no bloco da função devem ser
indented.
def função():
passar
Odefa palavra-chave é seguida pelo nome da função com parênteses e dois pontos. O
declarações recuadas formam o corpo da função.
A função é executada posteriormente quando necessário. Dizemos que chamamos a função. Se chamarmos uma
função, as instruções dentro do corpo da função são executadas. Elas não são executadas até que o
a função é chamada.
minhafuncao()
"""
O script [Link] mostra como trabalhar com
funções em Python.
author: Jan Bodnar
ZetCode, 2011
"""
def mostrarNomeDoModulo():
print __doc__
def obterArquivoModulo():
retornar __file__
a = showModuleName()
b = getModuleFile()
imprimir a, b
$ ./[Link]
Nenhum ./[Link]
As definições de funções devem preceder seu uso. Caso contrário, o interpretador irá reclamar com um
NomeErro.
#!/usr/bin/python
def f1():
imprimir "f1()"
f1()
#f2()
def f2():
print "f2()"
No exemplo acima, temos duas definições de funções. Uma linha está comentada. Chamada de função
não pode estar à frente de sua definição.
#f2()
def f2():
imprimir "f2()"
We can call the f2()apenas após sua definição. Descomentando a linha obtivemos umNomeError.
#!/usr/bin/python
classe Algum:
@estático
def f():
imprimir "método f()"
def f():
imprimir "função f()"
def g():
def f():
print "f() função interna"
f()
Algum.f()
f()
g()
classe Algum:
@estático
def f():
print "método f()"
def f():
print "função f()"
def g():
def f():
print "f() função interna"
f()
Aqui of()a função é definida dentro de outrag()função. É uma função interna.
Some.f()
f()
g()
O método estático é chamado especificando o nome da classe, o operador de ponto e o nome da função
com colchetes. Outras funções são chamadas usando seus nomes e colchetes.
$ ./[Link]
método f()
função f()
função interna f()
Esta é a saída.
#!/usr/bin/python
def f():
Esta função imprime uma mensagem
Hoje é um dia nublado
imprimir f.func_doc
imprimir f.nome_da_funcao
def f():
Esta função imprime uma mensagem
Hoje é um dia nublado
Nós definimos umf()função. Ela imprime uma mensagem no console. Tem uma string de documentação.
imprimir id(f)
$ ./[Link]
Verdadeiro
3077407212
Esta função imprime uma mensagem
f
Saída do programa.
#!/usr/bin/python
def f():
passar
def g():
passar
def h(f):
imprima id(f)
a = (f, g, h)
para i em a:
imprimir i
h(f)
h(g)
We define three functions. We place them in a tuple and pass them to a function.
a = (f, g, h)
para i em a:
imprimir i
Colocamos três objetos de função em uma tupla e a percorremos com um loop for.
h(f)
h(g)
$ ./[Link]
<função f em 0xb7664fb4>
<function g at 0xb766c1b4>
<function h at 0xb766c3ac>
3076935604
3076964788
Saída [Link].
#!/usr/bin/python
def cubo(x):
retornar x * x * x
print abs(-1)
imprimir cubo(9)
imprimir sqrt(81)
def cubo(x):
retornar x * x * x
imprimir abs(-1)
Oabs()A função é uma função embutida prontamente acessível. Ela faz parte do núcleo da linguagem.
A palavra-chave return
Uma função é criada para realizar uma tarefa específica. Muitas vezes há um resultado de tal tarefa. Aretornar
a palavra-chave é usada para retornar valores de uma função. Uma função pode ou não retornar um valor. Se um
a função não tem uma palavra-chave de retorno, ela enviará umNenhumvalor.
#!/usr/bin/python
def mostrarMensagem(msg):
imprimir mensagem
def cubo(x):
retornar x * x * x
x = cubo(3)
imprimir x
showMessage("Computation finished.")
imprimir mostrarMensagem("Pronto.")
def mostrarMensagem(msg):
imprimir mensagem
OmostrarMensagem()a função não retorna explicitamente um valor. Ela mostra uma mensagem na
console.
def cubo(x):
retornar x * x * x
As funções cube() computam uma expressão e retornam seu resultado com oretornarpalavra-chave.
x = cubo(3)
showMessage("Computation finished.")
Nós chamamos oshowMessage() função com uma mensagem como parâmetro. A mensagem é impressa em
o console. Não esperamos um valor desta função.
print showMessage("Ready.")
Este código produz duas linhas. Uma é uma mensagem impressa pelomostrarMensagem()function. The
outro é oNenhumvalor, que é implicitamente enviado por funções sem oretornardeclaração.
$ ./[Link]
27
Cálculo concluído.
Pronto.
Nenhum
Exemplo de saída.
Podemos enviar mais de um valor de uma função. Os objetos após oretornaras palavras-chave são
separados por vírgulas.
#!/usr/bin/python
n = [1, 2, 3, 4, 5]
def estatísticas(x):
mx = max(x)
mn = min(x)
ln = len(x)
sm = soma(x)
Oretornara palavra-chave envia de volta quatro números. Os números são separados por uma vírgula
personagem. Na verdade, enviamos uma tupla contendo esses quatro valores. Também poderíamos retornar uma lista
em vez de uma tupla.
$ ./[Link]
(5, 1, 5, 15)
5 1 5 15
Saída.
Redefinição de função
Python é dinâmico por natureza. É possível redefinir uma função já definida.
#!/usr/bin/python
def mostrarMensagem(msg):
imprimir mensagem
mostrarMensagem("Pronto.")
def mostrarMensagem(msg):
imprimir strftime("%H:%M:%S", gmtime()),
imprimir msg
showMessage("Processing.")
Definimos ummostrarMensagem()função. Mais tarde, fornecemos uma nova definição da mesma função.
Do módulo de tempo, importamos duas funções que são usadas para calcular a hora atual.
def mostrarMensagem(msg):
imprimir msg
Esta é a primeira definição de uma função. Ela apenas imprime uma mensagem no console.
def mostrarMensagem(msg):
print strftime("%H:%M:%S", gmtime()),
imprimir mensagem
$ ./[Link]
Pronto.
23:49:33 Processando.
Saída do script.
Argumentos de função
A maioria das funções aceita argumentos. Argumentos são valores que são enviados para a função.
as funções processam os valores e, opcionalmente, retornam algum valor.
#!/usr/bin/python
def C2F(c):
retornar c * 9/5 + 32
imprimir C2F(100)
imprimir C2F(0)
imprimir C2F(30)
$ ./[Link]
212
32
86
Os argumentos nas funções Python podem ter valores implícitos. Um valor implícito é usado se nenhum
um valor é fornecido.
#!/usr/bin/python
def potência(x, y=2):
r = 1
para i em range(y):
r = r * x
retornar r
imprimir potência(3)
imprimir potência(3, 3)
print potencia(5, 5)
Aqui criamos uma função de potência. A função tem um argumento com um valor implícito. Podemos
chame a função com um ou dois argumentos.
$ ./[Link]
9
27
3125
Funções em Python podem especificar seus argumentos com uma palavra-chave. Isso significa que ao chamar um
função, especificamos tanto uma palavra-chave quanto um valor. Quando temos vários argumentos e eles são
usado sem palavras-chave, a ordem em que passamos esses argumentos é crucial. Se esperarmos um
nome, idade ou sexo em uma função sem palavras-chave, não podemos mudar sua ordem. Se usarmos
palavras-chave, nós podemos.
#!/usr/bin/python
In this example, the order in which we specify the arguments is important. Otherwise, we get
resultados incorretos.
$ ./[Link]
Name: Lary
Age: 43
Sex: M
Name: Joan
Age: 24
Sex: F
#!/usr/bin/python
# [Link]
Agora chamamos as funções com suas palavras-chave. A ordem pode ser alterada, embora não seja.
recomendado a fazer assim. Note que não podemos usar um argumento não-chave após um argumento-chave
argumento. Isso terminaria em um erro de sintaxe.
Este é um conceito jurídico. Um argumento não-chave pode ser seguido por argumentos de palavra-chave.
Isso terminará em um erro de sintaxe. Um argumento não-chave não pode seguir argumentos de palavras-chave.
#!/usr/bin/python
def soma(*args):
A função retorna a soma
de todos os valores
r = 0
para i em args:
r += i
retornar r
print sum.__doc__
imprimir soma(1, 2, 3)
imprima soma(1, 2, 3, 4, 5)
Nós usamos o* operador para indicar que a função aceitará um número arbitrário de argumentos.
Osoma()a função retornará a soma de todos os argumentos. A primeira string no corpo da função é
chamada a string de documentação da função. Ela é usada para documentar a função. A string deve ser
in triple quotes.
$ ./[Link]
A função retorna a soma
de todos os valores
6
15
Nós também podemos usar o** construir em nossas funções. Nesse caso, a função aceitará um
dicionário. O dicionário tem um comprimento arbitrário. Podemos então normalmente analisar o dicionário, como
habitual.
#!/usr/bin/python
def mostrar(**detalhes):
para i em detalhes:
%s: %s
This example demonstrates such a case. We can provide arbitrary number of key-value
argumentos. A função lidará com todos eles.
$ ./[Link]
age: 43
name: Lary
sex: M
Passing by reference
Os parâmetros das funções são passados por referência. Algumas linguagens passam cópias dos objetos para
funções. Passar objetos por referência tem duas conclusões importantes. O processo é mais rápido do que
se cópias de objetos fossem passadas. Objetos mutáveis que são modificados em funções são permanentemente
mudou.
#!/usr/bin/python
n = [1, 2, 3, 4, 5]
def f(x):
[Link]()
[Link]()
[Link](0, 0)
print "Dentro de f():", x
f(n)
No nosso exemplo, passamos uma lista de inteiros para uma função. O objeto é modificado dentro do corpo de
a função. Após chamar a função, o objeto original, a lista de inteiros é modificada.
def f(x):
[Link]()
[Link]()
[Link](0, 0)
imprimir "Dentro de f():", x
No corpo da função, trabalhamos com o objeto original. Não com uma cópia do objeto.
em muitas linguagens de programação, receberíamos uma cópia de um objeto por padrão.
$ ./[Link]
Original list: [1, 2, 3, 4, 5]
Dentro de f(): [0, 1, 2, 3]
Após a chamada da função: [0, 1, 2, 3]
Uma vez que a lista foi modificada, ela foi modificada para sempre.
#!/usr/bin/python
name = "Jack"
def f():
name = "Robert"
imprimir "Dentro da função", nome
Uma variável definida no corpo de uma função tem escopo local. Ela é válida apenas dentro do corpo do
função.
$ ./[Link]
Função externa Jack
Dentro da função Robert
Saída.
#!/usr/bin/python
name = "Jack"
def f():
imprimir "Dentro da função", nome
Por padrão, podemos obter o conteúdo de uma variável global dentro do corpo de uma função. Mas se nós
para mudar uma variável global em uma função, devemos usar oglobalpalavra-chave.
$ ./[Link]
Função externa Jack
Dentro da função Jack
#!/usr/bin/python
name = "Jack"
def f():
nome global
name = "Robert"
imprimir "Dentro da função", nome
Agora, mudaremos o conteúdo de uma variável de nome global dentro de uma função.
nome global
name = "Robert"
$ ./[Link]
Função externa Jack
Dentro da função Robert
Função externa Robert
Funções anônimas
É possível criar funções anônimas em Python. Funções anônimas não têm um
nome. Com olambdapalavra-chave, pequenas funções anônimas podem ser criadas. Anônimas
as funções também são chamadas de funções lambda pelos programadores Python. Elas fazem parte do
paradigma funcional incorporado no Python.
As funções Lambda são restritas a uma única expressão. Elas podem ser usadas sempre que funções normais
funções podem ser usadas.
#!/usr/bin/python
y = 6
z = lambda x: x * y
imprimir z(8)
z = lambda x: x * y
imprimir z(8)
A função lambda é executada. O número 8 é passado para a função anônima e ela
retorna 48 como o resultado. Note que z não é um nome para esta função. É apenas uma variável à qual
a função anônima foi atribuída.
$ ./[Link]
48
Saída do exemplo.
A função lambda pode ser usada elegantemente com outras partes funcionais da linguagem Python,
gostarmapa()oufiltrar()funções.
#!/usr/bin/python
No exemplo, temos uma lista de temperaturas em Celsius. Criamos uma nova lista contendo
temperaturas em fahrenheit.
Omapa()a função aplica a função anônima a cada elemento da lista cs. Ela cria um
nova lista ft contendo as temperaturas em Fahrenheit calculadas.
$ ./[Link]
[14,0, 32,0, 59,0, 86,0, 104,0]
Exemplo de saída.