Изучаем Python - [55]

Шрифт
Интервал

greet_users.py

def greet_users(names):

. ."""Вывод простого приветствия для каждого пользователя в списке."""

. .for name in names:

. . . .msg = "Hello, " + name.title() + "!"

. . . .print(msg)

(1) usernames = ['hannah', 'ty', 'margot']

greet_users(usernames)

В соответствии со своим определением функция greet_users() рассчитывает получить список имен, который сохраняется в параметре names. Функция перебирает полученный список и выводит приветствие для каждого пользователя. В точке (1) мы определяем список пользователей usernames, который затем передается greet_users() в вызове функции:

Hello, Hannah!

Hello, Ty!

Hello, Margot!

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

Изменение списка в функции


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

Допустим, компания печатает на 3D-принтере модели, предоставленные пользователем. Проекты хранятся в списке, а после печати перемещаются в отдельный список. В следующем примере приведена реализация, не использующая функции:

printing_models.py

# Список моделей, которые необходимо напечатать.

unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']

completed_models = []


# Цикл последовательно печатает каждую модель до конца списка.

# После печати каждая модель перемещается в список completed_models.

while unprinted_designs:

. .current_design = unprinted_designs.pop()

. .# Печать модели на 3D-принтере.

. .print("Printing model: " + current_design)

. .completed_models.append(current_design)

. .

# Вывод всех готовых моделей.

print("\nThe following models have been printed:")

for completed_model in completed_models:

. .print(completed_model)

В начале программы создается список моделей и пустой список completed_models, в который каждая модель перемещается после печати. Пока в unprinted_designs остаются модели, цикл while имитирует печать каждой модели: модель удаляется с конца списка, сохраняется в current_design, а пользователь получает сообщение о том, что текущая модель была напечатана. Затем модель перемещается в список напечатанных. После завершения цикла выводится список напечатанных моделей:

Printing model: dodecahedron

Printing model: robot pendant

Printing model: iphone case


The following models have been printed:

dodecahedron

robot pendant

iphone case

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

(1) def print_models(unprinted_designs, completed_models):

. ."""

. .Имитирует печать моделей, пока список не станет пустым.

. .Каждая модель после печати перемещается в completed_models.

. ."""

. .while unprinted_designs:

. . . .current_design = unprinted_designs.pop()

. .

. . . .# Имитация печати модели на 3D-принтере.

. . . .print("Printing model: " + current_design)

. . . .completed_models.append(current_design)

. . . .

(2)def show_completed_models(completed_models):

. ."""Выводит информацию обо всех напечатанных моделях."""

. .print("\nThe following models have been printed:")

. .for completed_model in completed_models:

. . . .print(completed_model)

. . . .

unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']

completed_models = []

print_models(unprinted_designs, completed_models)

show_completed_models(completed_models)

В точке (1) определяется функция print_models() с двумя параметрами: список моделей для печати и список готовых моделей. Функция имитирует печать каждой модели, последовательно извлекая модели из первого списка и перемещая их во второй список. В точке (1) определяется функция show_completed_models() с одним параметром: списком напечатанных моделей. Функция show_completed_models() получает этот список и выводит имена всех напечатанных моделей.

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

unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']

completed_models = []


print_models(unprinted_designs, completed_models)

show_completed_models(completed_models)

Программа создает список моделей для печати и пустой список для готовых моделей. Затем, поскольку обе функции уже определены, остается вызвать их и передать правильные аргументы. Мы вызываем print_models() и передаем два необходимых списка; как и ожидалось, print_models() имитирует печать моделей. Затем вызывается функция show_completed_models(), и ей передается список готовых моделей, чтобы функция могла вывести информацию о напечатанных моделях. Благодаря содержательным именам функций другой разработчик сможет прочитать этот код и понять его даже без комментариев.


Рекомендуем почитать
Электронные издания

