image

Данная статья представляет собой очень краткую, но емкую выжимку всего, что должен знать начинающий разработчик или QA-инженер о языке Python. Надеюсь, что усердие, приложенное при написании данной статьи, поможет многим подготовиться к собеседованиям на соответствующие вакансии и расширить свой IT-кругозор.

Статью стоит воспринимать не как учебник, а как удобную шпаргалку или «опорный сигнал» (так моя учительница истории называла подобное «творчество» в школе). Здесь не будет подробных определений, объяснений в целую главу, а лишь четкие термины, списки, краткие выжимки кода. Статья основана на замечательной книге Марка Лутца «Изучаем Python (5-е издание)», так что за её корректность и достоверность можете не переживать. Итак, начнем.

Вкратце о Python


Python — высокоуровневый язык программирования общего назначения (часто называется языком сценариев), ориентированный на повышение производительности разработчика и читаемости кода.

Преимущества Python:

  • Качество ПО
  • Высокая скорость разработки
  • Переносимость программ
  • Библиотеки поддержки
  • Интеграция компонентов (можно вызывать функции из библиотек C/C++)

Основные возможности Python:

  • Динамическая типизация (при этом она строгая)
  • Автоматическое управление памятью
  • Модульное программирование
  • Встроенные типы объектов
  • Библиотеки утилит

Процесс запуска программ:

  • Сценарий компилируется (перевод программы) в байт-код (платформонезависимое представление исходного текста программы, .pyc файл)
  • Байт-код передается виртуальной машине PVM.

Сравнение с C/C++:

  • Отсутствует этап сборки
  • Байт код не является двоичным машинным кодом (не может выполняться так же быстро)

Альтернативные реализации Python:

  • CPython (реализация на ANSI C)
  • Jython (реализация на Java классах)
  • IronPython (реализация для использования с .Net)

Типы объектов в Python


Данные в Python представляется в форме объектов — либо встроенных, либо создаваемых с помощью конструкций языка Python или других (например С).
Программы <= Модули <= Инструкции <=Выражения

Формы отображения объектов:

  • repr (в виде программного кода, например 6.28300000000004)
  • str (более читаемый, например 6.283)

Строка — неизменяемая последовательность (упорядоченная коллекция) других объектов (односимвольных строк) в языке Python.

Некоторые операции над последовательностями:

  • len(s) — длина
  • s[0] — обращение к элементу
  • s[-1] — обращение к элементу с конца последовательности
  • s[1:3] — срез начиная со смещения 1 и до 2 (не 3)
  • s[:] — скопировать все содержимое (не путать с a=s)
  • s*8 — повторение
  • s+’xyz’ — конкатенация

Особые символы табуляции:

  • \n — конец строки
  • \t — табуляция
  • ord(‘\n’) — байт с числовым значением
  • ‘A\0B\0C’ — \0 двоичный ноль

[Hint] Чтобы вывести все доступные методы у переменной: dir(s)

Списки (lists) – это упорядоченные по местоположению коллекции объектов произвольных типов, размер которых не ограничен.

Списки являются последовательностями => поддерживают все операции над последовательностями. Единственное отличие состоит в том, что результатом таких операций являются списки, а не строки.

Преимущества списков:

  • Возможность создавать вложенные списки
  • Использование выражений генераторов списков

col2 = [row[1] for row in M]

Словари (dictionary) — не являются последовательностями, это коллекции объектов, где доступ к ним осуществляется не по определенным смещениям от начала коллекции, а по ключам. Изменяемый тип. Также возможна вложенность.

D = {'food': 'Spam', 'quantity': 4, 'color': 'pink'}
или

D = {}
D['name'] = 'Bob'

Кортеж (tuple) — список, который невозможно изменить. Кортежи являются последовательностями, как списки, но они являются неизменяемыми, как строки. Возможна вложенность. Возможно одновременное хранение объектов разных типов.

T = (1, 2, 3, 4)

Объекты-файлы — это основной интерфейс между программным кодом на языке Python и внешними файлами на компьютере. Файлы являются одним из базовых типов, но они представляют собой нечто необычное, поскольку для файлов отсутствует возможность создания объектов в виде литералов. Вместо этого, чтобы создать объект файла, необходимо вызвать встроенную функцию open, передав ей имя внешнего файла и строку режима доступа к файлу.

f = open('data.txt', 'w') # Создается новый файл для вывода

