Poprawne i niepoprawne nazwy oraz konwencje nazewnicze dla identyfikatorów (np. nazw zmiennych) w Pythonie

Biznes

W Pythonie identyfikatory (nazwy zmiennych, funkcji, klas, itp.) muszą być zdefiniowane zgodnie z regułami. Nazwy, które nie są zgodne z regułami, nie mogą być używane jako identyfikatory i spowodują błąd.

Podane są tu następujące informacje.

  • Znaki, które mogą i nie mogą być używane w identyfikatorach (nazwach)
    • Znaki ASCII
    • Znak Unicode
      • normalizacja (np. w matematyce)
  • Sprawdza, czy łańcuch jest poprawnym identyfikatorem:isidentifier()
  • Słowa, które nie mogą być używane jako identyfikatory (nazwy) (słowa zastrzeżone)
  • Słowa, które nie powinny być używane jako identyfikatory (nazwy)
  • Konwencje nazewnicze dla PEP8

Poniższy opis jest podany w Pythonie 3 i może być inny w Pythonie 2.

Znaki, które mogą i nie mogą być używane w identyfikatorach (nazwach)

Wskazuje znaki, które mogą i nie mogą być używane jako identyfikatory (nazwy).

Ponadto, chociaż jest wiele rzeczy, o których można pisać, w zasadzie wszystko, co musisz pamiętać, jest następujące.

  • Używaj wielkich i małych liter, cyfr i podkreśleń.
  • Pierwsza (pierwsza) litera nie może być cyfrą.

Znaki ASCII

Znaki ASCII, które mogą być używane jako identyfikatory (nazwy) to wielkie i małe litery (A~Z,a~z), cyfry (0~9) oraz podkreślenia (_). W alfabecie rozróżniana jest wielkość liter.

AbcDef_123 = 100
print(AbcDef_123)
# 100

Symbole inne niż podkreślenia nie mogą być używane.

# AbcDef-123 = 100
# SyntaxError: can't assign to operator

Nie można również używać cyfr na początku (pierwsza litera).

# 1_abc = 100
# SyntaxError: invalid token

Na początku mogą być również używane podkreślenia.

_abc = 100
print(_abc)
# 100

Należy jednak pamiętać, że podkreślnik na początku może mieć specjalne znaczenie.

Znak Unicode

Od Pythona 3 można również używać znaków Unicode.

変数1 = 100
print(変数1)
# 100

Nie wszystkie znaki Unicode mogą być używane, a w zależności od kategorii Unicode niektóre z nich nie mogą być używane. Na przykład nie można używać symboli takich jak znaki interpunkcyjne i piktogramy.

# 変数。 = 100
# SyntaxError: invalid character in identifier

# ☺ = 100
# SyntaxError: invalid character in identifier

Zobacz oficjalną dokumentację dla kodów kategorii Unicode, które mogą być użyte.

W wielu przypadkach nie ma żadnej korzyści z używania znaków chińskich itp. po prostu dlatego, że znaki Unicode mogą być również używane (bez błędu).

normalizacja (np. w matematyce)

Znaki Unicode są konwertowane do znormalizowanej formy NFKC w celu ich interpretacji. Na przykład, alfabety o pełnej szerokości są konwertowane na alfabety o połowie szerokości (znaki ASCII).

Zauważ, że nawet jeśli kod źródłowy pokazuje inny wyświetlacz, jest on uważany za ten sam obiekt i zostanie nadpisany.

ABC = 100
ABC = -100

print(ABC)
# -100

print(ABC)
# -100

print(ABC is ABC)
# True

Sprawdź, czy łańcuch jest poprawnym identyfikatorem: isidentifier()

To czy łańcuch jest ważny jako identyfikator może być sprawdzone za pomocą metody string isidentifier().

Zwraca on wartość true, jeśli jest on poprawny jako identyfikator, oraz false, jeśli jest on niepoprawny.

print('AbcDef_123'.isidentifier())
# True

print('AbcDef-123'.isidentifier())
# False

print('変数1'.isidentifier())
# True

print('☺'.isidentifier())
# False

Słowa, które nie mogą być używane jako identyfikatory (nazwy) (słowa zastrzeżone)

Istnieją pewne słowa (słowa zarezerwowane), które nie mogą być używane jako identyfikatory, nawet jeśli są one poprawnymi łańcuchami znaków jako identyfikatory (nazwy).

Ponieważ zarezerwowane słowo jest poprawnym łańcuchem jako identyfikator, funkcja isidentifier() zwraca prawdę, ale pojawia się błąd, jeśli zostanie ono użyte jako identyfikator.

print('None'.isidentifier())
# True

# None = 100
# SyntaxError: can't assign to keyword

Aby uzyskać listę zarezerwowanych słów i sprawdzić, czy łańcuch jest zarezerwowanym słowem, należy użyć modułu słów kluczowych biblioteki standardowej.

Słowa, które nie powinny być używane jako identyfikatory (nazwy)

Nazwy wbudowanych funkcji Pythona, na przykład, mogą być używane jako identyfikatory, więc można przypisać im nowe wartości jako zmienne.

Na przykład, len() jest wbudowaną funkcją, która zwraca liczbę elementów na liście lub liczbę znaków w łańcuchu.

print(len)
# <built-in function len>

print(len('abc'))
# 3

Jeśli przypiszesz nową wartość do tej nazwy len, oryginalna funkcja zostanie nadpisana i stanie się bezużyteczna. Zauważ, że podczas przypisywania nowej wartości nie zostanie wyświetlony żaden błąd ani ostrzeżenie.

print(len('abc'))
# 3

len = 100
print(len)
# 100

# print(len('abc'))
# TypeError: 'int' object is not callable

Innym częstym błędem jest użycie list = [0, 1, 2], co uniemożliwia użycie list(). Bądź ostrożny.

Konwencje nazewnicze dla PEP8

PEP to skrót od Python Enhancement Proposal, dokumentu, który opisuje nowe funkcje i inne aspekty Pythona.

PEP stands for Python Enhancement Proposal. A PEP is a design document providing information to the Python community, or describing a new feature for Python or its processes or environment.
PEP 1 — PEP Purpose and Guidelines | Python.org

PEP8 jest ósmym z nich i opisuje „Style Guide for Python Code”, czyli przewodnik po stylach dla Pythona.

Podano również konwencje nazewnictwa.

Zobacz link powyżej, aby uzyskać więcej szczegółów, ale na przykład, następujący styl pisania jest zalecany.

  • Moduł
    • lowercase_underscore
    • Małe litery + podkreślnik
  • Pakiet
    • lowercase
    • wszystkie małe litery
  • Klasy, wyjątki
    • CapitalizedWords(CamelCase)
    • Piszemy pierwszą literę wyrazu, bez podkreślników
  • Funkcje, zmienne i metody
    • lowercase_underscore
    • Małe litery + podkreślnik
  • niezmienny
    • ALL_CAPS
    • Duże litery + podkreślnik

Jeśli jednak organizacja nie posiada własnych konwencji nazewnictwa, zaleca się stosowanie PEP8.