Главная страница

Питон для нормальных. Учебник Москва Базальт спо макс пресс 2018


Скачать 2.54 Mb.
НазваниеУчебник Москва Базальт спо макс пресс 2018
АнкорПитон для нормальных
Дата05.10.2022
Размер2.54 Mb.
Формат файлаpdf
Имя файлаsysoeva_sysoev_piton_dlya_normalnyh_ch1.pdf
ТипУчебник
#715174
страница3 из 14
1   2   3   4   5   6   7   8   9   ...   14
• Низкая скорость, связанная с динамической проверкой типа, и боль- шие расходы памяти на переменные, которые могут хранить «что угод- но». К тому же большинство языков с динамической типизацией ин- терпретируемые, а не компилируемые.
• Невозможна перегрузка процедур и функций по типу данных — только по количеству операндов (правда, она, как правило, и не требуется).
В действительности, практически все языки, имеющие сильную типизацию,
допускают некоторые послабления. Например, Pascal и D допускают сме- шивание в одном выражении целых и действительных чисел (но результат обязан быть действительным), строк и символов (результат обязан быть строкою), то есть допускают сведение типа к более общему. Аналогично C
хотя и относят к языкам со слабою в целом типизацией (можно смешивать в одном выражении логические переменные, числа, указатели и строки),
всё же не лишён ряда проверок типов.
Таблица 1.2. Типизация в языках программирования
JavaScript
Динамическая
Слабая
Неявная
Ruby
Динамическая
Сильная
Неявная
Python
Динамическая
Сильная
Неявная
Java, C#
Статическая
Сильная
Явная
PHP
Динамическая
Слабая
Неявная
C, C++, Objective-C
Статическая
Слабая
Явная
Perl
Динамическая
Слабая
Явная
Haskell, Ocaml, Standard ML
Статическая
Сильная
Неявная
Lisp
Динамическая
Сильная
Неявная
D
Статическая
Сильная
Явная
Fortran 90/95/2003/2008
Статическая
Сильная
Явная
Pascal, ObjectPascal/Delphi, Ada
Статическая
Сильная
Явная

20
Глава 1. Введение
1.4
Области программирования
Следует понимать, что в сложившейся в наши дни программной индустрии различные языки программирования заняли разные ниши. Некоторые из них достигли успеха именно благодаря специализации, яркие примеры: JavaScript и
PHP. Другие, как Python и Java — существенно более универсальны и получили признание и распространение за счёт возможности сходными средствами решать разные задачи. Но ни один современный язык, в том числе широко рекламиру- емые C# и C++, не может эффективно использоваться для решения любых задач.
В настоящее время программирование применяется в самых различных об- ластях человеческой деятельности, таких как:
1. Системное программирование
Написание операционных систем, компиляторов, интерпретаторов, вирту- альных машин. В этой области требования к быстродействию и потребле- нию памяти очень велики, а создание переносимых программ затруднено необходимостью тесно и напрямую взаимодействовать с конкретным обо- рудованием («железом»). Основные языки программирования в этой об- ласти: ассемблер, а также компилируемые языки, компиляторы которых написаны на них самих методом постепенной самораскрутки (всегда име- ют платформозависимое ассемблерное ядро): C, C++, Objective C, Pascal,
Ada.
2. Программирование встраиваемых устройств
Создание операционных систем и прикладных программ для разных «ма- лых» вычислительных машин: станков с программным управлением, се- тевых маршрутизаторов, модемов, автомобильной и авиационной электро- ники. По сути, эта область примыкает к системному программированию и потому здесь используются примерно те же средства: ассемблер, Forth,
некоторые компилируемые языки.
3. Программирование видеокарт
Видеоускорители имеют весьма специфические аппаратные особенности:
они не могут работать напрямую с устройствами ввода/вывода, не могут сами динамически выделять память, часто способны работать эффективно только с действительными числами одинарной точности (4 байта), эффек- тивно могут выполнять одинаковые инструкции над разными данными, но очень теряют в производительности при необходимости глобальной про- верки условий и частой синхронизации потоков. Поэтому для них созданы специализированные языки: OpenCL и CUDA.
4. Программирование высоко нагруженных серверов
Задача состоит в управлении большим числом (часто 10 тысяч и более в се- кунду) запросов, поступающих как локально с этого же компьютера, так и,

