DEV Community

Cover image for Простір імен

Простір імен

Простір імен - Namespace

Це спосіб уникнути хаосу в програмі. Уявіть, що усі змінні в програмі лежать в одній купі, Знайти потрібну і зрозуміти, що вона робить, буде дуже важко. Простори імен дозволяють розділити змінні на групи, що полегшує їх використання та розуміння коду.

Ключові моменти, які варто запам'ятати:

  • Простір імен - це контейнер для імен.
  • Кожен простір імен - це окрема область.
  • Простори імен запобігають конфліктам між іменами.
  • Приклади просторів імен: вбудовані функції, глобальні змінні, локальні змінні функцій, атрибути об'єктів.

Top comments (3)

Collapse
 
gr555 profile image
Григорій Лізанець • Edited

Приклад в Python:

# module1
def greet(name):
    print('Hello,', name)

# module2
def greet(name, language):
    if language == 'french'
    print(f'Bonjour, {name}!')


# Головний файл
import module1
import module2

module1.greet('Michael') # Виведе 'Hello, Michael
module2.greet('Michael', 'french') # Виведе 'Bonjour, Michael!
Enter fullscreen mode Exit fullscreen mode

У цьому прикладі ми маємо дві функції з однаковим іменем greet, але вони знаходяться в різних модулях (просторах імен). Завдяки цьому ми можемо викликати будь-яку з них, вказавши, з якого модуля.

Collapse
 
gr555 profile image
Григорій Лізанець • Edited

Приклад простору імен з різними типами імен в одному модулі.

Розглянемо простий приклад на Python, де в одному модулі ми зберемо різні типи імен, щоби краще розуміти концепцію простору імен.

# module.py

# Глобальна змінна
global_variable = "Це глобальна змінна"

# Клас
class MyClass:
    # Атрибут класу
    class_attribute = "Це атрибут класу"

    def __init__(self, name):
        # Локальна змінна методу
        self.name = name

        def inner_function():
            # Локальна змінна внутрішньої функції
            local_variable = "Це локальна змінна внутрішньої функції"
            print(local_variable)

        inner_function()

# Функція
def my_function(x):
    # Локальна змінна функції
    y = x + 1
    print(y)

    # Використання вбудованої функції
    print(len(str(y)))

# Використання глобальної змінної
print(global_variable)

# Створення екземпляру класу
obj = MyClass("Alice")
print(obj.class_attribute)
print(obj.name)

# Виклик функції
my_function(5)
Enter fullscreen mode Exit fullscreen mode
  • Глобальна змінна global_variable доступна з будь-якої точки модуля.
  • Клас MyClass визначає новий тип об'єкта.
  • Атрибут класу class_attribute належить до класу і доступний для всіх екземплярів цього класу.
  • Локальна змінна методу self.name доступна тільки всередині методу __init__ і пов'язана з конкретним екземпляром класу.
  • Внутрішня функція inner_function визначена всередині методу __init__ і має свою локальну область видимості.
  • Локальна змінна функції y доступна тільки всередині функції 'my_function'.
  • Вбудована функція len() - це стандартна функція Python для визначення довжини об'єкта.
Collapse
 
gr555 profile image
Григорій Лізанець • Edited

У цьому пості я коротко описав свою помилку, яку допустив при виконанні однієї з перших своїх домашніх робіт. Справа в тому, що я створив список і назвав його list, що є не зовсім правильно в кодуванні на Python. Так як це ім'я є ім'ям вбудованої функції list(), і задаючи те саме їм'я змінній ми створюємо лише посилання на той об'єкт, в даному випадку на об'єкт list().