Саммерфилд - Программирование на Python 3 (1077331), страница 44
Текст из файла (страница 44)
По этой причине всегда стоит обращаться к электронной документации, чтобы увидеть, какие функции доступны. Смотрите врезку «Электронная документация». Электронная документация В этой книге дается полный охват языка РусЬоп 3, встроенных функций и наиболее часто используемых модулей из стандартной библиотеки, тем не менее в электронной документации можно найти значительный объем справочной информации о языке Ру1Ьоп и особенно об обширнейшей стандартной библиотеке. Электронная документация доступна на сайте тгосв.ругйол.огу, а также поставляется в составе самого интерпретатора РуФЬоп.
Для операционной системы 1АГ)пс(отав документация поставляется в формате справочных файлов опт)отче. Выберите пункт меню Пуск-»Все программы-»РусЬоп З.х-+Ру(Ьоп МапцаЬ (51агг-+Ай Ргодгапгв-» Рубйоп З.х-»РусЬоп Мазза(в), чтобы запустить средство просмотра справочных файлов Ж1пс(оэгв. Этот инструмент обладает функциями индексирования и поиска, которые упрощают возможность поиска по документу. Пользователи операционной системы ()1»11Х получают документацию в формате НТМ1 . В дополнение к различным гиперссылкам в ней содержатся различные страницы с предметными указателями.
Кроме того, в левой части каждой страницы присутствует очень удобная функция «Яп(ей ЯеагсЬ». Наиболее часто начинающими пользователями используется документ «1 1Ъгагу Ве1егепсе», а опытными пользователями — документ «01оЬа1 Мос1и1е 1пг(ех». Оба документа содержат ссылки, ведущие на страницы с описанием всей стандартной библиотеки Ру(Ьоп, а, кроме того, документ «1лЬгагу Ве(егепсе» содержит ссылки на страницы с описанием всех встроенных функциональных возможностей языка РуФЬоп. Определенно имеет смысл ознакомиться с документацией, особенно с документами «ЫЪгагу Ве1егепсе» и «О)оЬа1 Мобп1е 1пдех», чтобы получить представление о том, что может предложить стандартная библиотека, и пощелкать мышью на темах, которые вас заинтересуют.
Это даст вам первое впечатление о том, что доступно, и поможет запомнить, где можно отыскать документацию, которая будет представлять для вас интерес. (Краткое описание стандартной библиотеки языка Ру»Ьоп приводится в главе б.) 204 Глава 4. Управляющие структуры и функции Кроме того, в интерпретаторе также имеется справочная система.
Если вызвать встроенную функцию Ле1р( ) без аргументов, вы попадете в электронную справочную систему — чтобы получить в ней нужную информацию, просто следуйте инструкциям, а чтобы вернуться в интерпретатор — введите символ «с» или команду «ест 1». Если вы знаете, описание какого модуля или типа данных хотите получить, можно вызвать функцию Ье1р( ), передав ей имя модуля или типа в виде аргумента. Например, выполнив инструкцию Ье1р(втг), вы получите информацию о типе данных втг, включая описания всех его методов; инструкция Ье1р(Ь1ст.орсзте) выведет информацию о методе арбате() типа данных Ь1ст; а инструкция Ье1р(ов) отобразит информацию о модуле св (если перед этим он был импортировав). Если вы уже знакомы с языком РуФ)топ, то часто бывает достаточно просто просмотреть, какие атрибуты (например, методы) имеет тот или иной тип данных.
Эту информацию можно получить с помощью функции З1г(), например, вызов З!г(втг) перечислит все методы строк, а вызов Ьтг(св) перечислит все константы и функции модуля св (опять же при условии, что модуль был предварительно импортирован). Синтаксис создания функции (глобальной или локальной) имеет следующий вид: свт гспсттссйазе(рагвзетегв): вс1те Параметры рагззетегв являются необязательными и при наличии более одного параметра записываются как последовательность идентификаторов через запятую или в виде последовательности пар тс(елтт Гтег=иа)ие, о чем вскоре будет говориться подробнее. Например, ниже приводится функция, которая вычисляет площадь треугольника по формуле Герона: сет ьегсс(а, ь, с): в = (а + Ь » с) / 2 гетсгс вать.всгт(в ° (в — а) * (в - ь) * (в - с)) Внутри функции каждый параметр, а, Ь и с, инициализируется соответствующими значениями, переданными в виде аргументов.
При вызове функции мы должны указать все аргументы, например, Ьегсл(3, 4, 5). Если передать слишком мало или слишком много аргументов, будет возбуждено исключение Туре5ггсг. Производя такой вызов, мы говорим, что используем позиционные аргументы, потому что каждый переданный аргумент становится значением параметра в соответ- Собственные функции гбб ствующей позиции. То есть в данном случае при вызове функции параметр а получит значение 3, параметр Ь вЂ” значение 4 и параметр с — значение 5. Все функции в языке Ру()соп возвращают какое-либо значение, хотя вполне возможно (и часто так и делается) просто игнорировать это значение. Возвращаемое значение может быть единственным значением или кортежем значений, а сами значения могут быть коллекциями, поэтому практически не существует никаких ограничений на то, что могут возвращать функции.
Мы можем покинуть функцию в любой момент, используя инструкцию гетцгп. Если инструкция гетцгп используется без аргументов или если мы вообще не используем инструкцию гесс гп, функция будет возвращать значение Иове. (В главе 6 мы рассмотрим инструкцию усе!З, которая в функциях определенного типа может использоваться вместо инструкции гетсгп.) Некоторые функции имеют параметры, для которых может существовать вполне разумное значение по умолчанию. Например, ниже приводится функция, которая подсчитывает количество алфавитных символов в строке; по умолчанию подразумеваются алфавитные символы из набора АЯСП: пвт 1ессег совпс(секс, 1выегв=всыпс.авсп 1ессегв): 1ессегв = тгосвпвес(1ессегв) соипс = 0 Сог сваг сп секс: ст сваг сп 1ессвгв: ссвпс в= 1 гвсигп совпс Здесь при помощи синтаксиса рагааегег=т)е~аи1 С было определено значение по умолчанию для параметра 1ессегв.
Это позволяет вызывать функцию 1ессег соцпС() с единственным аргументом, например, 1еССег совпС("Марр1е апз Нсреу" ). Вэтом случае внутри функции параметр 1еССег будет содержать строку, которая была задана как значение по умолчанию. Но за нами сохраняется возможность изменить значение по умолчанию, например, указав дополнительный позиционный аргумент: 1еССег соьпС("Ма001е апд Нореу", "аессцАЕ100"), или используя именованный аргумент (об именованных аргументах рассказывается ниже): 1еССег ссипС("Мзсрсе апз Нореу", 1еССегв="ае!ЬцАЕ100"). Синтаксис параметров не позволяет указывать параметры, не имеющие значений по умолчанию, после параметров со значениями по умолчанию, поэтому такое определение: Оет Ьаз(а, Ь=с, с);, будет вызывать синтаксическую ошибку.
С другой стороны, мы не обязаны передавать аргументы в том порядке, в каком они указаны в определении функции — мы можем использовать именованные аргументы и передавать их в виде пазег иа1се. Ниже демонстрируется короткая функция, возвращающая заданную строку, если ее длина меньше или равна заданной длине, и усеченную 206 Глава 4, Управляющие структуры и функции версию строки с добавлением в конец значения параметра ! ос!сато гв в противном случае: оет впогтеп(техт, 1епдтп=25. !потов!от="..."): !г 1вп(техт) > 1епдтп: 1ехт = техт[;1епдтп - 1еп(тпо1сатог)) г !по1сатог гетогп техт Вот несколько примеров вызова этой функции: впогтеп("тпе яоао") В вернет: 'Тве вовс' впогтеп(!епдтп=7, техт="тпе поао") В вернет: 'Тве ...' впогтеп("тпе яоао", тпотсатогы'а", 1епдтп=7) в вернет: 'тпе яоа' впогтеп("тпе яоао", 7, "а") в вернет 'тпв яоа' Поскольку оба параметра, 1епдся и 1пг)1сасог, имеют значение по умолчанию, любой из них илн даже оба сразу могут быть опущены, тогда будут использоваться значения по умолчанию — этот случай соответствует первому вызову.
Во втором вызове оба аргумента являются именованными, поэтому их можно указывать в любом порядке. В третьем вызове используются позиционный аргумент и именованные аргументы. Первым указан позиционный аргумент (позиционные аргументы всегда должны предшествовать именованным аргументам), а за ним следуют два именованных аргумента. В четвертом вызове все аргументы позиционные.
Различие между обязательным н необязательным параметром заключается в наличии значения по умолчанию, то есть параметр со значением по умолчанию является необязательным (интерпретатор может использовать значение по умолчанию), а параметр без значения по умолчанию является обязательным (интерпретатор не может делать никаких предположений). Осторожное использование значений по умолчанию может упростить программный код и сделать вызовы функций более понятными. Вспомните, что функция орел() имеет один обязательный аргумент (имя файла) и шесть необязательных аргументов. Используя смесь из позиционных и именованных аргументов, мы можем указывать только необходимые аргументы, опуская другие. Это дает нам возможность записать такой вызов: преп([т1епазе, епсоотпд="от!8"), вместо того чтобы указывать все аргументы, например: преп(711епаае, "г", лопе, "о!78", лопе, йопе, Тгое).
Кще одно преимущество использования именованных аргументов состоит в том, что они способны сделать вызов функции более удобочитаемым, особенно в случае использования логических аргументов. Значения по умолчанию создаются на этапе выполнения инструкции бе[ (то есть в момент создания функции), а яе в момент гоу Собственные функции ее вызова. Для неизменяемых аргументов, таких как строки или числа, это не имеет никакого значения, но в использовании изменяемых аргументов кроется труднозаметная ловушка.
опт аррапо тт ечап(х, 1вт=()); Р ОшиБкм тт х % 2 == О: 1вт.аррепо(х) гатогп 1вт В момент создания этой функции параметр 1вт ссылается на новый список. Всякий раз, когда эта функция вызывается с одним первым параметром, параметр 1в1 будет ссылаться на список, созданный как значение по умолчанию вместе с функцией — то есть при каждом таком вызове новый список создаваться не будет. Как правило, это не совсем то, что нам хотелось бы — мы ожидаем, что каждый раз, когда функция вызывается без второго аргумента, будет создаваться новый пустой список. Ниже приводится новая версия функции, на этот раз использующая правильный подход к работе с изменяемыми аргументами, имеющими значения по умолчанию; оет аррепо 1( ечап(х, 1вт=иопе); тт )вт (в Иопе: 1вт = [] 11 х % 2 == О: 1вт.аррепо(х) гетогп 1вт Здесь, всякий раз, когда функция вызывается без второго аргумента, мы создаем новый список.