1.4. Области программирования
21
главным образом, по сети. По запросам необходимо производить некоторые вычисления и/или поиск в базах данных. На первом месте в таких задачах стоит надёжность: сбой работы над одним из запросов не должен приво- дить к краху исполнения всех остальных или полной остановке сервера. На втором месте — производительность, в том числе способность, не снижая существенно производительности на 1 поток, обрабатывать одновременно много потоков с использованием нескольких вычислительных ядер или да- же нескольких физически разнесённых ЭВМ (это свойство называется мас- штабируемостью). Основные языки здесь: Java, C#, Erlang, то есть язы- ки, использующие виртуальные машины и имеющие достаточно высокие возможности абстрагирования (ООП), что позволяет локализовать многие ошибки времени исполнения. Реже используется C++, поскольку, несмот- ря на высокую производительность и широкие возможности, программы на
C++ часто приводят к некорректной работе с памятью. В последнее время популярны Scala и Go в качестве замены Java, поскольку Scala позволяет писать более лаконичный и сложный код частично в функциональном сти- ле, а Go прост, поддерживает очень эффективную модель многопоточных вычислений и эффективно компилируется в машинный код.
5. Программы для работы с базами данных
Эта область частично пересекается с предыдущей, но затрагивает также клиентские программы, где требования к скорости и надёжности работы не такие жёсткие. Программы в этой области, как правило, сочетают в себе две части. На одном языке написана высокоуровневая обёртка, с которою взаимодействует пользователь. Для её написания часто используются 1С,
C#, Delphi, а также многие интерпретируемые языки, в первую очередь
Python и Ruby. Вторая часть отвечает за непосредственное взаимодействие с базою данных и написана на одном из диалектов языка запросов SQL.
6. Системное администрирование
Задача системного администратора — автоматизация основных работ по обслуживанию серверов. Это резервное копирование данных, установка об- новлений, а также новых программ и библиотек, восстановление после сбоя,
синхронизация разных серверов в кластере, запуск различных задач раз- ных пользователей и их распределение по отдельным процессорным ядрам.
Персональному компьютеру системный администратор почти не нужен, все основные действия по поддержанию компьютера в работоспособном состоя- нии производит сам пользователь. Долгое время основным языком систем- ных администраторов был shell script, но в настоящее время языки общего применения, в первую очередь Python, также стали активно применяться,
поскольку позволяют, владея на высоком уровне одним языком, совмещать работу системного администратора с работою, например, веб-программиста или программиста баз данных.

22
Глава 1. Введение
7. Написание графических интерфейсов пользователя
В этой области очень большое распространение получила парадигма ООП
и парадигма визуального программирования. Пишут на многих языках,
как компилируемых: C++, Object Pascal, Vala, так и интерпретируемых:
Python, Tcl, Ruby. Java и C# также иногда используются в данной области.
8. Веб-программирование
Написание программ, работающих в браузере, начиная от простых сайтов и заканчивая сложными компьютерными играми, имеет определённую специ- фику. В настоящее время здесь используются все основные скриптовые язы- ки: PHP, Python, Ruby (на платформе Rails). Наибольшую популярность имеет JavaScript, поскольку его виртуальная машина хорошо оптимизиро- вана по производительности и потреблению памяти во всех популярных браузерах.
9. Компьютерные игры
Уже долгое время индустрия компьютерных игр является локомотивом развития как аппаратных средств: центральных процессоров и особенно видеокарт, так и концепций и языков программирования. Первоначально игры писались на системных языках и мало отличались от прочих про- грамм, но впоследствии именно в игростроении наибольшее распростране- ние получила концепция объектно-ориентированного программирования.
В настоящее время только самые критичные для производительности ча- сти пишутся на высокопроизводительных языках вроде C++, большая же часть программной логики и управляющих скриптов, графический интер- фейс пользователя, и даже многие базовые части пишут на интерпрети- руемых языках, самым популярным из которых здесь является Python.
Основная причина этого — необходимость соблюдать сроки: времени на разработку игр нужно много, но самая лучшая и надёжная игра потерпит фиаско на рынке, если опоздает даже на 2–3 года.
10. Научное программирование
Учёные долгое время были одними из основных потребителей ЭВМ. Для них был создан первый компилируемый язык — Fortran, который и в на- стоящее время используется в случае, когда производительность программ имеет ключевое значение. Однако возможности современных компьютеров оказались столь велики, что избыточны для решения большинства задач с точки зрения производительности и объёма памяти. В результате наи- большее признание в последние 20 лет получили языки интерпретируемого типа, глубоко интегрированные со средствами разработки, библиотеками алгоритмов и средствами построения графиков. Такие интегрированные системы условно называют «пакетами». Наиболее известными примерами таких систем являются коммерческие MATLAB, Mathematica, Stasistica, а также бесплатные/свободные R, SciLab, GNU Octave. Единственный язык общего назначения, в настоящее время не только сохранивший свою привле-

