Сравнение типизации Python и C
Этот пост открывает новую рубрику – "Сравнение Python и C". В этом посте я сравню типизации высокоуровнего языка Python и низкоуровневого языка C. Покажу, как скомпилировать и запустить программу на языке С.
Дополнительные материалы
Для скачивания материалов необходимо войти или зарегистрироваться
Файлы также можно получить в Telegram-боте по коду: 224220
Реклама
Всем доброго дня! На канале начинается новая рубрика - "Сравнение языка Python 3 и C". Чем отличается высокоуровневый Python от низкоуровневого C? Что такое компилятор? Как работает интерпретатор Python? Как подружить Python и C? Как пк взаимодействует с низкоуровневыми языками? На эти и другие вопросы, связанные с данной темой, ответит новая рубрика. Все примеры я буду писать и запускать в операционной системе Kubuntu. Kubuntu - производный от Ubuntu дистрибутив Linux. Приготовьтесь к открытиям и экспериментам. Погружение в низкий уровень начинается...
Сравнение типизации
Нам известно, что Python имеет динамическую типизацию. Это означает, что типы переменных определяются во время выполнения программы и могут измениться на лету во время выполнения программы. Это даёт некоторую гибкость использования данных в Python.
age = 20
print('Возраст пользователя ' + str(age) + 'лет')
В примере выше мы преобразуем данные переменной age
в строку, складываем строку и выводим результат. Как же обстоят дела с типизацией в С? В языке С типизация является статической. Это значит, что типы переменных будут определяться на этапе компиляции. Что же такое, собственно, компиляция? Компиляция - это процесс преобразования исходного кода программы в машинный код или байт-код. Этот процесс выполняет программа-компилятор. В этой статье я покажу вам, как запускать С код. Однако более подробно про компиляцию и компилятор мы поговорим в следующих статьях, а пока давайте вернёмся к типизации языка С. К сожалению, в С нет возможности преобразования типа на лету, но есть удобный способ форматирования данных для вывода в консоль.
int age = 20;
printf('Возраст пользователя %d лет', age);
В данном примере мы строго указываем тип при создании переменной, а также указываем спецификатор формата %d
(целое число int
типа), который укажет, какой тип данных ожидать при выводе. Функция printf
выведет данные в консоль. Я думаю, читатель заметит схожесть вставки данных из переменных с оператором %
из Python для форматирования строк. Давайте посмотрим как это выглядит в Python.
age: int = 20
print('Возраст пользователя %d лет' % age)
Главным отличием будет то, что в Python при форматировании строки %
произойдёт преобразование типа int
в str
на лету, в то время как в примере с языком С форматирование происходит для вывода в консоль и при этом тип данных при выводе не меняется. Также, начиная с Python 3.6 и выше, можно указать типы переменных в синтаксисе, если это необходимо для улучшения читаемости кода (как в примере выше). В версии Python 3.5 это делалось в комментарии age = 20 # type: int
. Это называется "аннотация типов". После этого вы сможете изменить тип переменной, но некоторые IDE будут подсвечивать вам подсказки при неправильной работе с типом данных. Например, PyCharm поддерживает аннотации. На работу программы это влиять не будет, типизация в Python по-прежнему будет динамической. Однако это будет работать на уровне соглашения между разработчиками. Если в переменной указан тип int
, значит, разработчики не будут менять тип данных для переменной.
Оба вида типизации обладают своими преимуществами и недостатками. Преимущество динамической типизации в Python над статической в С том, что она позволяет писать код быстрее и делает его более гибким. Почему так?Преобразование типов данных происходит на лету, а сам синтаксис получается короче. Соответственно, C не такой гибкий и быстрый в написании кода. Преимущество статической типизации С над динамической Python в том, что при компиляции программы мы видим все ошибки в коде сразу. Также статическая типизация выигрывает у динамической типизации в скорости выполнения программы из-за того, что при динамической типизации приходится тратить дополнительное время для проверки типов во время выполнения программы.
Собственно говоря, я упоминал о выводе данных в консоль, но как вывести результат нашей программы, написанной на С? Достаточно ли этих двух строк для работы программы?
Для тестирования нашей программы нам необходим компилятор. Я буду использовать компилятор gcc, который уже был предустановлен в моей
Все статьи