Funções Embutidas e Ajuda

Visão Geral

Perguntas
  • Como posso usar funções embutidas?

  • Como posso descobrir o que elas fazem?

  • Que tipos de erros podem ocorrer em progamas?

Objetivos
  • Explique o propósito de funções.

  • Chame corretamente funções Python.

  • Aninhe chamadas de funções corretamente.

  • Use o help para mostrar documentação para funções embutidas.

  • Corretamente descreva situações nas quais SyntaxError e NameError podem ocorrer.

Use comentários para adicionar documentação a programas.

# Essa frase não é executada pelo Python
ajuste = 0.5   # Nem essa - qualquer coisa depois do '#' é ignorado.

Uma função pode receber zero ou mais argumentos.

print('antes')
print()
print('depois')
antes

depois

Toda função retorna algo.

resultado = print('exemplo')
print('resultado de print é', resultado)
exemplo
resultado de print é None

Funções embutidas comumente usadas incluem max, min e round.

print(max(1, 2, 3))
print(min('a', 'A', '0'))
3
0

Funções podem funcionar somente para certos(as) (combinações de) argumentos.

print(max(1, 'a'))
TypeError                                 Traceback (most recent call last)
<ipython-input-52-3f049acf3762> in <module>
----> 1 print(max(1, 'a'))

TypeError: '>' not supported between instances of 'str' and 'int'

Funções podem ter valores padrão para alguns argumentos.

round(3.712)
4
round(3.712, 1)
3.7

Funções associadas a objetos são chamadas de métodos.

minha_string = 'Olá Mundo'    # criação de um objeto string

print(len(minha_string))       # a função len recebe uma string como argumento e retorna o comprimento da string

print(minha_string.swapcase()) # chamando o método swapcase no objeto minha_string

print(minha_string.__len__())  # chamando o método interno __len__ no objeto minha string, usado por len(minha_string)

9
oLÁ mUNDO
9
print(minha_string.isupper())          # Not all the letters are uppercase
print(minha_string.upper())            # This capitalizes all the letters

print(minha_string.upper().isupper())  # Now all the letters are uppercase
False
OLÁ MUNDO
True

Use a função embutida help para obter ajuda para uma função.

help(round)
Help on built-in function round in module builtins:

round(number, ndigits=None)
    Round a number to a given precision in decimal digits.
    
    The return value is an integer if ndigits is omitted or None.  Otherwise
    the return value has the same type as the number.  ndigits may be negative.

O Jupyter Notebook tem duas formas de obter ajuda.

Python reporta um erro de sintaxe quando ele não consegue entender a fonte de um programa.

# Esqueceu de fechar as apas na string
nome = 'CPFL
  File "<ipython-input-56-f42768451d55>", line 2
    nome = 'CPFL
                ^
SyntaxError: EOL while scanning string literal
# Um '=' a mais na assinalação
idade = = 52
  File "<ipython-input-57-ccc3df3cf902>", line 2
    idade = = 52
            ^
SyntaxError: invalid syntax
print("olá mundo"
  File "<ipython-input-6-d1cc229bf815>", line 1
    print ("olá mundo"
                      ^
SyntaxError: unexpected EOF while parsing

Python reporta um erro de runtime quando algo dá errado enquanto o programa está sendo executado.

pessoas = 53
restantes = 100 - ppessoas # escreveu 'pessoas' errado
NameError                                 Traceback (most recent call last)
<ipython-input-59-1214fb6c55fc> in <module>
      1 pessoas = 53
----> 2 restantes = 100 - ppessoas # escreveu 'pessoas' errado

NameError: name 'ppessoas' is not defined

O Que Acontece Quando

  1. Explique em termos simples de ordem de operações o seguinte programa: quando a adição acontece, quando a subtração acontece, o que cada função é chamada, etc.
  2. Qual é o valor final de radiancia?
radiancia = 1.0
radiancia = max(2.1, 2.0 + min(radiancia, 1.1 * radiancia - 0.5))

Solução

  1. Ordem das operações:
    1. 1.1 * radiancia = 1.1
    2. 1.1 - 0.5 = 0.6
    3. min(radiancia, 0.6) = 0.6
    4. 2.0 + 0.6 = 2.6
    5. max(2.1, 2.6) = 2.6
  2. No fim, radiancia = 2.6

Identifique a Diferença

  1. Faça um predição do que cada declaração print no programa abaixo vai imprimir.
  2. A linha max(len(rich), poor) roda ou produz uma mensagem de erro? Se ela roda, o resultado faz sentido?
string_facil = "abc"
print(max(string_facil))
rico = "ouro"
pobre = "latão"
print(max(rico, pobre))
print(max(len(rico), len(pobre)))

Solução

print(max(string_facil))
c
print(max(rico, pobre))
ouro
print(max(len(rico), len(pobre)))
5

max(len(rico), pobre) retorna um TypeError. Essa avalia para max(4, 'latão') e e como discutimos mais cedo uma string e um inteiro não podem ser comparados com sentido.

TypeError                                 Traceback (most recent call last)
<ipython-input-65-bc82ad05177a> in <module>
----> 1 max(len(rico), pobre)

TypeError: '>' not supported between instances of 'str' and 'int'

Por que não?

Por que max e min não retornam None quando são chamados sem argumentos?

Solução

max e min retornam TypeErrors nesse caso porque o número correto de argumentos não foi utilizado. Se só retornasse None, o erro seria bem mais difícil de encontrar pois provavelmente seria armazenado em uma variável e usado mais a frente no programa, para então causar um erro de runtime.

Último Caracter de Uma String

Se o Python começa a contar do zero, e len retorna o número de caracteres de uma string, que expressão de index vai dar o último caracter da string nome? (Nota: vamos ver uma maneira mais simples de fazer isso em um episódio mais para frente.)

Solução

nome[len(nome) - 1]

Explore a Documentação do Python!

A documentação oficial do Python é provavelmente a mais completa fonte de informação sobre a linguagem. Está disponível em diferentes idiomas e contém muitos recursos úteis. A página de funções embutidas contém um catálogo de todas essas funções, incluindo aquelas que cobrimos nessa aula. Algumas dessas são mais avançadas e desnecessárias nesse momento, mas outras são muito simples e úteis.

Pontos-chave

  • Use comentários para adicionar documentação a programas.

  • Uma função pode receber zero ou mais argumentos.

  • Funções embutidas comumente utilizadas incluem max, min e round.

  • Funções podem funcionar somente para certos(as) (combinações de) argumentos.

  • Funções podem ter valores padrão para alguns argumentos.

  • Use a função embutida help para conseguir ajuda sobre uma função.

  • O Jupyter Notebook tem duas formas de obter ajuda.

  • Toda função retorna algo.

  • Python reporta um erro de sintaxe quando ele não consegue entender a fonte de um programa.

  • Python reporta um erro de runtime quando algo dá errado enquanto o programa está sendo executado.

  • Conserte erros de sintaxe lendo o código fonte do programa, e erros de runtime monitorando a execução do programa.