Qual a utilidade do método isidentifier()?

image

Olá, preciso de apoio com relação a definição do método isidentifier()

Sim, já pesquisei na documentação, porém não compreendi muito bem o que é um identificador válido especificamente.

Li a doc desse link: Python String isidentifier() Method, e vi isso:

A string is considered a valid identifier if it only contains alphanumeric letters (a-z) and (0-9), or underscores (_). A valid identifier cannot start with a number, or contain any spaces.

Entendi que o método isidentifier() retornará true caso um identificador (a string no caso) seja composto apenas por letras e/ou números e underscores.

1 curtida

Segundo a documentação oficial da linguagem:

Retorna True se a string é um identificador válido conforme a definição da linguagem, seção Identificadores e palavras-chave.

E se você clicar em “Identificadores e palavras-chave”, vai para este link, que infelizmente não foi traduzido para o português (somente o título), mas enfim…

Basicamente, a definição é essa:


identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">

A definição é um pouco complicada, mas em resumo, um identificador válido pode começar com uma letra ou _, e depois pode ter outras letras, números, _, etc.

Repare que ele cita categorias Unicode (Lu, que são as letras maiúsculas, Nd, que são os números decimais, etc). Aqui você pode ver todas as categorias, e clicar nelas para ver os respectivos caracteres (e veja como a lista é enorme).

Isso inclui também letras acentuadas e de outros alfabetos, o que quer dizer que a definição não se restringe ao ASCII. Por exemplo, o código abaixo imprime True três vezes:

for s in ('Ж', 'áä', '和製'):
  print(s.isidentifier())

Basicamente, ser um identificador válido significa que ele pode ser usado como nomes de variáveis, funções, classes, etc. Ou seja, o código abaixo é perfeitamente válido (apesar de não ser comum):

和製 = 10
if 和製 > 0:
    print(和製 + 5) # 15

def Ж߁Dž():
    print('chamando função Ж߁Dž')

# chamando a função
Ж߁Dž()

class देवनागरी:
    def __init__(self, x):
        self.val = x

    def á(self):
        print(self.val)

x = देवनागरी(10)
x.á() # 10
2 curtidas