1.5. Области применения Python
23
кательность, но и успешно теснящий математические пакеты, в том числе и коммерческие, — это Python. Произошло это благодаря простоте и по- нятности языка с одной стороны, и наличию очень хороших и высокопро- изводительных библиотек алгоритмов и средств для построения графиков.
Есть и проекты создания специализированного научного языка, самым по- пулярным и развитым из которых является Julia.
1.5
Области применения Python
Будучи удачно спроектированным языком программирования, Python пре- красно подходит для решения ежедневных реальных задач. Он имеет самый ши- рокий спектр применений: как инструмент управления другими программными компонентами и для реализации самостоятельных программ. Фактически, круг ролей, которые может играть Python как многоцелевой язык программирования,
не включает только области встроенных устройств и системного программирова- ния, где ограничения на использование памяти и требования к скорости испол- нения настолько велики, что время и удобство написания программы не играют существенной роли, причём можно нанять программистов сколь угодно высокой квалификации.
За счёт чего Python получил столь широкое распространение? Python имеет огромное количество высококачественных уже готовых модулей, распространя- емых бесплатно, которые вы можете использовать в любой части программы.
В модуле уже реализованы многие нужные вам детали программы. Написание программы с использованием уже готовых модулей можно сравнить со строи- тельством сборного каркасного дома: отдельные детали: фундамент, стены, кры- ша, коммуникации уже сделаны до вас, вам нужно только выбрать подходящие детали и собрать вместе. Модули подключаются при помощи команды import,
которая присутствует в начале каждого примера.
Все широко используемые модули делятся на две основные части: модули стандартной библиотеки, поставляемые вместе с интерпретатором Python (эти модули «всегда с вами»), и внешние модули, для которых существуют средства установки.
Установка внешних модулей может быть осуществлена разными путями: в
Linux все популярные модули доступны для установки штатными средствами
(например, через «Центр установки и обновления программ» в Ubuntu), для
Window и MacOS X доступны скомпилированные установочные файлы (напри- мер, exe или msi для Windows). Можно также использовать возможности штат- ного установщика внешних модулей pip, входящий в состав стандартных моду- лей. С его помощью можно установить почти любой, даже редко используемый внешний модуль, для которого нет скомпилированных пакетов под Linux или установщиков под Windows. Недостатком последнего подхода является то, что для установки модулей, написанных на других языках, например, С или Fortran,
pip требует наличия в системе компилятора этих языков, причём не абы какого,
а совместимого с тем, что использовал разработчик.

24
Глава 1. Введение
1.5.1
Системное администрирование
Встроенные в Python интерфейсы доступа к службам операционных систем
(например, половина графического интерфейса Ubuntu написана на Python) де- лают его идеальным инструментом для создания переносимых программ и ути- лит системного администрирования (иногда они называются инструментами ко- мандной оболочки). Программы на языке Python могут:
• Создавать, удалять, отыскивать, сортировать, перебирать файлы и катало- ги в любой системе. Например, в Linux и MacOS разделительным знаком при записи пути к файлу является «/», а в Windows — «\». Программа на
Python будет работать и там, так как умеет заменять слэши. Так же в Linux и MacOS есть один главный диск, а в Windows их может быть много (C,
D, E). Python автоматически подставляет над этими логическими дисками один общий корень. Для этого используется стандартный модуль os.
Пример:
i m
p o
r t
os # загружаем модуль
#
Создаём список всех файлов и папок в текущей папке:
f i l e s d i r s = os . listdir ( " . " )
#
Печатаем имена только файлов:
f o
r fd i
n f i l e s d i r s :
i f
os . path . isfile ( fd ):
p r
i n
t
( fd , ’это файл’)
#
Проверяем, есть ли в папке folder1
i f
n o
t os . path . exists ( ’ Folder1 ’ ):
#
Если её нет, создаём её
os . mkdir ( ’ Folder1 ’)
• Запускать другие программы. Например, автоочистку корзины или авто- установку программ. Для этого используются стандартные модули sys, os,
subprocess. Пример, в котором из Python запускается популярный бесплат- ный редактор изображений Gimp, причём команда запуска выбирается в зависимости от типа операционной системы:
i m
p o
r t
sys i
m p
o r
t s u b p r o c e s s i
f sys . p l a t f o r m == ’ win32 ’:
s u b p r o c e s s . call ([ ’C :/ P r o g r a m Ђ Files / GIMP Ђ 2/ bin / gimp -2.8. exe ’ ])
e l
i f
sys . p l a t f o r m == ’ linux ’:
s u b p r o c e s s . call ([ ’ gimp ’ ])
• Производить параллельные вычисления с использованием нескольких про- цессов и потоков, для чего используется стандартный модуль multiproces- sing

