Python 식별자 이해하기

PythonBeginner
지금 연습하기

소개

이 랩에서는 Python 의 식별자 (identifier) 에 대한 포괄적인 이해를 얻게 됩니다. Python 코드에서 변수, 함수, 클래스 및 기타 객체의 이름을 지정하는 기본 규칙을 배우게 됩니다.

실습을 통해 유효하고 유효하지 않은 식별자 이름을 식별하여 명명 규칙을 강화할 것입니다. 이 랩에서는 Python 에서 사용되는 특별한 식별자 규칙도 다루어 명확하고 읽기 쉬우며 유지보수 가능한 코드를 작성하는 데 필요한 지식을 갖추게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 97%입니다.학습자들로부터 99%의 긍정적인 리뷰율을 받았습니다.

식별자 명명 규칙 학습

이 단계에서는 Python 에서 식별자 (identifier) 를 명명하는 규칙에 대해 학습합니다. 식별자는 프로그램에서 변수, 함수, 클래스, 모듈 및 기타 객체를 식별하는 데 사용되는 이름입니다. 명명 규칙을 이해하는 것은 읽기 쉽고 유지보수 가능한 코드를 작성하는 데 매우 중요합니다.

소개에서 언급했듯이 Python 식별자는 다음 규칙을 따라야 합니다.

  • 식별자는 문자 (a-z, A-Z), 숫자 (0-9) 및 밑줄 (_) 로 구성될 수 있습니다.
  • 식별자의 첫 번째 문자는 숫자가 될 수 없습니다.
  • 식별자에는 공백이나 @, %, $, *와 같은 특수 문자가 포함될 수 없습니다.
  • 식별자는 대소문자를 구분합니다. myVariablemyvariable은 다른 식별자로 간주됩니다.
  • Python 키워드나 내장 함수 이름을 식별자로 사용할 수 없습니다.

몇 가지 식별자를 정의하는 연습을 위해 간단한 Python 파일을 만들어 보겠습니다.

Terminal -> New Terminal을 클릭하여 WebIDE 의 통합 터미널을 엽니다. ~/project 디렉토리에 있는지 확인합니다.

이제 VS Code 편집기를 사용하여 ~/project 디렉토리에 identifier_rules.py라는 새 Python 파일을 만듭니다. 파일 탐색기 창의 왼쪽에서 마우스 오른쪽 버튼을 클릭하고 New File을 선택하거나 명령 팔레트 (Ctrl+Shift+P 또는 Cmd+Shift+P) 를 사용하여 File: New File을 입력하여 수행할 수 있습니다. 파일 이름을 identifier_rules.py로 지정합니다.

identifier_rules.py 파일에 다음 코드를 입력합니다.

## This is a valid identifier
my_variable = 10

## This is also a valid identifier
anotherVariable = "Hello"

## This is a valid identifier starting with an underscore
_private_variable = True

## This is an invalid identifier (starts with a digit)
## 1st_variable = 5

## This is an invalid identifier (contains a space)
## my variable = "invalid"

## This is an invalid identifier (contains a special character)
## my-variable = 20

## This is an invalid identifier (using a keyword)
## 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 에서 유효한 식별자 이름을 만드는 연습을 합니다. 변수, 함수 및 기타 코드 요소에 의미 있고 유효한 이름을 선택하는 것은 좋은 코드를 작성하는 기본적인 부분입니다.

VS Code 편집기를 사용하여 ~/project 디렉토리에 valid_identifiers.py라는 새 Python 파일을 만들어 보겠습니다.

valid_identifiers.py 파일에 다음 코드를 입력합니다. 이 코드는 유효한 식별자 이름을 사용하여 여러 변수를 정의하고 해당 값을 출력합니다.

## Valid variable names
user_age = 30
total_count = 100
item_price_usd = 25.50
is_active = True
_internal_value = "secret"
MAX_RETRIES = 5

## Valid function name (we will learn about functions later)
def calculate_total():
    return user_age * total_count

## Valid class name (we will learn about classes later)
class UserProfile:
    def __init__(self, name):
        self.name = name

## Print the values of the variables
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)

## Call the function and print the result
## print("Calculated Total:", calculate_total())

## Create an instance of the class and print a property
## 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 에서 유효하지 않은 식별자 이름을 식별하는 데 중점을 둘 것입니다. 무엇이 식별자를 유효하지 않게 만드는지 이해하는 것은 유효한 이름에 대한 규칙을 아는 것만큼 중요합니다. 유효하지 않은 식별자를 사용하려고 하면 Python 코드를 실행하려고 할 때 SyntaxError가 발생합니다.

VS Code 편집기를 사용하여 ~/project 디렉토리에 invalid_identifiers.py라는 새 Python 파일을 만들어 보겠습니다.

invalid_identifiers.py 파일에 다음 코드를 입력합니다. 이 코드는 유효하지 않은 식별자 이름의 예시를 포함합니다. 의도적으로 이러한 예시를 포함하여 발생하는 오류를 확인합니다.

## Invalid identifier: starts with a digit
## 1variable = 10

## Invalid identifier: contains a space
## my variable = "hello"

## Invalid identifier: contains a special character (@)
## user@name = "Alice"

## Invalid identifier: contains a special character (-)
## product-id = "XYZ123"

## Invalid identifier: using a Python keyword
## class = "Math"

## Invalid identifier: using another Python keyword
## for = 100

## Invalid identifier: contains a special character ($)
## total$amount = 50.75

## Invalid identifier: contains a special character (%)
## 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_).

이러한 규칙을 실제로 확인하기 위해 VS Code 편집기를 사용하여 ~/project 디렉토리에 underscore_conventions.py라는 새 Python 파일을 만들어 보겠습니다.

underscore_conventions.py 파일에 다음 코드를 입력합니다.

## Single leading underscore: intended for internal use
_internal_data = "This is internal data"

## Double leading underscore: name mangling in classes
class MyClass:
    def __init__(self):
        self.__private_attribute = "This is a private attribute"

    def get_private_attribute(self):
        return self.__private_attribute

## Double leading and trailing underscores: special method
class MyString:
    def __init__(self, value):
        self.value = value

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

## Single trailing underscore: to avoid keyword conflict
import builtins
class_ = "This variable name avoids conflict with the 'class' keyword"

print("Internal data:", _internal_data)

## Accessing the private attribute (demonstrating name mangling)
obj = MyClass()
## print(obj.__private_attribute) ## This will cause an AttributeError
print("Accessing private attribute via method:", obj.get_private_attribute())
## You can technically access it using the mangled name, but it's not recommended
## print("Accessing mangled name:", obj._MyClass__private_attribute)

## Using the special __str__ method
my_str_obj = MyString("Hello World")
print(my_str_obj) ## This calls the __str__ method

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 키워드를 포함하는 유효하지 않은 식별자 이름을 식별했습니다. 또한 "private" 변수에 선행 밑줄을 사용하는 것과 같은 특수 식별자 규칙을 탐구했습니다.