Найти в Дзене
Николай Калюжный

Python - Переменные и типы данных (III)

В этой части курса мы углубимся в переменные и типы данных, два фундаментальных понятия в программировании на Python. Переменные похожи на контейнеры, в которых хранится информация, которую вы можете использовать и манипулировать в своем коде, в то время как типы данных описывают тип данных, которые содержит переменная, такие как текст, числа или значения true/false. Понимание этих концепций имеет решающее значение для написания любой программы на Python, поскольку они формируют строительные блоки вашего кода. Мы рассмотрим, как создавать переменные, присваивать им значения и использовать различные типы данных для обработки различных видов информации. Не усложняйте задачу, и вы увидите, как эти концепции применимы в реальных сценариях программирования. В Python переменная похожа на контейнер или метку, в которой может храниться информация или данные. Думайте об этом как о коробке, в которую вы можете положить различные вещи, такие как цифры, слова или даже список вещей. В Python вы мож
Оглавление

В этой части курса мы углубимся в переменные и типы данных, два фундаментальных понятия в программировании на Python. Переменные похожи на контейнеры, в которых хранится информация, которую вы можете использовать и манипулировать в своем коде, в то время как типы данных описывают тип данных, которые содержит переменная, такие как текст, числа или значения true/false. Понимание этих концепций имеет решающее значение для написания любой программы на Python, поскольку они формируют строительные блоки вашего кода. Мы рассмотрим, как создавать переменные, присваивать им значения и использовать различные типы данных для обработки различных видов информации. Не усложняйте задачу, и вы увидите, как эти концепции применимы в реальных сценариях программирования.

Переменные

В Python переменная похожа на контейнер или метку, в которой может храниться информация или данные. Думайте об этом как о коробке, в которую вы можете положить различные вещи, такие как цифры, слова или даже список вещей. В Python вы можете создать переменную, дав ей имя, а затем присвоив ей значение с помощью знака равенства =

Переменные используются для хранения данных в программе. В Python вам не нужно объявлять тип переменной. Вместо этого Python определяет тип на основе значения, присвоенного переменной. Вот пример:

# Assigning a string to a variable name = "alice"
# Assigning an integer to a variable x = 10
# Assigning a float to a variable pi = 3.14

-2

Теперь, когда бы вы ни использовали name в вашем коде Python поймет, что вы ссылаетесь на значение alice. Вы можете использовать эти переменные в различных операциях, таких как сложение чисел или объединение текста.

💡

Помните, что выбор осмысленных имен для переменных очень важен. Хорошие имена переменных могут значительно облегчить понимание и поддержку кода. Например, с помощью name для переменной, в которой хранится имя человека, или pi Ибо переменная, хранящая значение π делает ваш код более читабельным не только для других, но и для вас, особенно если вы вернетесь к нему через некоторое время.

Введение в типы данных

Когда мы начинаем программировать на Python, первое, что нам нужно понять, — это концепция типов данных. Но что такое типы данных и почему они важны? Проще говоря, типы данных сообщают Python (или любому другому языку программирования, если уж на то пошло), с какими данными мы работаем. Это может быть что угодно, от чисел и текста до более сложных типов данных, таких как списки элементов или коллекции пар ключ-значение.

Почему это важно? Потому что тип данных фрагмента информации влияет на то, какие операции мы можем с ним выполнять. Например, мы можем складывать и вычитать числа, но пытаться сделать то же самое с текстом не имеет особого смысла. Точно так же некоторые операции специфичны для текста, например, соединение двух частей вместе или написание их с заглавной буквы.

Python известен своей гибкостью и простотой в работе, отчасти потому, что он автоматически распознает тип данных, которые вы используете. Тем не менее, для программиста понимание этих типов и того, как они работают, имеет решающее значение. Это помогает принимать более обоснованные решения о том, как хранить, обрабатывать и эффективно использовать данные в программах.

В следующих разделах мы рассмотрим основные типы данных, доступные в Python. К ним относятся числовые типы, такие как целые числа и числа с плавающей запятой, текст в виде строк, коллекции, такие как списки, кортежи и словари, а также логический тип, представляющий истинные и ложные значения. Каждый из этих типов данных имеет свои уникальные характеристики и способы использования, о которых мы расскажем далее.

