Thursday, October 28, 2010

Урок 6, возвращение мавра. Функции.

На прошлом уроке мы говорили о функции как независимой части кода, которую мы зовем, она приходит, что-то делает и уходит. Потом мы научились передавать в функцию данные. Сегодня мы делаем последний шаг - учимся возвращать из функции данные. А так-же отвечаем на вопросы радиослушателей.

В домашнем задание мы написали функцию которая получает 2 числа и печатает их сумму.
def my_sum(num1, num2):
    sum = num1 + num2
    print sum

Теперь мы хотим не распечатать сумму, а вернуть ее, как ответ на запрос.

Вспомним базовые встроенные системные функции которыми мы уже воспользовались:

size = raw_input("Ukazhite razmer kvadrata")

raw_input - функция которая получает переменную - строку - "Ukazhite razmer kvadrata", показывает ее на экране, принимает от пользователя данные и передает в наше пользования. Мы же ее записываем в переменную size.

num = int(size)

int - функция которая получает переменную типа текст, превращает ее в число, и возвращает в наше пользование. Мы же ее записываем в переменную num.

Итого, для того чтобы получить данные из функции, нам надо:

1. Не просто выполнить функцию, а присвоить ее (точнее ее результат) переменной.

2. В теле функции, сообщить что нам надо не просто распечатать результат, а вернуть его. Для этого мы используем новое ключевое слово - return.

Теперь наша функция суммы, выглядит так:
def my_sum(num1, num2):
    sum = num1 + num2
    return (num1 + num2)
А вызов и использование функции в теле кода будет выглядеть так:
sum = my_sum(5,3)
print sum

Вопросы радиослушателей:

Дорогой Джипа,

Я пишу самую великую программу в мире. У меня пока 854 строчки кода и ни одна не повторяется! Правда мне не нужны функции?

Целую, Нубас Подгорелов.

Ответ:

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

Вопрос:

Дорогой Джипа,

Что считается большой функцией? Как понять что я создал монстра? Есть ли какие-то принятые в народе индикаторы?

Целую, Нубас Пригорелов.

Ответ:

Я придерживаюсь довольно простого правила - функция должна целиком помещаться на экране. На нее удобно смотреть. Это плюс минус 40 строк кода. Разумеется не стоит вешаться если у вас в функции 60 строк, но как приблизительная индикация, это вполне хорошее правило.

Домашнее задание:

1. Напишите программу которая получает от пользователя оценки по 3 экзаменам и печатает среднюю оценку. Используйте функцию для подсчета и возврата средней оценки.

2. Напишите программу которая получает от пользователя 2 числа (num1, num2) и печатает число num1 в степени num2. Используйте функцию для подсчета и возврата числа.

3. Перепишите функцию из п.2 не используя символ возвода в степень.
Подсказка (для того чтобы показать нажмите ctrl+a): используйте цикл.