Самый лучший на сегодняшний день способ чтения файлов состоит в том, чтобы не читать его содержимое целиком – файлы предоставляют итераторы, которые обеспечивают автоматическое построчное чтение содержимого файла в циклах for и в других контекстах.

Множества — это неупорядоченные коллекции уникальных и неизменяемых объектов. Множества создаются встроенной функцией set.

X = set('spam') # В 2.6 и 3.0 можно создавать из последовательностей
Y = {'h', 'a', 'm'} # В 3.0 можно определять литералы множеств
X, Y
({'a', 'p', 's', 'm'}, {'a', 'h', 'm'})
X & Y # Пересечение
{'a', 'm'}
X | Y # Объединение
{'a', 'p', 's', 'h', 'm'}
X – Y # Разность
{'p', 's'}
Поделиться с друзьями
-->

Комментарии (34)


  1. antstar
    14.10.2016 14:19
    +14

    f = open('data.txt', 'w') # Создается новый файл для вывода

    Если есть open, то должен быть и close или with


    1. DeKaNszn
      19.10.2016 17:05

      лучше использовать так:

      with open('data.txt', 'w', encoding='utf-8') as f: # параметр encoding появился в python 3
          # do something
      


  1. gorbln
    14.10.2016 15:24
    +12

    Ну, как бы, шпаргалка предполагает краткость, не?

    Простыни на 900 КБ
    (прошу прощения за «простыни», но PDF сюда не вкорячивается)




    1. shifttstas
      02.02.2017 11:44

      У них есть модули которые работают без нуля и без батареек, но я не стал с ними заморачиватся, батарейки должно хватить на год уж точно.


      1. GnuriaN
        19.10.2016 17:05

        Спасибо. А «оригинал» оригинала на чем сделан? и можно ли его получить? Просто те инструменты, что у меня есть не особо хорошо работают с PDF.


        1. gorbln
          19.10.2016 21:06

          Не могу сказать. Как я уже говорил, я сам скачал эту PDF, я не автор.


    1. KonstantinSoloviov
      14.10.2016 17:13
      +2

      Спасибо. Вы спасли тему автора. Хорошо, что можно добавить в закладки комментарий.


      1. gorbln
        14.10.2016 20:25
        +1

        Думаю, надо упомянуть, что это не мой перевод. Автор — Laurent Pointal, а перевёл — Федотов В.А.
        А вот где я нашёл эту ПДФку — я, к сожалению, не вспомню.
        Но на добром слове — спасибо.


  1. romangoward
    14.10.2016 16:05
    -3

    Преимущества Python:
    • Качество ПО
    • Высокая скорость разработки
    • Переносимость программ
    • Библиотеки поддержки
    • Интеграция компонентов (можно вызывать функции из библиотек C/C++)
    оО вот прям так и скорость, и качество, и переносимость? И минусов нет совсем?

    Альтернативные реализации Python
    Не альтернативные реализации (альтернативы чему?), а варианты имплементации на разных платформах.

    Строка — неизменяемая последовательность (упорядоченная коллекция) других объектов (односимвольных строк) в языке Python.
    Можно подумать, что строки в python нельзя модицифировать. Нельзя изменить объект строки, поэтому при присвоении меняется не содержимое объекта, а указатель преносится на новый объект, а сами строки — абстракции, с которыми работает разработчик, —изменять можно.

    >>> a = 'test'
    >>> id(a)
    140097800387872
    >>> a = a + 'lol'
    >>> id(a)
    140097800388016
    



    1. DuDDiTs
      14.10.2016 16:28
      +4

      Мне кажется вы немного придираетесь придираетесь.

      Строки ведь действительно неизменяемы. Создать новый объект на основе существующего, это совсем не изменение строки.

      Ну и преимущества вполне себе адекватные, разве что качество ПО едва ли зависит от языка.


      1. romangoward
        15.10.2016 01:05
        -1

        Мне кажется вы немного придираетесь придираетесь.
        Да :-}

        Строки ведь действительно неизменяемы. Создать новый объект на основе существующего, это совсем не изменение строки.
        Я всего лишь обратил внимание на формулировку.


      1. Bausk
        19.10.2016 17:05

        Строго говоря, в Питоне строку можно изменить через ctypes.cdll(...).memset прямо в памяти.
        Но не как объект, конечно.


    1. saluev
      14.10.2016 19:18
      +1

      Изменять строки скорее нельзя, чем можно:

      >>> a = "abc"
      >>> a[2] = "q"
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      TypeError: 'str' object does not support item assignment
      
      


    1. Alcor
      19.10.2016 17:05

      Согласен — спорное утверждение:

      >>> a = "test"
      >>> id(a)
      139853355896192
      >>> a.replace("t","b")
      'besb'
      >>> id(a)
      139853355896192
      


      1. romangoward
        19.10.2016 17:31

        Это и есть классический пример immutable, когда метод объекта не изменяет сам объект, а генерирует новый.
        В вашем примере, если сделать print(a), то вернётся исходное значение. А что бы исходное значение по указателю 'a' изменилось, надо сделать a = a.replace("t","b"), тогда и id объекта будет другим.


  1. kvothe
    14.10.2016 18:18

    Множества — это неупорядоченные коллекции уникальных и неизменяемых объектов. Множества создаются встроенной функцией set.

    Простите, но я вас немножечко поправлю. set — изменяемое множество, неизменяемое это frozenset.


    Ссылка на документацию
    1. saluev
      14.10.2016 19:19

      Различаете неизменяемое множество и множество неизменяемых объектов?


      1. kvothe
        14.10.2016 20:20

        Да. Простите, невнимательность подвела.


    1. Djaler
      19.10.2016 17:05

      А тут и не сказано, что set неизменяемы. Говорится о том, что они содержат в себе неизменяемые элементы.


    1. orion_tvv
      19.10.2016 17:05

      Прочитайте внимательнее. Упоминается иммутабельность для объектов множества.


      1. kvothe
        19.10.2016 20:46

        Вы с Djaler сговорились что ли? :) Спасибо за ваши замечания, но я уже выше извинился за мою невнимательность.


    1. DaneSoul
      19.10.2016 17:06

      Сами объекты в множестве должны быть hashable, что не выполняется для мутабельных объектов и требуется для проверки их уникальности в коллекции. Такое же требование к ключам словаря.
      А вот набор объектов в set действительно изменяем.


  1. 776166
    14.10.2016 20:31
    +2

    Уикенд перепечатывания учебников начался что ли? Я что-то пропустил?


  1. KonstantinSoloviov
    14.10.2016 21:43
    +2

    Качество ПО
    Инвариантно языку програмирования


    1. Spiritschaser
      19.10.2016 17:06

      Допустим, вам нужно написать ОЧЕНЬ много кода, допустим, или на C, или на java.
      Вероятность забыть про buffer overfow или ещё какие кускиданных в памяти на C несоизмеримо выше, чем на явах да питонах.


  1. roller
    17.10.2016 03:29

    Лучше бы ссылку на перевод книги выложили https://github.com/borisuvarov/python-cookbook-ru


  1. Taragolis
    19.10.2016 17:06

    Альтернативные реализации Python:
    • CPython (реализация на ANSI C)
    • Jython (реализация на Java классах)
    • IronPython (реализация для использования с .Net)

    CPython- это "эталонная" реализация Python. Да и забыли PyPy


  1. DiSha
    19.10.2016 17:06
    +1

    Спасибо за краткость и полезность, жду продолжения.

    Еще одна шпаргалка

    Заголовок спойлера
    image


  1. Tiberiumk
    19.10.2016 17:06

    Вы забыли упомянуть PyPy — реализация Python на RPython (Restricted Python — полностью совместимый с Python язык, использующий меньше «динамичности» самого Python — и код на RPython может исполняться как обычный Python код). Самая главная возможность PyPy — JIT компилятор


  1. artdavydau
    19.10.2016 17:06

    Альтернативные реализации Python:
    CPython (реализация на ANSI C)

    Если CPython это альтернативная реализация, то какая же тогда этолонная?


    1. Tiberiumk
      19.10.2016 17:13

      CPython и есть эталонная реализация Python


  1. Vokanim13
    19.10.2016 17:06

    Подскажите пожалуйста, вопрос может дурацкий но все же, как при делении меньшего числа на большее получить не 0. То есть делении 1 на 2 получить 0,5 а не 0, который выдает Python при компилировании


    1. Tiberiumk
      19.10.2016 17:12

      Python — интерпретируемый :)
      Насчёт вопроса — вы скорее всего пользуетесь Python 2, там, чтобы получить не целую часть, нужно, чтобы число, участвующее в делении, было float, т.е:

      1.0/2
      

      В Python 3 это не требуется, там можно просто разделить 1 на 2 и получить 0.5


  1. longclaps
    19.10.2016 17:06

    > Формы отображения объектов:
    > repr (в виде программного кода, например 6.28300000000004)
    > str (более читаемый, например 6.283)

    Кратко. Ёмко. Бессмысленно.