1.5. Области применения Python
25
• Осуществлять проверку имён пользователей и паролей на соблюдение по- литики безопасности и делать многое другое.
При этом стандартная библиотека Python поддерживает все типичные ин- струменты операционных систем: переменные окружения, файлы, сокеты, кана- лы, процессы, многопоточную модель выполнения, поиск по шаблону с исполь- зованием регулярных выражений, аргументы командной строки, стандартные интерфейсы доступа к потокам данных, запуск команд оболочки, дополнение имен файлов и многое другое.
1.5.2
Написание графических интерфейсов пользователя
Простота Python и высокая скорость разработки делают его отличным сред- ством разработки графического интерфейса. В состав Python входит стандарт- ный модуль tkinter, позволяющий программам на языке Python реализовать переносимый графический интерфейс с внешним видом, присущим операцион- ной системе. Графические интерфейсы на базе Python/tkinter без изменений могут использоваться в MS Windows, X Window (в oneрационных системах UNIX
и Linux) и Mac OS (как в классической версии, так и в OS X).
Напишем простенькую программу для создания графического интерфейса с кнопкой, надписью и полем ввода (рис. 1.2):
f r
o m
t k i n t e r i
m p
o r
t
* # подключение модуля t k i n t e r root = Tk () # создание главного окна btn = Button ( root , text = ’Кнопочка’ , width =10 , height =2 ,
bg = ’ white ’ , fg = ’ black ’ , font = ’ Arial Ђ 14 ’) # создание кнопки lab = Label ( root , text = ’Ваша фамилия: ’ ,
font = ’ Arial Ђ 14 ’) # создание надписи
Edit = Entry ( root , width =20) # создание поля ввода btn . pack () # размещение кнопки на форме lab . pack () # размещение надписи на форме
Edit . pack () # размещение поля ввода на форме root . m a i n l o o p () # отображение главного окна
1.5.3
Веб-программирование
Python традиционно используется для написания сложных сайтов. Самым по- пулярным средством для этого служит веб-фреймворк (большой набор модулей)
Django. С его помощью написаны некоторые очень известные сайты, включая
Instagram и сайт сообщества Mozilla. Django представляет множество различных функций, включая средства для автоматического создания баз данных.
1.5.4
Программы для работы с базами данных
В языке Python имеются интерфейсы доступа ко всем основным реляционным базам данных: Sybase, Oracle, Informix, ODBC, MySQL, PostgreSQL, SQLite и

26
Глава 1. Введение
Рис. 1.2. Пример простейшего графического приложения, описанного выше.
многим другим. В мире Python существует также переносимый прикладной про- граммный интерфейс баз данных, предназначенный для доступа к базам данных
SQL из сценариев на языке Python, который унифицирует доступ к различным базам данных.
Например, для базы данных SQLite необходимо подключить модуль sqllite3
(import sqlite3). Вот небольшая программа, которая создаёт соединение с ба- зой данных, если БД не существует, то она будет создана, иначе файл будет открыт:
i m
p o
r t
sqlite3
conn = sqlite3 . connect ( ’ data . db ’)
cr = conn . cursor ()
cr . execute ( """CREATE TABLE IF NOT EXISTS ’romanus’
(’numerus’ INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
’nomen’ TEXT NOT NULL, ’praenomen’ TEXT,
’cognomen’ TEXT)""" )
cr . execute ( """INSERT INTO romanus VALUES
(1, ’Claudius’,’Tiberius’,’Nero’)""" )
conn . commit ()
conn . close ()
В базу заносится одна запись.

1.6. Первая программа. Среда разработки
27 1.5.5
Игры, искусственный интеллект
Python используется для разработки многих популярных игр. Ещё в первой половине 2000-ых Python стал основным средством для написания внутренней логики четвёртой игры серии Civilization. Сейчас число игр, содержащих в себе интерпретатор Python и использующих его для реализации программной логики,
1   2   3   4   5   6   7   8   9   ...   14


написать администратору сайта