Основные типы данных

В разделе «Основные типы данных» мы рассмотрим основные элементы, которые формируют основу программирования на Python. Эти типы являются простейшими формами данных, с которыми можно работать, и они необходимы для выполнения широкого спектра задач программирования. Вот что мы рассмотрим.

-3
  • Целых чисел- Мы начнем с целых чисел, которые представляют собой целые числа, которые могут быть положительными, отрицательными или нулевыми.
  • Поплавки- Далее мы углубимся в числа с плавающей запятой, которые представляют собой действительные числа и включают в себя числа с десятичными запятыми.
  • Булевы - Мы также рассмотрим булевы значения, простые, но мощные, представляющие истинные или ложные значения. Логические значения имеют основополагающее значение для принятия решений в вашем коде, позволяя вам выполнять различные действия в зависимости от определенных условий.
  • Строки- Наконец, мы рассмотрим строки, которые представляют собой последовательности символов, используемые для представления текстовых данных. Строки невероятно универсальны и могут использоваться для чего угодно, от отображения сообщений пользователям до обработки текстовых данных в ваших приложениях. (Как мы видели в предыдущей части вывода текста/строки в терминал)

Целое число

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

age = 25 temperature = -5

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

Поплавки

Числа с плавающей запятой представляют действительные числа и могут содержать десятичные точки. Они имеют решающее значение, когда требуется большая точность вычислений, чем могут обеспечить целые числа.

price = 19.99 average_score = 82.5

Плавающие элементы используются при работе с измерениями, такими как расчет цены предмета после уплаты налогов или усреднение очков в игре, где могут встречаться дроби.

Булевы

Логический тип данных имеет только два возможных значения: True или False. Логические значения чрезвычайно полезны для управления потоком программы с помощью условных операторов.

is_raining = False is_authenticated = True

Логические значения идеально подходят для проверки условий, например, идет ли дождь, прежде чем принять решение о взятии зонта, или проверки того, аутентифицирован ли пользователь, прежде чем разрешить доступ к защищенной части веб-сайта.

Строки

