edubun
Русский

Создание собственных функций

Функция, завершившаяся без return, возвращает None, поэтому print(print("hi")) показывает hi, а затем None.

Две функции, одинаковые на экране

Большинство новичков считает, что показать значение и вернуть его — одно и то же. Вот две функции, которые, на первый взгляд, обе «дают» площадь прямоугольника. def начинает определение функции: имя, входные параметры в скобках, двоеточие и тело с отступом. Запусти программу: обе строки вывода выглядят одинаково.

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

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

show_area(4, 3)
print(area(4, 3))
Вывод
12
12

Теперь попробуй использовать результаты в вычислении. Разница появится сразу.

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)
Вывод
12
None 12
24

show_area выводит 12 на экран и завершается. Она ничего не передаёт обратно, а такая функция возвращает специальное значение None. Поэтому a равно None. area ничего не выводит: она возвращает 12 в вызвавшую её строку, и это 12 можно сохранить, вывести или удвоить. Вывод нужен человеку у экрана. Возвращаемое значение нужно остальной программе. Если результат понадобится позже, верни его.

Функция принимает аргументы, выполняет с ними своё тело и возвращает одно значение с помощью return. area(4, 3) превращается в 12, где бы ни был записан этот вызов.

Параметры — это имена, а аргументы — значения

В def area(w, h): w и h являются параметрами: именами, существующими только внутри функции. В area(4, 3) числа 4 и 3 являются аргументами: значениями, подставляемыми вместо этих имён при конкретном вызове. Они сопоставляются по позиции: первый аргумент попадает в первый параметр. При неверном числе аргументов Python выдаёт TypeError с именем пропущенного параметра.

У параметра может быть значение по умолчанию, записанное через = в определении. Тогда при вызове этот аргумент можно опустить: будет использовано значение по умолчанию. В учебнике Python они описаны в разделе об определении функций, а во встроенных функциях встречаются повсюду. У самого print тоже есть такое значение: его параметр end по умолчанию равен переводу строки.

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

print(greet("Mina"))
print(greet("Jun", "Hi"))
print("no new line", end=" ")
print("here")
Вывод
Hello, Mina!
Hi, Jun!
no new line here

return сразу завершает функцию

Функция останавливается на первом достигнутом return, даже если ниже есть другие строки. Поэтому ранний возврат удобно использовать для особых случаев. В функции ниже правило цены билета из урока об if оформлено так, чтобы любая часть программы могла запросить цену.

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)
Вывод
8000

Переменные, созданные внутри функции, локальны: они существуют во время её выполнения и исчезают при завершении. Переменная total внутри функции никак не связана с total снаружи. Поэтому функцию можно использовать повторно, не беспокоясь об именах в остальной программе.

defНачинает определение функции
параметрИмя в определении: w в def area(w, h)
аргументЗначение, переданное при вызове: 4 в area(4, 3)
returnВозвращает значение и завершает функцию
NoneТо, что возвращает функция без return
локальная переменнаяПеременная, существующая только внутри функции
  1. Что выведет этот код?
    def double(x):
        return x * 2
    
    print(double(7))
  2. Что выведет этот код?
    def hello():
        print("hi")
    
    result = hello()
    print(result)
    • hi
      hi
    • hi
      None
    • None
    • hi
  3. Что выведет этот код?
    def add(a, b):
        return a + b
    
    print(add(2, 3) * add(1, 1))
  4. Что выведет этот код?
    def f(x):
        return x + 1
        print("never")
    
    print(f(1))
  5. Что выведет этот код?
    def greet(name, greeting="Hello"):
        return greeting + " " + name
    
    print(greet("Bo"))
  6. Что выведет этот код?
    def sign(n):
        if n > 0:
            return "plus"
        if n < 0:
            return "minus"
        return "zero"
    
    print(sign(-4), sign(0))
  7. Что выведет этот код?
    print("a", end="-")
    print("b")
  8. Что выведет этот код?
    def total_of(nums):
        t = 0
        for n in nums:
            t += n
        return t
    
    print(total_of([4, 5, 6]))
  9. Как называются w и h в def area(w, h):?
    • Аргументы
    • Параметры
    • Возвращаемые значения
    • Ключевые слова
  10. Расположи строки по порядку, чтобы программа вывела 25.
    Вывод
    25
Частые ошибки
  • «Функция, напечатавшая ответ, вернула его». Вывод лишь показывает значение. Функция по-прежнему возвращает None, поэтому после x = show_area(4, 3) в x хранится None, а x * 2 вызывает TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'.
  • «Можно вызвать функцию выше строки её определения». Python выполняет код сверху вниз, поэтому в этом месте имени ещё нет: NameError: name 'area' is not defined. Помести def перед первым вызовом.
  • «Пропущенный аргумент просто станет нулём». Без значения по умолчанию Python остановится: area(4) вызывает TypeError: area() missing 1 required positional argument: 'h'.
Заметка для учителяПутаница между print и return является самым частым недоразумением на этом этапе и остаётся незаметной из-за одинакового вывода. Пусть ученики сохранят результат в переменной и используют во втором вычислении: None сразу обнаружится. Помогают слова: функция «отдаёт обратно» или «возвращает» значение, а print его «показывает». В корейской школьной программе по информатике использование функций связано с поиском и исправлением ошибок, поэтому пропущенный аргумент и вызов до def подойдут для небольшого упражнения по отладке.
Главное
  • def name(params): начинает определение функции; тело пишут с отступом.
  • return возвращает значение и завершает функцию.
  • print показывает значение, а не возвращает его. Без return возвращается None.
  • Аргументы заполняют параметры по порядку; пропуски заполняются значениями по умолчанию.
  • Созданные внутри функции переменные локальны для неё.
Источники курса (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)

Проверено: 2026-10-19