Понимание идентификаторов в Python

PythonBeginner
Практиковаться сейчас

Введение

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

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

Изучение правил именования идентификаторов

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

Как упоминалось во введении, идентификаторы Python должны соответствовать следующим правилам:

  • Идентификаторы могут состоять из букв (a-z, A-Z), цифр (0-9) и символов подчеркивания (_).
  • Первый символ идентификатора не может быть цифрой.
  • Идентификаторы не могут содержать пробелов или специальных символов, таких как @, %, $, * и т. д.
  • Идентификаторы чувствительны к регистру. myVariable и myvariable считаются разными идентификаторами.
  • Нельзя использовать ключевые слова Python или имена встроенных функций в качестве идентификаторов.

Давайте создадим простой файл Python для практики определения некоторых идентификаторов.

Откройте интегрированный терминал в WebIDE, нажав Terminal -> New Terminal. Убедитесь, что вы находитесь в каталоге ~/project.

Теперь давайте создадим новый файл Python с именем identifier_rules.py в каталоге ~/project с помощью редактора VS Code. Вы можете сделать это, щелкнув правой кнопкой мыши в области проводника файлов слева и выбрав New File, или с помощью палитры команд (Ctrl+Shift+P или Cmd+Shift+P) и набрав File: New File. Назовите файл identifier_rules.py.

В файле identifier_rules.py введите следующий код:

## Это допустимый идентификатор
my_variable = 10

## Это также допустимый идентификатор
anotherVariable = "Hello"

## Это допустимый идентификатор, начинающийся с подчеркивания
_private_variable = True

## Это недопустимый идентификатор (начинается с цифры)
## 1st_variable = 5

## Это недопустимый идентификатор (содержит пробел)
## my variable = "invalid"

## Это недопустимый идентификатор (содержит специальный символ)
## my-variable = 20

## Это недопустимый идентификатор (используется ключевое слово)
## if = 30

print(my_variable)
print(anotherVariable)
print(_private_variable)

Сохраните файл, нажав Ctrl+S (или Cmd+S).

Теперь давайте запустим этот скрипт Python из терминала, чтобы увидеть вывод. В терминале убедитесь, что вы находитесь в каталоге ~/project, и выполните следующую команду:

python identifier_rules.py

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

10
Hello
True

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

Практика допустимых имен идентификаторов

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

Давайте создадим новый файл Python с именем valid_identifiers.py в каталоге ~/project с помощью редактора VS Code.

В файле valid_identifiers.py введите следующий код. Этот код определяет несколько переменных с использованием допустимых имен идентификаторов и выводит их значения.

## Допустимые имена переменных
user_age = 30
total_count = 100
item_price_usd = 25.50
is_active = True
_internal_value = "secret"
MAX_RETRIES = 5

## Допустимое имя функции (о функциях мы узнаем позже)
def calculate_total():
    return user_age * total_count

## Допустимое имя класса (о классах мы узнаем позже)
class UserProfile:
    def __init__(self, name):
        self.name = name

## Вывод значений переменных
print("User Age:", user_age)
print("Total Count:", total_count)
print("Item Price (USD):", item_price_usd)
print("Is Active:", is_active)
print("Internal Value:", _internal_value)
print("Maximum Retries:", MAX_RETRIES)

## Вызов функции и вывод результата
## print("Calculated Total:", calculate_total())

## Создание экземпляра класса и вывод свойства
## user = UserProfile("Alice")
## print("User Name:", user.name)

Сохраните файл, нажав Ctrl+S (или Cmd+S).

Теперь давайте запустим этот скрипт Python из терминала. Убедитесь, что вы находитесь в каталоге ~/project, и выполните следующую команду:

python valid_identifiers.py

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

User Age: 30
Total Count: 100
Item Price (USD): 25.5
Is Active: True
Internal Value: secret
Maximum Retries: 5

Обратите внимание, как имена переменных используют подчеркивания (_) для разделения слов, что является распространенным соглашением в Python для имен переменных и функций (snake_case). Имена классов, такие как UserProfile, обычно используют заглавные буквы для первой буквы каждого слова (PascalCase). Константы, такие как MAX_RETRIES, часто пишутся полностью заглавными буквами с подчеркиваниями.

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

Определение недопустимых имен идентификаторов

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

Давайте создадим новый файл Python с именем invalid_identifiers.py в каталоге ~/project с помощью редактора VS Code.

В файле invalid_identifiers.py введите следующий код. Этот код содержит примеры недопустимых имен идентификаторов. Мы намеренно включим их, чтобы увидеть ошибки, которые они вызывают.

## Недопустимый идентификатор: начинается с цифры
## 1variable = 10

## Недопустимый идентификатор: содержит пробел
## my variable = "hello"

## Недопустимый идентификатор: содержит специальный символ (@)
## user@name = "Alice"

## Недопустимый идентификатор: содержит специальный символ (-)
## product-id = "XYZ123"

