edubun
Português

Escrevendo suas próprias funções

Uma função que termina sem return devolve None, e por isso print(print("hi")) mostra hi e depois None.

Duas funções que parecem iguais na tela

A maioria dos iniciantes acredita que mostrar um valor e devolvê-lo são a mesma coisa. Aqui estão duas funções que parecem "dar" a área de um retângulo. def inicia a definição de uma função: um nome, as entradas entre parênteses, dois-pontos e um corpo recuado. Execute o programa e as duas linhas de saída parecem iguais.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

show_area(4, 3)
print(area(4, 3))
Saída
12
12

Agora tente usar os resultados num cálculo. A diferença aparece na hora.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

a = show_area(4, 3)
b = area(4, 3)
print(a, b)
print(b * 2)
Saída
12
None 12
24

show_area imprime 12 na tela e termina. Não devolve nada, e uma função que não devolve nada retorna o valor especial None. Então a é None. area não imprime nada; ela devolve 12 à linha que a chamou, e esse 12 pode ser guardado, impresso ou dobrado. Imprimir é para as pessoas que olham a tela. Devolver é para o resto do programa. Se você quer usar um resultado depois, devolva-o.

Uma função recebe argumentos, executa o corpo com eles e devolve um valor com return. area(4, 3) vira 12 onde quer que esteja escrita.

Parâmetros são os nomes, argumentos são os valores

Em def area(w, h):, w e h são parâmetros: nomes que existem só dentro da função. Em area(4, 3), 4 e 3 são argumentos: os valores que preenchem esses nomes naquela chamada. Eles são associados por posição, então o primeiro argumento vai para o primeiro parâmetro. Chame a função com o número errado de argumentos e o Python para com um TypeError que cita o parâmetro que falta.

Um parâmetro pode ter um valor padrão, escrito com = na definição. Quem chama pode omitir esse argumento, e o padrão é usado. O tutorial do Python mostra valores padrão na seção sobre definir funções, e eles estão por toda parte nas funções embutidas. O próprio print tem um: o parâmetro end tem como padrão uma nova linha.

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"

print(greet("Mina"))
print(greet("Jun", "Hi"))
print("no new line", end=" ")
print("here")
Saída
Hello, Mina!
Hi, Jun!
no new line here

return encerra a função na hora

Uma função para no primeiro return que alcança, mesmo que haja mais linhas abaixo. Isso faz dos retornos antecipados um jeito limpo de tratar casos especiais. A função abaixo usa a regra do ingresso da unidade sobre if, agora empacotada para que qualquer parte do programa possa pedir um preço.

def ticket_price(age):
    if age < 7:
        return 0
    if age <= 18:
        return 3000
    return 5000

family = [40, 15, 5]
total = 0
for age in family:
    total += ticket_price(age)
print(total)
Saída
8000

As variáveis criadas dentro de uma função são locais: existem enquanto a função roda e desaparecem quando ela termina. Uma variável chamada total dentro de uma função não tem nada a ver com um total fora dela. Isso permite reutilizar uma função sem se preocupar com quais nomes o resto do programa usa.

defInicia a definição de uma função
parâmetroUm nome na definição: w em def area(w, h)
argumentoUm valor passado numa chamada: 4 em area(4, 3)
returnDevolve um valor e encerra a função
NoneO que uma função devolve quando não tem return
variável localUma variável que existe só dentro de uma função
  1. O que isto mostra?
    def double(x):
        return x * 2
    
    print(double(7))
  2. O que isto mostra?
    def hello():
        print("hi")
    
    result = hello()
    print(result)
    • hi
      hi
    • hi
      None
    • None
    • hi
  3. O que isto mostra?
    def add(a, b):
        return a + b
    
    print(add(2, 3) * add(1, 1))
  4. O que isto mostra?
    def f(x):
        return x + 1
        print("never")
    
    print(f(1))
  5. O que isto mostra?
    def greet(name, greeting="Hello"):
        return greeting + " " + name
    
    print(greet("Bo"))
  6. O que isto mostra?
    def sign(n):
        if n > 0:
            return "plus"
        if n < 0:
            return "minus"
        return "zero"
    
    print(sign(-4), sign(0))
  7. O que isto mostra?
    print("a", end="-")
    print("b")
  8. O que isto mostra?
    def total_of(nums):
        t = 0
        for n in nums:
            t += n
        return t
    
    print(total_of([4, 5, 6]))
  9. Em def area(w, h):, como w e h se chamam?
    • Argumentos
    • Parâmetros
    • Valores de retorno
    • Palavras-chave
  10. Coloque as linhas em ordem para o programa imprimir 25.
    Saída
    25
Erros comuns
  • "Uma função que imprime a resposta a devolveu." Imprimir só mostra o valor. A função continua devolvendo None, então x = show_area(4, 3) deixa x como None e x * 2 para com TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'.
  • "Posso chamar uma função acima da linha em que a defino." O Python executa de cima para baixo, então nesse ponto o nome ainda não existe: NameError: name 'area' is not defined. Ponha o def acima da primeira chamada.
  • "Se eu omitir um argumento, ele vira zero." Sem valor padrão, o Python para: area(4) dá TypeError: area() missing 1 required positional argument: 'h'.
Nota do professorA confusão entre print e return é o mal-entendido mais comum nesta etapa, e ela se esconde porque a tela parece idêntica. Faça os alunos guardarem o resultado numa variável e usá-lo num segundo cálculo; o None aparece na hora. A linguagem ajuda: diga que uma função "devolve" ou "retorna" um valor e reserve "mostra" para o print. O currículo coreano de informática do ensino fundamental une o uso de funções à busca e correção de erros, então os erros de argumento faltando e de chamada antes do def são bom material para um breve exercício de depuração.
Pontos-chave
  • def name(params): inicia uma função; o corpo é recuado.
  • return devolve um valor e encerra a função.
  • print mostra um valor; não o devolve. Sem return, o resultado é None.
  • Os argumentos preenchem os parâmetros por posição; os valores padrão preenchem os que faltam.
  • As variáveis criadas dentro de uma função são locais a ela.
Fontes deste curso (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Data de verificação: 2026-10-19