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.