Книга посвящена рассмотрению всей совокупности проблем, связанных с созданием, воспроизведением на компьютере и практическим использованием электронных и мультимедийных изданий. В частности, показано место этих изданий в современной медиа-индустрии. Рассмотрено использование различных HTML-редакторов и специализированных программных средств создания электронных и мультимедийных изданий (MS FrontPage, Macromedia Director, DreamWeaver и Flash, а также 3ds max). В книгу также вошли разделы, связанные с публикацией и хранением электронных изданий с помощью баз данных, а также семантическим анализом, индексацией и организацией поиска и долговременного хранения электронных документов.


Главный рубильник. Расцвет и гибель информационных империй от радио до интернета

Превратится ли всемирная паутина в «традиционное СМИ», содержание которого строго контролируется в интересах максимизации прибыли? В чьих руках сейчас находится Рубильник интернет-истории и, по сути, — развития общества? Исследуя развитие телефонии, радио, кино и телевидения, автор показывает, как эти индустрии прошли путь от хобби — к крупному бизнесу, от открытости и гибкости — к закрытой и жесткой системе. Какое будущее ожидает всемирную Сеть?Пролить свет на прошлое, чтобы предвидеть будущее — главная задача этой книги.Эта книга для тех, кто считает интернет не просто средством общения, но и инструментом познания мира, способом самовыражения.


Социальные сети без страха для тех, кому за...

Чем полезен Интернет пожилому человеку? Прежде всего, неограниченными возможностями общения. Вы можете вести виртуальный дневник или общаться с друзьями в социальных сетях, делиться советами на форумах или переписываться с родственниками, живущими за рубежом, находить старых друзей и заводить новых.Книга поможет вам ориентироваться в мире социальных сетей и интерактивных сервисов, научит вас работать с ними и использовать все те возможности, которые они предоставляют. Материал книги изложен в доступной форме, что облегчает его восприятие, а различные способы выполнения тех или иных действий дадут вам возможность выбрать наиболее удобный способ именно для вас.


Халявные антивирусы и другие бесплатные программы из Интернета!

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


Яндекс для всех

Рассказывается о ведущем поисковом ресурсе российской части Интернета — Яндексе. Описаны его сервисы для поиска документов и новостей, блогов и адресов, товаров и музыкальных произведений. Рассмотрены почтовый сервис и сервис для создания и размещения сайтов на Народ. ру. Читатель узнает о том, что такое "электронные деньги" и как с их помощью оплатить товар. Большое внимание уделяется общедоступным поисковым программам, которые Яндекс предлагает своим посетителям для поиска информации не только на сайтах, но и на своем компьютере.


Образование русскоязычного сегмента Фидонет в Западной Европе

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


В работу с головой. Паттерны успеха от IT-специалиста

Не можете сосредоточиться на работе? Постоянно отвлекаетесь на проверку электронной почты, социальные сети и новостные ленты? Пора воспользоваться советами от ведущих IT-специалистов и погрузиться в работу с головой.Освойте один из самых ценных навыков – умение сосредоточиться на сложной задаче, не отвлекаясь на мелочи. Только так можно справиться со сложной информацией и добиться лучших результатов за минимальное время. Погружение в работу – это суперсила в нашей все более конкурентной экономике XXI века.


SQL: быстрое погружение

Что общего между самыми востребованными профессиями и стремительным увеличением количества информации в мире? Ответ: язык структурированных запросов (SQL). SQL — рабочая лошадка среди языков программирования, основа основ для современного анализа и управления данными. Книга «SQL: быстрое погружение» идеальна для всех, кто ищет новые перспективы карьерного роста; для разработчиков, которые хотят расширить свои навыки и знания в программировании; для любого человека, даже без опыта, кто хочет воспользоваться возможностями будущего, в котором будут править данные.


Чистый код. Создание, анализ и рефакторинг

Даже плохой программный код может работать. Однако если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение». Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, снизу вверх и даже изнутри. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого. Вы узнаете, как писать хороший код и как преобразовать плохой код в хороший. Книга состоит из трех частей.


Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих

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