ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
: >>> for n in range(1, 3): print(n) 1 2 >>> В предыдущем разделе мы выводили строку "Привет, мир!" с помощью функции print() В окне Python Shell это делать не обязательно — мы можем просто ввести строку и нажать клавишу >>> "Привет, мир!" 'Привет, мир!' >>> Обратите внимание на то, что строки выводятся в апострофах. Этого не произойдет, если выводить строку с помощью функции print() : >>> print("Привет, мир!") Привет, мир! >>> Учитывая возможность получить результат сразу после ввода команды, окно Python Shell можно использовать для изучения команд, а также в качестве многофункционального каль- кулятора: >>> 12 * 32 + 54 438 >>> Результат вычисления последней инструкции сохраняется в переменной _ (одно подчерки- вание). Это позволяет производить дальнейшие расчеты без ввода предыдущего результата. Вместо него достаточно ввести символ подчеркивания: >>> 125 * 3 # Умножение 375 >>> _ + 50 # Сложение. Эквивалентно 375 + 50 425 >>> _ / 5 # Деление. Эквивалентно 425 / 5 85.0 >>> При вводе команды можно воспользоваться комбинацией клавиш Если при открытом списке вводить буквы, то показываться будут идентификаторы, начи- нающиеся с этих букв. Выбирать идентификатор необходимо с помощью клавиш <↑> и <↓>. После выбора не следует нажимать клавишу Глава 1. Первые шаги 33 после ввода первых букв можно воспользоваться комбинацией клавиш При необходимости повторно выполнить ранее введенную инструкцию ее приходится на- бирать заново. Можно, конечно, скопировать инструкцию, а затем вставить, но как вы мо- жете сами убедиться, в контекстном меню нет пунктов Copy (Копировать) и Paste (Вста- вить). Они расположены в меню Edit. Постоянно выбирать пункты из этого меню очень неудобно. Одним из решений проблемы является использование комбинации клавиш быст- рого доступа для вставки последней инст- рукции. Каждое последующее нажатие этих клавиш будет вставлять следующую (или пре- дыдущую) инструкцию. Для еще более быстрого повторного ввода инструкции следует предварительно ввести ее первые буквы. В этом случае перебираться будут только инст- рукции, начинающиеся с этих букв. 1.6. Вывод результатов работы программы Вывести результаты работы программы можно с помощью функции print() . Функция име- ет следующий формат: print([<Объекты>][, sep=' '][, end='\n'][, file=sys.stdout][, flush=False]) Функция print() преобразует объект в строку и посылает ее в стандартный вывод stdout С помощью параметра file можно перенаправить вывод в другое место — например, в файл. При этом, если параметр flush имеет значение False , выводимые значения будут принудительно записаны в файл. Перенаправление вывода мы подробно рассмотрим при изучении файлов. После вывода строки автоматически добавляется символ перевода строки: print("Строка 1") print("Строка 2") Результат: Строка 1 Строка 2 Если необходимо вывести результат на той же строке, то в функции print() данные указы- ваются через запятую в первом параметре: print("Строка 1", "Строка 2") Результат: Строка 1 Строка 2 Как видно из примера, между выводимыми строками автоматически вставляется пробел. С помощью параметра sep можно указать другой символ. Например, выведем строки без пробела между ними: print("Строка1", "Строка2", sep="") 34 Часть I. Основы языка Python Результат: Строка 1Строка 2 После вывода объектов в конце добавляется символ перевода строки. Если необходимо произвести дальнейший вывод на той же строке, то в параметре end следует указать другой символ: print("Строка 1", "Строка 2", end=" ") print("Строка 3") # Выведет: Строка 1 Строка 2 Строка 3 Если, наоборот, необходимо вставить символ перевода строки, то функция print() указы- вается без параметров: for n in range(1, 5): print(n, end=" ") print() print("Это текст на новой строке") Результат выполнения: 1 2 3 4 Это текст на новой строке Здесь мы использовали цикл for , который позволяет последовательно перебирать элементы. На каждой итерации цикла переменной n присваивается новое число, которое мы выводим с помощью функции print() , расположенной на следующей строке. Обратите внимание, что перед функцией мы добавили четыре пробела. Как уже отмечалось ранее, таким образом в языке Python выделяются блоки. При этом инструкции, перед кото- рыми расположено одинаковое количество пробелов, представляют собой тело цикла. Все эти инструкции выполняются определенное количество раз. Концом блока является инст- рукция, перед которой расположено меньшее количество пробелов. В нашем случае это функция print() без параметров, которая вставляет символ перевода строки. Если необходимо вывести большой блок текста, его следует разместить между утроенными кавычками или утроенными апострофами. В этом случае текст сохраняет свое форматиро- вание: print("""Строка 1 Строка 2 Строка 3""") В результате выполнения этого примера мы получим три строки: Строка 1 Строка 2 Строка 3 Для вывода результатов работы программы вместо функции print() можно использовать метод write() объекта sys.stdout : import sys # Подключаем модуль sys sys.stdout.write("Строка") # Выводим строку В первой строке с помощью оператора import мы подключаем модуль sys , в котором объ- явлен объект stdout . Далее с помощью метода write() этого объекта выводим строку. Сле- Глава 1. Первые шаги 35 дует заметить, что метод не вставляет символ перевода строки, поэтому при необходимости следует добавить его самим с помощью символа \n : import sys sys.stdout.write("Строка 1\n") sys.stdout.write("Строка 2") 1.7. Ввод данных Для ввода данных в Python 3 предназначена функция input() , которая получает данные со стандартного ввода stdin . Функция имеет следующий формат: [<Значение> = ] input([<Сообщение>]) Для примера переделаем нашу первую программу так, чтобы она здоровалась не со всем миром, а только с нами (листинг 1.6). Листинг 1.6. Пример использования функции input() # -*- coding: utf-8 -*- name = input("Введите ваше имя: ") print("Привет,", name) input("Нажмите Чтобы окно сразу не закрылось, в конце программы указан еще один вызов функции input() . В этом случае окно не закроется, пока не будет нажата клавиша Вводим код и сохраняем файл, например, под именем test2.py , а затем запускаем программу на выполнение с помощью двойного щелчка на значке файла. Откроется черное окно, в ко- тором мы увидим надпись: Введите ваше имя:. Вводим свое имя, например Николай , и на- жимаем клавишу При использовании функции input() следует учитывать, что при достижении конца файла или при нажатии комбинации клавиш EOFError . Если не предусмотреть обработку исключения, то программа аварий- но завершится. Обработать исключение можно следующим образом: try: s = input("Введите данные: ") print(s) except EOFError: print("Обработали исключение EOFError") Если внутри блока try возникнет исключение EOFError , то управление будет передано в блок except . После исполнения инструкций в блоке except программа нормально продол- жит работу. В Python 2 для ввода данных применялись две функции: raw_input() и input() . Функция raw_input() просто возвращала введенные данные, а функция input() предварительно об- рабатывала данные с помощью функции eval() и затем возвращала результат ее выполне- ния. В Python 3 функция raw_input() была переименована в input() , а прежняя функция input() — удалена. Чтобы в Python 3 вернуться к поведению функции input() в стиле Python 2, необходимо передать значение в функцию eval() явным образом: 36 Часть I. Основы языка Python # -*- coding: utf-8 -*- result = eval(input("Введите инструкцию: ")) # Вводим: 2 + 2 print("Результат:", result) # Выведет: 4 input() В НИМАНИЕ ! Функция eval() выполнит любую введенную инструкцию. Никогда не используйте этот код, если не доверяете пользователю. Передать данные можно в командной строке, указав их после имени файла программы. Та- кие данные доступны через список argv модуля sys . Первый элемент списка argv будет со- держать название файла запущенной программы, а последующие элементы — переданные данные. Для примера создадим файл test3.py в папке C:\book . Содержимое файла приведено в листинге 1.7. Листинг 1.7. Получение данных из командной строки # -*- coding: utf-8 -*- import sys arr = sys.argv[:] for n in arr: print(n) Теперь запустим программу на выполнение из командной строки и передадим ей данные. Для этого вызовем командную строку: выберем в меню Пуск пункт Выполнить, в открыв- шемся окне наберем команду cmd и нажмем кнопку OK — откроется черное окно команд- ной строки с приглашением для ввода команд. Перейдем в папку C:\book , набрав команду: cd C:\book В командной строке должно появиться приглашение: C:\book> Для запуска нашей программы вводим команду: C:\Python36\python.exe test3.py -uNik -p123 В этой команде мы передаем имя файла ( test3.py ) и некоторые данные ( -uNik и -p123 ). Результат выполнения программы будет выглядеть так: test3.py -uNik -p123 1.8. Доступ к документации При установке Python на компьютер помимо собственно интерпретатора копируется доку- ментация по этому языку в формате CHM. Чтобы открыть ее, в меню Пуск | Программы (Все программы) | Python 3.6 нужно выбрать пункт Python 3.6 Manuals (32-bit) или Python 3.6 Manuals (64-bit) Если в меню Пуск | Программы (Все программы) | Python 3.6 выбрать пункт Python 3.6 Module Docs (32-bit) или Python 3.6 Module Docs (64-bit), запустится сервер документов Глава 1. Первые шаги 37 pydoc (рис. 1.11). Он представляет собой написанную на самом Python программу веб- сервера, выводящую результаты своей работы в веб-браузере. Сразу после запуска pydoc откроется веб-браузер, в котором будет выведен список всех стандартных модулей, поставляющихся в составе Python. Щелкнув на названии модуля, представляющем собой гиперссылку, мы откроем страницу с описанием всех классов, функций и констант, объявленных в этом модуле. Рис. 1.11. Окно pydoc Чтобы завершить работу pydoc, следует переключиться в его окно (см. рис. 1.11), ввести в нем команду q (от quit, выйти) и нажать клавишу (от browser, браузер) повторно выведет в браузере страницу со списком модулей. В окне Python Shell также можно отобразить документацию. Для этого предназначена функция help() . В качестве примера отобразим документацию по встроенной функции input() : >>> help(input) Результат выполнения: Help on built-in function input in module builtins: input(prompt=None, /) Read a string from standard input. The trailing newline is stripped. The prompt string, if given, is printed to standard output without a trailing newline before reading input. If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError. On *nix systems, readline is used if available. С помощью функции help() можно получить документацию не только по конкретной функции, но и по всему модулю сразу. Для этого предварительно необходимо подключить модуль. Например, подключим модуль builtins , содержащий определения всех встроенных функций и классов, а затем выведем документацию по этому модулю: 38 Часть I. Основы языка Python >>> import builtins >>> help(builtins) При рассмотрении комментариев мы говорили, что часто для комментирования большого фрагмента кода используются утроенные кавычки или утроенные апострофы. Такие строки не являются комментариями в полном смысле этого слова. Вместо комментирования фраг- мента создается объект строкового типа, который сохраняется в атрибуте __doc__ . Функция help() при составлении документации получает информацию из этого атрибута. Такие строки называются строками документирования. В качестве примера создадим файл test4.py , содержимое которого показано в листинге 1.8. Листинг 1.8. Тестовый модуль test4.py # -*- coding: utf-8 -*- """ Это описание нашего модуля """ def func(): """ Это описание функции""" pass Теперь подключим этот модуль и выведем содержимое строк документирования. Все эти действия выполняет код из листинга 1.9. Листинг 1.9. Вывод строк документирования посредством функции help() # -*- coding: utf-8 -*- import test4 # Подключаем файл test4.py help(test4) input() Запустим эту программу из среды Python Shell. (Если запустить ее щелчком мыши, вывод будет выполнен в окне интерактивной оболочки, и результат окажется нечитаемым. Веро- ятно, это происходит вследствие ошибки в интерпретаторе.) Вот что мы увидим: Help on module test4: NAME test4 - Это описание нашего модуля FUNCTIONS func() Это описание функции FILE d:\data\документы\работа\книги\python 3 и pyqt 5 разработка приложений ii\примеры\1\test4.py Теперь получим содержимое строк документирования с помощью атрибута __doc__ . Как это делается, показывает код из листинга 1.10. Глава 1. Первые шаги 39 Листинг 1.10. Вывод строк документирования посредством атрибута __doc__ # -*- coding: utf-8 -*- import test4 # Подключаем файл test4.py print(test4.__doc__) print(test4.func.__doc__) input() Результат выполнения: Это описание нашего модуля Это описание функции Атрибут __doc__ можно использовать вместо функции help() . В качестве примера получим документацию по функции input() : >>> print(input.__doc__) Результат выполнения: Read a string from standard input. The trailing newline is stripped. The prompt string, if given, is printed to standard output without a trailing newline before reading input. If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError. On *nix systems, readline is used if available. Получить список всех идентификаторов внутри модуля позволяет функция dir() . Пример ее использования показывает код из листинга 1.11. Листинг 1.11. Получение списка идентификаторов # -*- coding: utf-8 -*- import test4 # Подключаем файл test4.py print(dir(test4)) input() Результат выполнения: ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'func'] Теперь получим список всех встроенных идентификаторов: >>> import builtins >>> print(dir(builtins)) Функция dir() может не принимать параметров вообще. В этом случае возвращается спи- сок идентификаторов текущего модуля: >>> print(dir()) Результат выполнения: ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__'] ГЛ А В А 2 Переменные Все данные в языке Python представлены объектами. Каждый объект имеет тип данных и значение. Для доступа к объекту предназначены переменные. При инициализации в пере- менной сохраняется ссылка на объект (адрес объекта в памяти компьютера). Благодаря этой ссылке можно в дальнейшем изменять объект из программы. 2.1. Именование переменных Каждая переменная должна иметь уникальное имя, состоящее из латинских букв, цифр и знаков подчеркивания, причем имя переменной не может начинаться с цифры. Кроме того, следует избегать указания символа подчеркивания в начале имени, поскольку идентифика- торам с таким символом определено специальное назначение. Например, имена, начинаю- щиеся с символа подчеркивания, не импортируются из модуля с помощью инструкции from module import * , а имена, включающие по два символа подчеркивания — в начале и в кон- це, для интерпретатора имеют особый смысл. В качестве имени переменной нельзя использовать ключевые слова. Получить список всех ключевых слов позволяет такой код: >>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] Помимо ключевых слов, следует избегать совпадений со встроенными идентификаторами. Дело в том, что, в отличие от ключевых слов, встроенные идентификаторы можно переоп- ределять, но дальнейший результат может стать для вас неожиданным: >>> help(abs) Help on built-in function abs in module builtins: abs(x, /) Return the absolute value of the argument. >>> help = 10 >>> help 10 |