Строки — это последовательности символов, используемые для представления текста. Они заключены в кавычки, и вы можете использовать как одинарные, так и одинарные (') или двойной (") в кавычках.

greeting = "Hello, World!" name = 'Bob'

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

💡

Не волнуйтесь, если сейчас все это не имеет смысла. По мере продвижения по этому курсу каждая из этих концепций станет более ясной и интуитивно понятной. Процесс обучения программированию происходит шаг за шагом, и понимание основных типов данных является важным первым шагом.

Типы данных коллекции

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

Мы уделим больше времени спискам и словарям, потому что вы будете часто использовать их в Python. Они помогают хорошо организовать данные. Я не так часто использую наборы и кортежи, но списки и словари являются ключевыми для большинства вещей, которые вы будете делать.

Список

Списки — это упорядоченные и изменяемые коллекции, которые могут содержать элементы различных типов данных. Они обозначаются квадратными скобками []. В контексте сети вы можете использовать список для хранения ряда IP-адресов или имен устройств.

ip_addresses = ['192.168.1.1', '10.0.0.1', '172.16.0.1'] device_names = ['Router1', 'Switch1', 'Firewall1']

Списки описываются как «упорядоченные» и «изменяемые» коллекции. «Упорядоченность» означает, что элементы в списке отображаются в определенной последовательности — порядок, в котором вы добавляете элементы, — это порядок, в котором они будут оставаться, и вы можете использовать их положение или индекс для доступа к ним. «Изменяемый» означает, что вы можете изменить список после его создания; Вы можете добавлять, удалять или изменять элементы. Эти характеристики делают списки универсальными и широко используемыми в программировании на Python.

Доступ к элементам

vendors = ['cisco', 'juniper', 'nokia', 'arista']

-4

Доступ к элементам в списке Python с помощью их индекса прост и эффективен. Каждому элементу в списке присваивается определенная позиция или индекс, который начинается с 0 Для первого элемента 1 для второго, и так далее. Эти индексы можно использовать для непосредственного извлечения определенных элементов. Чтобы получить доступ к элементу, вы просто указываете имя списка, за которым следует индекс нужного элемента в квадратных скобках.

💡

Помните, что списки в Python имеют нулевую индексацию, поэтому подсчет начинается с 0.

ip_addresses = ['192.168.1.1', '10.0.0.1', '172.16.0.1'] device_names = ['Router1', 'Switch1', 'Firewall1']

  • Чтобы получить доступ к первому IP-адресу в меню ip_addresses list, который вы используете ip_addresses[0], который вам даст '192.168.1.1'.
  • Чтобы получить имя второго устройства в файле device_names список, использование device_names[1], в результате чего 'Switch1'.
  • Python также позволяет использовать отрицательные индексы для доступа к элементам из конца списка. Например, индекс -1 относится к последнему пункту, -2 до предпоследнего, и так далее.
  • ip_addresses[-1] дал бы вам '172.16.0.1', последний IP-адрес в списке.
  • device_names[-2] вернулся бы 'Switch1', имя последнего устройства.

Добавление элементов в список

Чтобы добавить элементы в файл device_names , вы можете использовать команду append() для добавления одного элемента или extend() для добавления нескольких элементов из другого списка.

device_names.append('AccessPoint1')

#list will now include the AccessPoint1 we just added device_names = ['Router1', 'Switch1', 'Firewall1', 'AccessPoint1']

Вы также можете использовать команду extend() , чтобы добавить несколько элементов из другого списка.

new_devices = ['Router2', 'Switch2'] device_names.extend(new_devices)

#now list will include the new devices device_names = ['Router1', 'Switch1', 'Firewall1', 'AccessPoint1', 'Router2', 'Switch2']

Кортежей

Кортежи — это упорядоченные коллекции, такие как списки, но они неизменяемы, то есть после создания кортежа его содержимое не может быть изменено. Кортежи обозначаются круглыми скобками ().

device_properties = ('Cisco', 'Router', 'IOS-XE')

Когда мы говорим, что кортежи являются «неизменяемыми», это означает, что после создания кортежа его содержимое не может быть изменено, в отличие от списков. Вы не можете добавлять, удалять или изменять элементы кортежа после его определения. Это свойство делает кортежи полезными для хранения данных, которые не должны изменяться в ходе выполнения программы.

Доступ к элементам в кортеже происходит так же, как и в списке, с использованием индексов в квадратных скобках.

  • Чтобы получить доступ к первому товару (производителю), вы используете device_properties[0], который дает вам 'Cisco'.
  • Чтобы получить тип устройства, используйте device_properties[1], в результате чего 'Router'.

Как и списки, кортежи поддерживают как положительные индексы (начиная с 0), так и отрицательные индексы (отсчитывая в обратном порядке с конца, где -1 — последний элемент). Кон device_properties[-1] получит доступ к последнему элементу, 'IOS-XE', в этом кортеже.

Задает

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

unique_ips = {'192.168.1.1', '10.0.0.1', '192.168.1.1'}

«Неупорядоченные» наборы означают, что элементы в наборе не имеют фиксированного положения; Не существует последовательности или порядка, в котором они хранятся или появляются. Когда вы добавляете элементы в набор или перебираете набор, элементы могут отображаться в любом порядке, и этот порядок может меняться при каждом выполнении вашей программы. Эта характеристика отличает наборы от списков и кортежей, которые представляют собой упорядоченные коллекции.

Доступ к элементам непосредственно в наборе по индексу невозможен, так как наборы являются неупорядоченными коллекциями. Тем не менее, вы все равно можете выполнять операции, которые не зависят от порядка. Например, вы можете проверить, присутствует ли определенный элемент в наборе (тестирование членства), добавить новые элементы или удалить их.

💡

Несмотря на то, что доступ к элементам по индексу невозможен, наборы очень полезны для обеспечения уникальности и выполнения операций с наборами.

Словари

Словари представляют собой неупорядоченные наборы пар ключ-значение, позволяющие хранить и извлекать данные с помощью ключа. Они обозначены фигурными скобками {}, с парами ключ-значение, разделенными двоеточиями :. Словари идеально подходят для хранения конфигураций устройств или информации о состоянии сети, где каждый фрагмент данных имеет определенную метку.

device_config = { 'hostname': 'Router1', 'ip_address': '192.168.1.1', 'os_version': 'IOS-XE 17.3.2', 'interfaces': ['GigabitEthernet0/0', 'GigabitEthernet0/1'] }

Работа со словарями в Python проста. Ниже описано, как добавить новую пару ключ/значение, изменить существующее значение и получить доступ к определенному значению с помощью метода device_config словарь в качестве примера.

Чтобы добавить новую пару ключ/значение в словарь, просто присвойте значение новому ключу, как показано ниже.

device_config['location'] = 'DataCenterA'

Ниже описано, как изменить значение, связанное с существующим ключом, и присвоить этому ключу новое значение.

device_config['os_version'] = 'IOS-XE 17.4.1'

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

print(device_config['hostname'])

Выводится значение, связанное с 'hostname', который является 'Router1'

💡

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

Зачем мне нужны все эти различные типы данных?

Возможно, вы задаетесь вопросом, зачем вам нужно изучать все эти различные типы данных, такие как списки, словари и наборы в Python. Давайте рассмотрим практический сценарий, в котором вы автоматизируете создание виртуальных локальных сетей на нескольких коммутаторах в сети.

Вы начинаете со сбора IP-адресов всех коммутаторов, которые необходимо настроить, и сохраняете их в списке. Однако при наличии сотен коммутаторов есть вероятность, что некоторые IP-адреса могут повторяться. Чтобы убедиться в уникальности каждого IP-адреса, вы можете преобразовать свой список в набор, который автоматически удалит все дубликаты. После очистки списка вы затем преобразуете его обратно в формат списка для дальнейшей обработки.

Для конфигураций VLAN вам потребуется способ связать каждое имя VLAN с соответствующим идентификатором VLAN. Именно здесь пригодится словарь, позволяющий связать каждое имя VLAN (строку) с его идентификатором VLAN (целым числом) в качестве пар ключ-значение. Это делает ваши данные организованными и легкодоступными для сценариев автоматизации.

# Initial list of switch IP addresses, potentially with duplicates switch_ips = ['192.168.1.1', '192.168.1.2', '192.168.1.1', '192.168.1.3']
# Remove duplicates by converting the list to a set, then back to a list unique_ips = list(set(switch_ips))
# Dictionary to map VLAN names to VLAN IDs vlan_config = {'Sales': 10, 'Engineering': 20, 'Management': 30}

Сводка

Давайте объединим все, что мы узнали о базовых типах данных и типах данных коллекций, на простом примере. Представьте, что вы сетевой инженер, которому необходимо отслеживать различные сетевые устройства, их типы, IP-адреса и то, активны ли они в данный момент (онлайн или офлайн).

Во-первых, мы будем использовать строки и логические значения для имен устройств и их статуса. Затем мы добавим целые числа или числа с плавающей запятой для обозначения времени безотказной работы устройства в часах. Наконец, мы будем использовать списки, кортежи, наборы и словари для организации этих данных.

# Basic Data Types device_name = "Router1" # string device_online = True # boolean uptime_hours = 36 # integer
print(device_name, "online:", device_online, "for", uptime_hours, "hours")
# Collection Data Types # List of IP addresses assigned to Router1 ip_addresses = ['192.168.1.1', '10.0.0.2'] # list
# Tuple for hardware specs (model, Ports, PSU) hardware_specs = ('C9300', '48', 'Dual') # tuple
# Set of unique network protocols supported by Router1 network_protocols = {'HTTP', 'FTP', 'SSH'} # set
# Dictionary for Router1 configuration router1_config = { # dictionary 'hostname': 'Router1', 'ip_addresses': ip_addresses, 'hardware_specs': hardware_specs, 'protocols': network_protocols, 'status': 'online' }
print(router1_config)

  • Мы начнем с основных типов данных для хранения отдельных фрагментов информации о нашем сетевом устройстве.
  • Затем мы используем список для работы с несколькими IP-адресами, поскольку у устройства может быть более одного.
  • Кортеж идеально подходит для спецификаций оборудования, так как эти спецификации не изменятся после развертывания устройства.
  • Набор гарантирует, что перечисленные сетевые протоколы являются уникальными и не содержат дубликатов.
  • Наконец, словарь систематизирует все эти данные о маршрутизаторе Router1, что упрощает доступ к любой конкретной информации.

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