Giltiga och ogiltiga namn och namnkonventioner för identifierare (t.ex. variabelnamn) i Python.

Företag

I Python måste identifierare (namn på variabler, funktioner, klasser osv.) definieras enligt vissa regler. Namn som inte följer reglerna kan inte användas som identifierare och kommer att resultera i ett fel.

Här finns följande information.

  • Tecken som kan och inte kan användas i identifierare (namn)
    • ASCII-tecken
    • Unicode-tecken
      • normalisering (t.ex. inom matematiken)
  • Kontrollerar om strängen är en giltig identifierare:isidentifier()
  • Ord som inte kan användas som identifierare (namn) (reserverade ord)
  • Ord som inte bör användas som identifierare (namn)
  • Namngivningskonventioner för PEP8

Följande beskrivning gäller Python 3 och kan vara annorlunda i Python 2.

Tecken som kan och inte kan användas i identifierare (namn)

Anger tecken som kan och inte kan användas som identifierare (namn).

Även om det finns många saker att skriva om är det i princip bara följande som du behöver komma ihåg.

  • Använd stora och små bokstäver, siffror och understrykningar.
  • Den första (första) bokstaven får inte vara en siffra.

ASCII-tecken

ASCII-tecken som kan användas som identifierare (namn) är stora och små bokstäver (A~Z,a~z), siffror (0~9) och understrykningar (_). Alfabetet är skiftlägeskänsligt.

AbcDef_123 = 100
print(AbcDef_123)
# 100

Andra symboler än understrykningar får inte användas.

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

Siffror kan inte heller användas i början (första bokstaven).

# 1_abc = 100
# SyntaxError: invalid token

Undertecknet kan också användas i början.

_abc = 100
print(_abc)
# 100

Observera dock att ett understreck i början kan ha en speciell betydelse.

Unicode-tecken

Sedan Python 3 kan Unicode-tecken också användas.

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

Alla Unicode-tecken kan inte användas, och beroende på Unicode-kategorin kan vissa tecken inte användas. Exempelvis kan symboler som skiljetecken och piktogram inte användas.

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

# ☺ = 100
# SyntaxError: invalid character in identifier

Se den officiella dokumentationen för de Unicode-kategorikoder som kan användas.

I många fall finns det ingen fördel med att använda kinesiska tecken etc., helt enkelt för att Unicode-tecken också kan användas (utan fel).

normalisering (t.ex. inom matematiken)

Unicode-tecken konverteras till den normaliserade formen NFKC för tolkning. Till exempel konverteras alfabet med full bredd till alfabet med halv bredd (ASCII-tecken).

Observera att även om källkoden visar en annan visning anses det vara samma objekt och kommer att skrivas över.

ABC = 100
ABC = -100

print(ABC)
# -100

print(ABC)
# -100

print(ABC is ABC)
# True

Kontrollera om strängen är en giltig identifierare: isidentifier()

Om en sträng är giltig som identifierare kan kontrolleras med strängmetoden isidentifier().

Den returnerar sant om den är giltig som identifierare och falskt om den är ogiltig.

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

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

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

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

Ord som inte kan användas som identifierare (namn) (reserverade ord)

Det finns vissa ord (reserverade ord) som inte kan användas som identifierare även om de är giltiga strängar som identifierare (namn).

Eftersom ett reserverat ord är en giltig sträng som identifierare returnerar isidentifier() sant, men ett fel uppstår om det används som identifierare.

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

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

För att få en lista över reserverade ord och för att kontrollera om en sträng är ett reserverat ord, använd nyckelordsmodulen i standardbiblioteket.

Ord som inte bör användas som identifierare (namn)

Namnen på Pythons inbyggda funktioner kan till exempel användas som identifierare, så att du kan tilldela dem nya värden som variabler.

Len() är till exempel en inbyggd funktion som returnerar antalet element i en lista eller antalet tecken i en sträng.

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

print(len('abc'))
# 3

Om du tilldelar ett nytt värde till detta namn len kommer den ursprungliga funktionen att skrivas över och bli oanvändbar. Observera att inget fel eller någon varning kommer att skrivas ut när ett nytt värde tilldelas.

print(len('abc'))
# 3

len = 100
print(len)
# 100

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

Ett annat vanligt misstag är att använda list = [0, 1, 2], vilket gör det omöjligt att använda list(). Var försiktig.

Namngivningskonventioner för PEP8

PEP står för Python Enhancement Proposal, ett dokument som beskriver nya funktioner och andra aspekter av 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 är den åttonde och beskriver ”Style Guide for Python Code”, dvs. stilguiden för Python.

Namngivningskonventioner nämns också.

Se länken ovan för mer information, men till exempel rekommenderas följande skrivstil.

  • Modul
    • lowercase_underscore
    • Små bokstäver + understrykning
  • Paket
    • lowercase
    • Alla små bokstäver.
  • Klasser, undantag
    • CapitalizedWords(CamelCase)
    • Första bokstaven i ett ord skrivs med stor begynnelsebokstav, ingen understrykning.
  • Funktioner, variabler och metoder
    • lowercase_underscore
    • Små bokstäver + understrykning
  • konstant
    • ALL_CAPS
    • Stora bokstäver + understrykning

Om din organisation inte har egna namnkonventioner rekommenderas dock att du följer PEP8.