Создание собственных функций
Функция, завершившаяся без 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
24show_area выводит 12 на экран и завершается. Она ничего не передаёт обратно, а такая функция возвращает специальное значение None. Поэтому a равно None. area ничего не выводит: она возвращает 12 в вызвавшую её строку, и это 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 herereturn сразу завершает функцию
Функция останавливается на первом достигнутом 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 |
| локальная переменная | Переменная, существующая только внутри функции |
- Что выведет этот код?
def double(x): return x * 2 print(double(7)) - Что выведет этот код?
def hello(): print("hi") result = hello() print(result)hi
hihi
NoneNonehi
- Что выведет этот код?
def add(a, b): return a + b print(add(2, 3) * add(1, 1)) - Что выведет этот код?
def f(x): return x + 1 print("never") print(f(1)) - Что выведет этот код?
def greet(name, greeting="Hello"): return greeting + " " + name print(greet("Bo")) - Что выведет этот код?
def sign(n): if n > 0: return "plus" if n < 0: return "minus" return "zero" print(sign(-4), sign(0)) - Что выведет этот код?
print("a", end="-") print("b") - Что выведет этот код?
def total_of(nums): t = 0 for n in nums: t += n return t print(total_of([4, 5, 6])) - Как называются w и h в def area(w, h):?
- Аргументы
- Параметры
- Возвращаемые значения
- Ключевые слова
- Расположи строки по порядку, чтобы программа вывела 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'.
- 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