Platné a neplatné názvy a jmenné konvence pro identifikátory (např. názvy proměnných) v jazyce Python

Podnikání

V jazyce Python musí být identifikátory (názvy proměnných, funkcí, tříd atd.) definovány podle pravidel. Názvy, které pravidla nedodržují, nelze jako identifikátory použít a dojde k chybě.

Zde jsou uvedeny následující informace.

  • Znaky, které lze a nelze použít v identifikátorech (názvech)
    • Znaky ASCII
    • Znak Unicode
      • normalizace (např. v matematice)
  • Zkontroluje, zda je řetězec platným identifikátorem:isidentifier()
  • Slova, která nelze použít jako identifikátory (názvy) (vyhrazená slova)
  • Slova, která by se neměla používat jako identifikátory (názvy)
  • Pojmenovací konvence pro PEP8

Následující popis je uveden v jazyce Python 3 a v jazyce Python 2 se může lišit.

Znaky, které lze a nelze použít v identifikátorech (názvech)

Označuje znaky, které lze a nelze použít jako identifikátory (názvy).

Ačkoli je třeba psát o mnoha věcech, v podstatě si stačí zapamatovat následující.

  • Používejte velká a malá písmena, číslice a podtržítka.
  • První (první) písmeno nemůže být číslice.

Znaky ASCII

Znaky ASCII, které lze použít jako identifikátory (názvy), jsou velké a malé abecedy (A~Z,a~z), čísla (0~9) a podtržítka (_). U abecedy se rozlišují malá a velká písmena.

AbcDef_123 = 100
print(AbcDef_123)
# 100

Jiné symboly než podtržítka nelze použít.

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

Čísla nelze použít na začátku (první písmeno).

# 1_abc = 100
# SyntaxError: invalid token

Podtržítka lze použít i na začátku.

_abc = 100
print(_abc)
# 100

Všimněte si však, že podtržítko na začátku může mít zvláštní význam.

Znak Unicode

Od verze Python 3 lze používat také znaky Unicode.

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

Nelze použít všechny znaky Unicode a v závislosti na kategorii Unicode některé z nich použít nelze. Nelze například použít symboly, jako jsou interpunkční znaménka a piktogramy.

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

# ☺ = 100
# SyntaxError: invalid character in identifier

Kódy kategorií Unicode, které lze použít, najdete v oficiální dokumentaci.

V mnoha případech není použití čínských znaků apod. žádnou výhodou, protože lze použít i znaky Unicode (bez chyby).

normalizace (např. v matematice)

Znaky Unicode jsou pro interpretaci převedeny do normalizované podoby NFKC. Například celoplošné abecedy jsou převedeny na poloplošné abecedy (znaky ASCII).

Všimněte si, že i když zdrojový kód zobrazuje jiné zobrazení, je považován za stejný objekt a bude přepsán.

ABC = 100
ABC = -100

print(ABC)
# -100

print(ABC)
# -100

print(ABC is ABC)
# True

Kontrola, zda je řetězec platným identifikátorem: isidentifier()

Zda je řetězec platný jako identifikátor, lze ověřit pomocí řetězcové metody isidentifier().

Vrací true, pokud je jako identifikátor platný, a false, pokud je neplatný.

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

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

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

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

Slova, která nelze použít jako identifikátory (názvy) (vyhrazená slova)

Některá slova (rezervovaná slova) nelze použít jako identifikátory, i když se jedná o platné řetězce jako identifikátory (názvy).

Protože rezervované slovo je jako identifikátor platný řetězec, funkce isidentifier() vrací true, ale pokud je použito jako identifikátor, dojde k chybě.

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

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

Chcete-li získat seznam rezervovaných slov a ověřit, zda je řetězec rezervovaným slovem, použijte modul klíčových slov standardní knihovny.

Slova, která by se neměla používat jako identifikátory (názvy)

Například názvy vestavěných funkcí jazyka Python lze použít jako identifikátory, takže jim můžete přiřadit nové hodnoty jako proměnným.

Například len() je vestavěná funkce, která vrací počet prvků v seznamu nebo počet znaků v řetězci.

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

print(len('abc'))
# 3

Pokud přiřadíte této funkci novou hodnotu, původní funkce bude přepsána a stane se nepoužitelnou. Všimněte si, že při přiřazení nové hodnoty se nevypíše žádná chyba ani varování.

print(len('abc'))
# 3

len = 100
print(len)
# 100

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

Další častou chybou je použití list = [0, 1, 2], což znemožňuje použití funkce list(). Buďte opatrní.

Pojmenovací konvence pro PEP8

PEP je zkratka pro Python Enhancement Proposal, dokument, který popisuje nové funkce a další aspekty jazyka Python.

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 je osmý a popisuje „Style Guide for Python Code“, tedy příručku stylu pro Python.

Zmíněny jsou také konvence pro pojmenování.

Další podrobnosti najdete na výše uvedeném odkazu, ale doporučuje se například následující styl psaní.

  • Modul
    • lowercase_underscore
    • Malá písmena + podtržítko
  • Balíček
    • lowercase
    • všechna malá písmena
  • Třídy, výjimky
    • CapitalizedWords(CamelCase)
    • Velké písmeno na začátku slova, bez podtržítka
  • Funkce, proměnné a metody
    • lowercase_underscore
    • Malá písmena + podtržítko
  • konstantní
    • ALL_CAPS
    • Velká písmena + podtržítko

Pokud však vaše organizace nemá vlastní konvence pojmenování, doporučujeme postupovat podle PEP8.