Методы построения графиков функций содержащих модуль
- Мусина Диляра Фаиковна, учитель
Разделы: Математика, Конкурс «Презентация к уроку»
Презентация к уроку
Загрузить презентацию (201 кБ)
Цель урока:
- повторить построение графиков функций содержащих знак модуля;
- познакомиться с новым методом построения графика линейно-кусочной функции;
- закрепить новый метод при решении задач.
Оборудование:
- мультимедиа проектор,
- плакаты.
Ход урока
Актуализация знаний
На экране слайд 1 из презентации.
Что является графиком функции y=|x| ? (слайд 2).
(совокупность биссектрис 1 и 2 координатных углов)
Найдите соответствие между функциями и графиками, объясните ваш выбор (слайд 3).
Рисунок 1
y=| x+3|
y=| x| +3
y=-2| x| -2
y=6-| x-5|
y=1/3| x-6| -3
Расскажите алгоритм построения графиков функций вида y=|f(x)| на примере функции y=|x2-2x-3| (слайд 4)
Ученик: чтобы построить график данной функции нужно
— построить параболу y=x2-2x-3
— часть графика над ОХ сохранить, а часть графика расположенную ниже ОХ отобразить симметрично относительно оси ОХ (слайд 5)
Рисунок 2
Рисунок 3
Расскажите алгоритм построения графиков функций вида y=f(|x|) на примере функции y=x 2-2|x|-3 (слайд 6).
Ученик: Чтобы построить график данной функции нужно:
— построить параболу.
— часть графика при х 0 сохраняется и отображается симметрии относительно оси ОУ (слайд 7)
Рисунок 4
Расскажите алгоритм построения графиков функций вида y=|f(|x|)| на примере функции y=|x2-2|x|-3| (слайд 8).
Ученик: Чтобы построить график данной функции нужно:
— нужно построить параболу у=x2-2x-3
— строим у= x2-2|x|-3, часть графика сохраняем и симметрично отображаем относительно ОУ
— часть над ОХ сохраняем, а нижнюю часть симметрично отображаем относительно ОХ (слайд 9)
Рисунок 5
Следующее задание выполняем письменно в тетрадях.
1. Построить график линейно-кусочной функции у=|х+2|+|х-1|-|х-3|
Ученик на доске с комментарием:
— находим нули подмодульных выражений х1=-2, х2=1, х3=3
— разбиваем ось на промежутки
— для каждого промежутка запишем функцию
при х < -2, у=-х-4
при -2 х<1, у=х
при 1 х<3, у = 3х-2
при х 3, у = х+4
— строим график линейно-кусочной функции.
Мы с вами построили график функции используя определение модуля (слайд 10).
Рисунок 6
Предлагаю вашему вниманию “метод вершин”, который позволяет строить график линейно-кусочной функции (слайд 11). Алгоритм построения дети записывают в тетрадь.
Метод вершин
Алгоритм:
- Найдем нули каждого подмодульного выражения
- Составим таблицу, в которой кроме нулей запишем по одному значению аргумента слева и справа
- Нанесем точки на координатную плоскость и соединим последовательно
2. Разберем этот метод на той же функции у=|х+2|+|х-1|-|х-3|
Учитель на доске, дети в тетрадях.
Метод вершин:
— найдем нули каждого подмодульного выражения;
— составим таблицу, в которой кроме нулей запишем по одному значению аргумента слева и справа
х -3 -2 1 3 4
у -1 -2 1 7 8
— нанесем точки на координатную плоскость и соединим последовательно.
Графиком линейно-кусочной функции является ломанная с бесконечными крайними звеньями (слайд 12) .
Рисунок 7
Каким же методом график получается быстрее и легче?
3. Чтобы закрепить данный метод предлагаю выполнить следующее задание:
При каких значения х функция у=|х-2|-|х+1| принимает наибольшее значение.
Следуем алгоритму; ученик на доске.
у=|х-2|-|х+1|
х1=2, х2=-1
у(-2)=4-1=3
у(-1)=3
у(2)=-3
у(3)=1-4=3, соединяем последовательно точки.
унаиб = 3
4. Дополнительное задание
При каких значениях а уравнение ||4+x|-|x-2||=a имеет два корня.
5. Домашняя работа
а) При каких значениях Х функция у =|2x+3|+3|x-1|-|x+2| принимает наименьшее значение.
б) Построить график функции y=||x-1|-2|-3| .
Графики прямой, параболы, гиперболы, с модулем
Пошаговое построение графиков.
«Навешивание» модулей на прямые, параболы, гиперболы.
Графики — самая наглядная тема по алгебре. Рисуя графики, можно творить, а если еще и сможешь задать уравнения своего творчества, то и учитель достойно это оценит.
Для понимания друг друга введу немного «обзываний» системы координат:
Для начала построим график прямой y = 2x − 1.
Не сомневаюсь, что ты помнишь. Я напомню себе, что через 2 точки можно провести одну прямую.
Возьмем значение X = 0 и Х = 1 и подставим в выражение y = 2x − 1, тогда соответственно Y = − 1 и Y = 1
Через данные две точки А = (0; −1) и B = (1; 1) проводим единственную прямую:
А если теперь добавить модуль y = |2x − 1|.
Модуль — это всегда положительное значение, получается, что «y» должен быть всегда положительным.
Значит, если модуль «надет» на весь график, то, что было в нижней части «−y», отразится в верхнюю (как будто сворачиваете лист по оси х и то, что было снизу, отпечатываете сверху).
Получается такая зеленая «галочка».
Красота! А как же будет выглядеть график, если надеть модуль только на «х»: y = 2|x| − 1?
Одна строчка рассуждений и рисуем:
Модуль на «x», тогда в этом случае x = −x, то есть все, что было в правой части, отражаем в левую. А то, что было в плоскости «−x», убираем.
Здесь отражаем относительно оси «y». Такая же галочка, только теперь через другую ось.
Смертельный номер: y = |2|x| − 1|.
Черную прямую y = 2x − 1 отражаем относительно оси Х, получим y = |2x − 1|. Но мы выяснили, что модуль на х влияет только на левую часть.
В правой части: y = |2x − 1| и y = |2|x| − 1| идентичны!
А после этого отражаем относительно оси «y» то, что мы получили справа налево:
Если ты человек амбициозный, то прямых тебе будет мало! Но то, что описано выше, работает на всех остальных графиках, значит делаем по аналогии.
Разберем по винтикам параболу y = x² + x − 2. Точки пересечения с осью «x» получим с помощью дискриминанта: x₁ = 1 и x₂ = -2.
Можно найти вершину у параболы и взять пару точек для точного построения.
А как будет выглядеть график: y = |x²| + x − 2? Слышу: «Такого мы еще не проходили», а если подумаем? Модуль на x², он же и так всегда положителен, от модуля тут толку, как от стоп-сигнала зайцу − никакого.
При y = x² + |x| − 2 все так же стираем всю левую часть, и отражаем справа налево:
А дальше что мелочиться: рассмотри сразу остальные графики с модулем!
Следующий смертельный номер: |y| = x² + x − 2, подумай хорошенько, а еще лучше попробуй нарисовать сам.
При положительных значениях «y» от модуля нет смысла − уравнения y = x² + x − 2, а при «−y» ничего не меняется, будет так же y = x² + x − 2!
Рисуем параболу в верхней части системы координат (где у > 0), а затем отражаем вниз.
А теперь сразу комбо:
Cиний: похож на y = x² + |x| − 2, только поднят вверх. Строим график в правой части, а затем отражаем через ось Y влево.
Оранжевый: строим в правой части и отражаем относительно оси Х. Доходим до оси Y и отражаем все что было справа налево. Двойка в знаменателе показывает, что график будет «шире», расходится в бока он быстрее остальных.
Зеленый: Так же начинаем с правой части и отражаем относительно оси оси Y. Получается график y = |x² + x − 2|, но еще есть −2, поэтому опустим график на 2 вниз. Теперь параболы как бы отражается относительно Y = − 2.
Легкий и средний уровень позади, и настала пора выжать концентрацию на максимум, потому что дальше тебя ждут гиперболы, которые частенько встречаются во второй части ЕГЭ и ОГЭ.
y = 1/x — простая гипербола, которую проще всего построить по точкам, 6-8 точек должно быть достаточно:
А что будет, если мы добавим в знаменателе «+1»? График сдвинется влево на единицу:
А что будет, если мы добавим в знаменателе «−1»? График сдвинется вправо на единицу.
А если добавить отдельно «+1» y = (1/x) + 1? Конечно, график поднимется вверх на единицу!
Глупый вопрос: а если добавить отдельно «−1» y = (1/x) − 1? Вниз на единицу!
Теперь начнем «накручивать» модули: y = |1/x + 1| — отражаем все из нижней части в верхнюю.
Возьмем другой модуль, мой амбициозный друг, раз ты дошел до этогог места: y = |1/(x + 1)|. Как и выше, когда модуль надет на всю функцию, мы отражаем снизу вверх.
Можно придумывать массу вариантов, но общий принцип остается для любого графика. Принципы повторим в выводах в конце статьи.
Фиолетовый: Вычитаем из дроби −1 и сдвигаем график вниз на единицу. Ставим модуль − отражаем все, что снизу вверх.
Оранжевый: Ставим +1 в знаменателе и график смещается влево на единицу. Вычитаем из дроби −1 и сдвигаем график вниз на единицу. А после этого ставим модуль − отражаем все, что снизу вверх.
Зеленый: Сначала получим фиолетовый график. После этого ставим «−» и отражаем график по горизонтали. Сгибаем лист по оси Х и переводим его вниз. Остается добавить +1, это значит, что его нужно поднять вверх на единицу.
Модули не так уж страшны, если еще вспомнить, что их можно раскрыть по определению:
И построить график, разбив его на кусочно-заданные функции.
Например для прямой:
Для параболы с одним модулем будет два кусочно-заданных графика:
C двумя модулями кусочно-заданных графиков будет четыре:
Таким способом, медленно и кропотливо можно построить любой график!
Выводы:
- Модуль — это не просто две палочки, а жизнерадостное, всегда положительное значение!
- Модулю без разницы находится он в прямой, параболе или еще где-то. Отражения происходят одни и те же.
- Любой нестандартный модуль можно разбить на кусочно-заданные функции, условия только вводятся на каждый модуль.
- Существует большое количество модулей, но парочку вариантов стоит запомнить, чтобы не строить по точкам:
- Если модуль «надет» на все выражение (например, y = |x² + x − 2|), то нижняя часть отражается наверх.
- Если модуль «надет» только на х (например, y = x² + |x| − 2), то правая часть графика отражается на левую часть. А «старая» левая часть стирается.
- Если модуль «надет» и на х, и на все выражение (например, y = |x² + |x| − 2|), то сначала отражаем график снизу вверх, после этого стираем полностью левую часть и отражаем справа налево.
- Если модуль «надет» на y (например, |y| = x² + x − 2), то мы оставляем верхнюю часть графика, нижнюю стираем. А после отражаем сверху вниз.
Будь в курсе новых статеек, видео и легкого математического юмора.
модулей Python
❮ Предыдущая Далее ❯
Что такое модуль?
Модуль считается таким же, как библиотека кода.
Файл, содержащий набор функций, которые вы хотите включить в свое приложение.
Создать модуль
Чтобы создать модуль, просто сохраните нужный код в файле с расширением .py
:
Пример
Сохраните этот код в файле с именем mymodule.py
деф приветствие(имя):
print(«Hello, » + name)
Использовать модуль
Теперь мы можем использовать только что созданный модуль с помощью оператора import
:
Пример
Импортируйте модуль с именем mymodule и вызовите приветствие функция:
импортировать мой модуль
mymodule. greeting(«Джонатан»)
Пример запуска »
Примечание: При использовании функции из модуля используйте синтаксис: имя_модуля.имя_функции .
Переменные в модуле
Модуль может содержать функции, как уже описано, а также переменные все типы (массивы, словари, объекты и т. д.):
Пример
Сохраните этот код в файле mymodule.py
person1 = {
«name»: «John»,
«age»: 36,
«country»: «Норвегия»
}
Пример
Импортируйте модуль с именем mymodule и получите доступ к словарю person1:
импортировать мой модуль
a = mymodule.person1[«age»]
print(a)
Пример запуска »
Присвоение имени модулю
Вы можете назвать файл модуля как угодно, но он должен иметь расширение файла .py
Переименование модуля
Вы можете создать псевдоним при импорте модуля, используя ключевое слово as
:
Пример
Создайте псевдоним для mymodule
вызываемый мх
:
импортировать мой модуль как mx
a = mx. person1[«age»]
print(a)
Пример запуска »
Встроенные модули
В Python есть несколько встроенных модулей, которые вы можете импортировать в любое время.
Пример
Импорт и использование модуля
платформы: import platform
x = platform.system()
print(x)
Попробуйте сами »
Использование функции dir()
Существует встроенная функция для вывода списка всех имен функций (или переменных).
имена) в модуле. dir()
функция:
Пример
Список всех определенных имен, принадлежащих платформенному модулю:
import platform
x = dir(platform)
print(x)
Попробуйте сами »
Примечание: Функция dir() может использоваться на всех модули, в том числе те, которые вы создаете сами.
Импорт из модуля
Вы можете импортировать только детали из модуля, используя ключевое слово из
.
Пример
Модуль с именем mymodule
имеет одну функцию
и один словарь:
def приветствие(имя):
print("Привет, " + имя)
человек1
= {
"имя": "Джон",
"возраст": 36,
"страна":
"Норвегия"
}
Пример
Импортировать только словарь person1 из модуля:
from mymodule import person1
print (person1["age"])
Пример запуска »
Примечание: При импорте с использованием из
ключевое слово, не используйте имя модуля при обращении к элементам в модуле.
Пример: person1["age"]
, не mymodule.person1["возраст"]
Проверьте себя с помощью упражнений
Упражнение:
Каков правильный синтаксис для импорта модуля с именем "mymodule"?
моймодуль
Начать упражнение
❮ Предыдущий
Следующий ❯
ВЫБОР ЦВЕТА
Лучшие учебники
Учебник по HTML
Учебник по CSS
Учебник по JavaScript
Учебник How To
Учебник по SQL
Учебник по Python
Учебник по W3. CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery
9000 3 Основные каталожные номера
Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery
Основные примеры
Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery
ФОРУМ |
О
W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения.
Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования,
куки-файлы и политика конфиденциальности.
Copyright 1999-2023 Refsnes Data. Все права защищены.
W3Schools работает на основе W3.CSS.
Чтение и запись электронного текста
Эллисон Пэрриш
Эта глава посвящена функциям и модулям в Python. Функции – это
удобный способ изолировать определенную часть функциональности вашей программы и
сделать его многоразовым. Модули — это способ собрать ряд полезных функций
в одном файле, который затем можно использовать в нескольких проектах и делиться с другими
программисты.
Мы уже широко использовали функции в наших программах; функции
один из основных строительных блоков программирования на Python. Всякий раз, когда вы печатали
что-то вроде len(x)
или type(y)
или даже random.choice([1, 2, 3])
, вы
использовал функции. Просто эти функции предопределены
Питон. В этой главе мы научимся писать собственные функции.
Чтобы начать объяснение того, чем полезны функции и как они работают
синтаксически, я собираюсь объяснить сценарий, с которым столкнулся довольно
часто: капитализация строк в Python.
Случай с заглавной строкой
У меня проблема с Python, которая заключается в том, что строковые значения не имеют встроенного
метод капитализации строк. Или, точнее, у него есть два метода, ни
из которых делает именно то, что я хочу. Метод .title()
делает каждое слово заглавным
в строке:
>>> "это тест, Арлин".title() # каждое слово пишется с заглавной буквы
«Это испытание, Арлин»
Метод .capitalize()
делает первую букву строки заглавной, но
преобразует остальную часть строки в нижний регистр:
>>> "это тест, Арлин".capitalize() # преобразует оставшуюся часть строки в нижний регистр
«Это тест, Арлин»
Обратите внимание, как Arlene
в исходной строке преобразуется в arlene
. Не то, что я
вообще хотел! Чего я действительно хочу, так это сделать первую букву слова заглавной.
строку, а затем сохранить остальную часть строки в случае, если она была
изначально . Конечно, легко написать выражение, которое делает это:
>>> s = "это тест, Арлин"
>>> s[0].upper() + s[1:]
«Это испытание, Арлин»
Выражение s[0].upper() + s[1:]
делает именно то, что я хочу — при условии, что
строка, которую я хочу использовать, находится в переменной s
. Так здорово, правда? Я понял это. Всякий раз, когда я хочу использовать строку с заглавной буквы, я могу просто вспомнить, что
выражение, а затем перепишите выражение с соответствующей переменной.
Превратите это в функцию
Было бы неплохо, если бы вместо повторного ввода этого выражения
всякий раз, когда я хотел написать строку с заглавной буквы, я мог написать что-то еще
мнемоника — что-то похожее на встроенную функцию Python, например?
>>> print ucfirst("это тест, Арлин")
(здесь я использую ucfirst
как дань почтению почтенной Perl
функция. )
«Невозможно», — скажете вы. «Только великая клика дизайнеров языка Python может
работают такие хитрости. Для нас, простых смертных, это запрещено. Запрещенный! Я не буду
терпеть эту ересь». Я не уверен, почему ты так говоришь. Вы действительно принимаете это
программирование вещь серьезно.
В любом случае, оказывается, мы можем осуществить эту мечту! мы можем определяют собственные функции в Python. Определение функции выглядит так:
def your_function_name (параметры):
заявления
возвращаемое выражение
То есть определение функции состоит из:
- Ключевое слово
def
(сокращение от «define»), за которым следует имя вашей функции. Имя вашей функции может быть любым допустимым идентификатором Python. - Пара круглых скобок после имени функции, которая представляет собой список из параметров к функции. (Мы поговорим об этом ниже.)
- Двоеточие после скобок.
- Возможно, некоторые операторы Python. (Эти операторы будут выполняться при вызове вашей функции.)
- Ключевое слово
возвращает
, за которым следует выражение. Это выражение — то, что функция будет оценивать с до при ее вызове.
Вот определение нашей функции ucfirst
, которая вычисляет копию
строка, которую вы ей передали, с заглавной буквой первого символа и остальными
pf строка осталась одна:
по умолчанию ucfirst(s):
вернуть s[0].upper() + s[1:]
Вы можете определить функцию в интерактивном интерпретаторе, просто набрав ее
in. (Приглашение изменится с >>>
на ...
, когда вы набираете тело
функцию.) Вот сеанс интерактивного интерпретатора, который показывает, как я определяю
функция ucfirst
, а затем использование ее в строке:
>>> def ucfirst(s):
... вернуть s[0].upper() + s[1:]
...
>>> ucfirst("это тест, Арлин")
«Это испытание, Арлин»
Как только мы определили функцию ucfirst
, мы можем вызвать ее, введя имя
функции, за которой следует пара круглых скобок. Когда вы вызываете функцию,
Python перестает выполнять операторы в обычном потоке программы и «прыгает»
в функцию и вместо этого выполняет операторы там. Как только это будет сделано
при выполнении этих операторов весь вызов функции фактически «заменяется»
со значением любого выражения справа от return
ключевое слово
внутри функции. Мы говорим, что функция «вычисляет» значение до
справа от ключевого слова возвращает
.
Когда Python начинает выполнять функцию, любые значения в скобках в
вызов функции (в примере выше строка это тест, Arlene
)
доступны функции как переменные, названные в функции
скобки определения. В случае функции ucfirst
значение это тест, Арлин
теперь доступен как переменная s
внутри
функция.
Использование функций в программе
Вот программа, которая определяет функцию ucfirst
, а затем использует ее для
распечатать каждую строку стандартного ввода с ее первым символом, преобразованным в
верхний регистр.
импорт системы
деф ucfirst(s):
вернуть s[0].upper() + s[1:]
для строки в sys.stdin:
строка = строка.strip()
если длина (строка) > 0:
напечатать ucfirst(строка)
еще:
линия печати
Программа: make_it_upper.py
Вот как это выглядит при использовании sea_rose.txt
в качестве входных данных:
$ python make_it_upper.py Подробнее о параметрах
Функция может иметь более одного параметра. Напишем функцию, которая принимает
две строки в качестве параметров и возвращает первую половину одной добавленной строки
ко второй половине второй строки. Мы назовем эту функцию половин
:
.
>>> определение половин (слева, справа):
... левая_часть = левая[:len(левая)/2]
... правая_часть = правая [длина (правая)/2:]
... вернуть левая_часть + правая_часть
...
>>> halfsies("Интерактивная Телекоммуникационная Программа", "Международный Блинный Дом")
«Интерактивная телекомуза блинов»
В этом случае параметры left
и right
получают значения Interactive
Телекоммуникационная программа
и International House of Pancakes
,
соответственно. Внутри функции есть несколько операторов для получения
половины обеих строк, а затем функция возвращает
результат
объединение этих двух строк вместе с оператором +
.
Параметры функций, конечно, не обязательно должны быть строками: их можно
значения любого типа. Вот функция, human_join
, который объединяет строки более «человеческим» способом (соединяет их запятой, а затем использует соединение между предпоследним и конечным элементами). Эта функция занимает два
параметры: список строк, которые нужно объединить, и «союз», который будет использоваться для их объединения.
>>> def human_join(части, соединение):
... если len(parts) == 1:
... вернуть запчасти[0]
... first_join = ', '.join(parts[:-1])
... return first_join + " " + соединение + " " + parts[-1]
...
>>> some_things = ["счеты", "колокольня", "кухонное искусство"]
>>> human_join(some_things, "и")
>>> human_join(["только это одно!"], "и")
'счеты, колокольня и кулинария'
'только это одно!'
Здесь параметр частей
функции должен быть списком. Этот
функция также сразу же использует оператор if
, чтобы проверить,
список имеет только один элемент; если это так, он просто возвращает один элемент
из списка без дальнейшей обработки. (Вы не можете объединить элементы из
в конце концов, список содержит менее двух элементов.)
Упражнение: измените функцию human_join
так, чтобы она принимала третий параметр, oxford
, который определяет, будет ли функция использовать оксфордскую запятую.
Значения по умолчанию для параметров
Одной из полезных функций Python является возможность иметь параметры функции с значения по умолчанию . Значение по умолчанию — это значение, присвоенное функциональному параметру.
если для этого параметра в вызове функции не передается значение. Вы можете установить
значение по умолчанию для параметра в определении функции, помещая
знак равенства ( =
) после имени параметра, за которым следует желаемое значение
использовать по умолчанию.
Например, вот функция, которая генерирует названия ресторанов в соответствии с
очень простой шаблон. Если вы не передаете параметры функции, она использует
значение «Дом» по умолчанию:
>>> ресторан определения (здание = "Дом"):
... отдача "Международная" + корпус + "Блины"
...
>>> restaurant() # возвращает "Международный блинный дом"
>>> restaurant("Лачуга") # возвращает "Международная Блинная Лачуга"
«Международный Дом Блинов»
«Международная блинная лачуга»
Более чем один параметр может иметь значение по умолчанию. Давайте расширим пример
выше, чтобы сгенерировать названия ресторанов, содержащие как здание, так и продукт питания:
>>> def restaurant(building="Дом", foodtuff="Блины"):
... отдача "Международная" + строительная + "д" + продукты питания
...
>>> restaurant() # возвращает "Международный блинный дом"
>>> restaurant("Лачуга") # возвращает "Международная Блинная Лачуга"
>>> restaurant("Дуплекс", "Кастрюли") # и т.д.
«Международный Дом Блинов»
«Международная блинная лачуга»
«Международный дуплекс запеканок»
Как показано в приведенном выше примере, если функция имеет более одного параметра
со значением по умолчанию параметры, переданные в вызове функции, назначаются
параметры в функции слева направо, т. е. во втором вызове выше,
значение Лачуга
присваивается параметру здание
, а не продовольствие
(который вместо этого использует значение по умолчанию).
Именованные параметры
Python имеет еще одну полезную функцию, связанную с функциями, которая заключается в том, что вы можете укажите параметры по имени в вашем вызове функции. Основное преимущество этого
заключается в том, что вам не нужно точно помнить, в каком порядке указывать параметры
для конкретной функции. (Это особенно полезно для функций с
много параметров.)
Чтобы воспользоваться этой функцией, включите имя нужного параметра.
указать в функции вызов , за которым следует знак равенства ( =
), за которым следует
значением, которое вы хотите передать для этого параметра. Для иллюстрации воспользуемся ресторан
функция из предыдущего примера.
>>> def restaurant(building="Дом", foodtuff="Блины"):
... отдача "Международная" + строительная + "д" + продукты питания
...
>>> restaurant(building="Hangar") # Международный Ангар Блинов
>>> restaurant(foodstuff="Quinoa") # Международный Дом Киноа
>>> restaurant(foodstuff="Pineapple", building="Pyramid") # и т.д. и т.п.
«Международный ангар блинов»
«Международный дом киноа»
«Международная пирамида ананаса»
Как видно из приведенного выше примера, использование именованных параметров имеет несколько
преимущества. Использование именованных параметров позволяет указать значения для конкретных
параметры, оставляя другие параметры с их значениями по умолчанию, даже если они
в порядке, который в противном случае воспрепятствовал бы этому. Именованные параметры также позволяют
для указания параметров функций не по порядку.
Пример: генератор случайных названий ресторанов
Вот пример программы, использующей нашу простую функцию генератора названий ресторанов,
наш функция human_join
и ucfirst
совместно с sowpods.txt
для
создать список случайно сгенерированных абсурдных названий ресторанов.
импорт системы
импортировать случайный
деф ucfirst(s):
вернуть s[0].upper() + s[1:]
ресторан def(building="Дом", foodtuff="Блины"):
возврат "Международный" + строительство + "д" + продукты питания
def human_join (части, соединение):
если len(parts) == 1:
возврат частей[0]
first_join = ', '.join(части[:-1])
return first_join + " " + соединение + " " + части[-1]
слова = список()
для строки в sys. stdin:
строка = строка.strip()
слова.append(ucfirst(строка))
для я в диапазоне (10):
number_to_sample = случайный.randrange(1, 5)
вещи = random.sample (слова, number_to_sample)
напечатать ресторан (random.choice (слова), human_join (вещи, «и»))
Программа: restaurant_forever.py
Вот как это выглядит:
$ python restaurant_forever.py Итак! Как показано здесь, есть несколько преимуществ разбиения вашей программы на части.
в функции.
- Ваш код легче читать, особенно для тех, кто хочет читать ваш код
и просто понять суть этого, но не обязательно более глубокие детали. (Этот человек, вероятно, будет , вы , через неделю после того, как вы написали код.)
human_join
намного понятнее, чем выписывать всю процедуру внутри на
цикл. - Вы сократили количество повторений. Как только вы определили функцию, вы можете
используйте его в любом месте вашей программы, не вводя его снова.
- Вы изолировали места, где нужно внести изменения в программу. Если вы использовали
(например)
ресторан
функционирует более чем в одном месте в вашем коде, и вы
хотел изменить его, чтобы он возвращал строки в формате International
[продукты питания] [здание]
(или что-то подобное), вам нужно будет внести это изменение в
только одно место.
Модули
Модуль Python — это файл, содержащий одно или несколько определений функций.
Модули — это удобный способ объединения связанных функций, так что вы можете
легко повторно использовать их между проектами или делиться ими с другими программистами.
Сделать модуль легко. Просто создайте файл с расширением .py
и содержащий только операторов импорта
и определений функций. (Вы также можете определить простой
переменные в модуле, если хотите.) Вот модуль с именем restaurantutils
который содержит многие функции, над которыми мы работали в этой главе.
деф ucfirst(s):
вернуть s[0].upper() + s[1:]
деф полуси (слева, справа):
левая_часть = левая[:len(левая)/2]
правая_часть = правая[длина(правая)/2:]
вернуть левая_часть + правая_часть
ресторан def(building="Дом", foodtuff="Блины"):
возврат "Международный" + строительство + "д" + продукты питания
def human_join (части, соединение):
если len(parts) == 1:
возврат частей[0]
first_join = ', '.join(части[:-1])
return first_join + " " + соединение + " " + части[-1]
Программа: restaurantutils.py
Обратите внимание, что если вы попытаетесь запустить этот файл, ничего не произойдет:
$ python restaurantutils. py
Это потому, что модуль на самом деле ничего не делает — в нем нет кода.
там, что работает со стандартным вводом или выводит что-то на экран. Его
просто определения функций. Но как только мы создали файл, мы можем использовать те
функции в другой программе или в интерактивном интерпретаторе. Как? С использованием импорт
ключевое слово:
>>> импортировать restaurantutils
>>> print restaurantutils.restaurant(building="Embassy", foodtuff="Ganache")
Международное посольство Ганаша
Модуль, который вы создаете, ничем не отличается от любого другого модуля стандарта Python.
библиотеку или любой другой модуль, который вы установили с pip
(с оговоркой
что он должен находиться в вашем текущем рабочем каталоге, чтобы import
работал.)
Вы можете использовать из X импортировать Y
, чтобы получить только одну конкретную функцию из
модуль:
>>> от restaurantutils импортировать половинки
>>> print halfsies("Это были лучшие времена", "Это были худшие времена")
Это было самое тяжелое время
И вы можете использовать свой модуль в других программах. Вот restaurant_forever.py
переписан для использования функций, определенных в restaurantutils
:
импорт системы
импортировать случайный
из restaurantutils импортировать ucfirst, restaurant, human_join
слова = список()
для строки в sys.stdin:
строка = строка.strip()
слова.append(ucfirst(строка))
для я в диапазоне (10):
number_to_sample = случайный.randrange(1, 5)
вещи = random.sample (слова, number_to_sample)
напечатать ресторан (random.choice (слова), human_join (вещи, «и»))
Программа: restaurant_forever_with_import.py
Вывод должен быть практически таким же:
$ python restaurant_forever_with_import.py Модули, которые также являются программами
Иногда бывает полезно сделать модули, которые и функционируют как скрипты, поэтому
что вы можете импортировать
их для использования содержащихся в них функций, но также
запускать их из командной строки. Например, допустим, у нас есть модуль
называется ucfirst.py
, в котором определена только одна функция, ucfirst
функция из обсуждения выше.
деф ucfirst(s):
вернуть s[0].upper() + s[1:]
Программа: ucfirst.py
Я могу использовать этот файл в интерактивном интерпретаторе так:
>>> из ucfirst импортировать ucfirst
>>> print ucfirst("давай вынесем это наружу, Бифф")
Давай вынесем это наружу, Бифф.
Но было бы неплохо, если бы я мог использовать этот модуль напрямую в командной строке,
сделать что-то полезное — например, взять каждую строку стандартного ввода и
распечатайте его с заглавной первой буквы. С модулем как есть мы бы
необходимо создать отдельную программу Python, которая импортирует модуль, а затем
использовал функцию, которая является хлопот.
К счастью, есть небольшая хитрость, которую вы можете использовать: if __name__ == '__main__'
.
Если вы включите этот оператор if
внутри вашего модуля, то любой код
в блоке if
будет выполняться только , когда ваш модуль запускается из
командной строки (а не если это импорт
из интерактивного интерпретатора или
другая программа на Python). Давайте изменим файл ucfirst.py
, чтобы попробовать.
деф ucfirst(s):
вернуть s[0].upper() + s[1:]
если __name__ == '__main__':
импорт системы
для строки в sys.stdin:
строка = строка.strip()
если длина (строка) > 0:
напечатать ucfirst(строка)
еще:
линия печати
Программа: ucfirst.py
Теперь мы можем использовать модуль как отдельную программу, например:
$ python ucfirst.py … но работает и как модуль:
>>> из ucfirst импортировать ucfirst
>>> print ucfirst("мои любимые имена Гертруда, Иосефат и Гэри")
Мои любимые имена — Гертруда, Иосефат и Гэри.