## Недопустимый идентификатор: используется ключевое слово Python
## class = "Math"

## Недопустимый идентификатор: используется другое ключевое слово Python
## for = 100

## Недопустимый идентификатор: содержит специальный символ ($)
## total$amount = 50.75

## Недопустимый идентификатор: содержит специальный символ (%)
## discount%rate = 0.15

print("Attempting to define invalid identifiers will cause a SyntaxError.")

Сохраните файл, нажав Ctrl+S (или Cmd+S).

Теперь давайте попробуем запустить этот скрипт Python из терминала. Убедитесь, что вы находитесь в каталоге ~/project, и выполните следующую команду:

python invalid_identifiers.py

Поскольку все недопустимые идентификаторы закомментированы, скрипт будет выполнен без ошибок и выведет сообщение.

Attempting to define invalid identifiers will cause a SyntaxError.

Теперь давайте раскомментируем один из недопустимых идентификаторов, чтобы увидеть ошибку. Удалите # из начала строки ## 1variable = 10. Теперь строка должна выглядеть так: 1variable = 10.

Снова сохраните файл.

Теперь снова запустите скрипт:

python invalid_identifiers.py

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

  File "/home/labex/project/invalid_identifiers.py", line 4
    1variable = 10
    ^
SyntaxError: invalid decimal literal

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

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

Понимание соглашений об использовании специальных идентификаторов

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

Вот распространенные соглашения об использовании подчеркиваний:

  • Одиночное подчеркивание в начале (_name): Это соглашение указывает, что идентификатор предназначен для внутреннего использования в модуле или классе. Это намек другим программистам, что они не должны напрямую обращаться к этому идентификатору извне модуля или класса. Однако Python строго не принуждает к этому; вы все равно можете получить к нему доступ, если захотите.
  • Двойное подчеркивание в начале (__name): Это соглашение используется для искажения имен (name mangling) в классах. Когда идентификатор внутри класса начинается с двух подчеркиваний (и не заканчивается двумя подчеркиваниями), Python внутренне изменяет имя, чтобы затруднить прямой доступ к нему извне класса. Это помогает предотвратить конфликты имен при наследовании.
  • Двойное подчеркивание в начале и конце (__name__): Эти идентификаторы зарезервированы для специального использования интерпретатором Python. Примеры включают __init__ (конструктор), __str__ (строковое представление) и т. д. Вам следует избегать создания собственных идентификаторов с таким шаблоном, если вы не реализуете один из специальных методов Python.
  • Одиночное подчеркивание в конце (name_): Это соглашение используется для избежания конфликтов имен с ключевыми словами Python. Если вы хотите использовать имя, которое является ключевым словом Python (например, class или for), вы можете добавить подчеркивание, чтобы сделать его допустимым идентификатором (например, class_, for_).

Давайте создадим новый файл Python с именем underscore_conventions.py в каталоге ~/project с помощью редактора VS Code, чтобы увидеть эти соглашения в действии.

В файле underscore_conventions.py введите следующий код:

## Одиночное подчеркивание в начале: предназначено для внутреннего использования
_internal_data = "This is internal data"

## Двойное подчеркивание в начале: искажение имен в классах
class MyClass:
    def __init__(self):
        self.__private_attribute = "This is a private attribute"

    def get_private_attribute(self):
        return self.__private_attribute

## Двойное подчеркивание в начале и конце: специальный метод
class MyString:
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return f"MyString object with value: {self.value}"

## Одиночное подчеркивание в конце: для избежания конфликта с ключевым словом
import builtins
class_ = "This variable name avoids conflict with the 'class' keyword"

print("Internal data:", _internal_data)

## Доступ к приватному атрибуту (демонстрация искажения имен)
obj = MyClass()
## print(obj.__private_attribute) ## Это вызовет AttributeError
print("Accessing private attribute via method:", obj.get_private_attribute())
## Технически вы можете получить доступ к нему, используя искаженное имя, но это не рекомендуется
## print("Accessing mangled name:", obj._MyClass__private_attribute)

## Использование специального метода __str__
my_str_obj = MyString("Hello World")
print(my_str_obj) ## Это вызывает метод __str__

print("Variable name avoiding keyword conflict:", class_)

Сохраните файл, нажав Ctrl+S (или Cmd+S).

Теперь запустите скрипт из терминала:

python underscore_conventions.py

Вы должны увидеть вывод, демонстрирующий использование этих соглашений.

Internal data: This is internal data
Accessing private attribute via method: This is a private attribute
MyString object with value: Hello World
Variable name avoiding keyword conflict: This variable name avoids conflict with the 'class' keyword

Обратите внимание, что попытка прямого доступа к obj.__private_attribute приведет к ошибке AttributeError из-за искажения имен. Доступ к нему через метод get_private_attribute или искаженное имя _MyClass__private_attribute работает, но по соглашению следует использовать метод. Вызов print(my_str_obj) автоматически использует метод __str__, поскольку это специальный метод для строкового представления.

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

Резюме

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