Isidentifier: примеры (PYTHON)
isidentifier: boolФункция isidentifier в Python
Метод str.isidentifier() проверяет, может ли строка быть корректным идентификатором в соответствии с правилами языка Python. Функция не принимает никаких аргументов. Она возвращает True, если строка не пустая, состоит только из допустимых для идентификаторов символов и не начинается с цифры. В противном случае возвращается False.
К допустимым символам относятся буквы Unicode, цифры (кроме первого символа) и знак подчеркивания. Проверка основывается на определении идентификатора в документации Python и использует категории символов стандарта Unicode.
Функция часто применяется при разработке парсеров, генераторов кода, динамическом создании переменных или проверке пользовательского ввода, который должен соответствовать правилам именования.
Короткие примеры использования
Проверка допустимых идентификаторов:
print("var_name".isidentifier())
print("_private".isidentifier())
print("αβγ".isidentifier())True True True
Проверка недопустимых идентификаторов:
print("123var".isidentifier())
print("var-name".isidentifier())
print("".isidentifier())False False False
Похожие функции в Python
В Python нет прямой альтернативы, но для частичных проверок можно использовать:
str.isalpha(),str.isdigit(),str.isalnum()- проверяют состав строки, но не учитывают полные правила для идентификаторов.keyword.iskeyword()- проверяет, является ли строка зарезервированным словом Python, что полезно комбинировать сisidentifier().- Регулярные выражения (
re.match) - позволяют создавать кастомные проверки, но требуют написания шаблона.
Для проверки имени переменной обычно используется комбинация isidentifier() и not keyword.iskeyword().
Типичные ошибки
1. Передача аргументов: Функция не принимает параметры.
"test".isidentifier("extra") # ОшибкаTypeError: isidentifier() takes no arguments (1 given)
2. Проверка ключевых слов: Функция возвращает True для зарезервированных слов, что может быть нежелательно.
print("def".isidentifier())True
3. Использование с None: Вызов метода у нестрокового объекта.
var = None
print(var.isidentifier())AttributeError: 'NoneType' object has no attribute 'isidentifier'
История изменений
Функция isidentifier() была добавлена в Python 3.0. С тех пор ее поведение не менялось. В Python 3.0 была введена поддержка Unicode в идентификаторах, что и отражает данная функция.
Расширенные примеры использования
Фильтрация списка строк для получения допустимых идентификаторов:
names = ["2var", "_temp", "class", "my_var", ""]
valid = [name for name in names if name.isidentifier()]
print(valid)['_temp', 'my_var']
Комбинация с проверкой ключевых слов:
import keyword
def safe_identifier(s):
return s.isidentifier() and not keyword.iskeyword(s)
print(safe_identifier("lambda"))
print(safe_identifier("my_lambda"))False True
Динамическое создание атрибутов объекта с проверкой:
class DynamicClass:
pass
data = {"valid_name": 42, "123invalid": 100}
obj = DynamicClass()
for key, value in data.items():
if key.isidentifier():
setattr(obj, key, value)
print(obj.valid_name)
print(hasattr(obj, "123invalid"))42 False
Проверка идентификаторов с не-ASCII символами:
print("переменная".isidentifier())
print("переменная123".isidentifier())
print("123переменная".isidentifier())True True False
Использование в генераторе словаря для безопасных ключей:
raw_data = [("_id", 1), ("first-name", "test"), ("value2", 3)]
safe_data = {k: v for k, v in raw_data if k.isidentifier()}
print(safe_data){'_id': 1, 'value2': 3}Аналоги в других языках программирования
JavaScript: Нет встроенной функции. Используют регулярные выражения.
console.log(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test("var_name"));true
Java: Метод Character.isJavaIdentifierStart() и Character.isJavaIdentifierPart() для посимвольной проверки.
System.out.println(Character.isJavaIdentifierStart('_'));true
C#: Аналогично Java, методы Char.IsLetterOrDigit и проверка первого символа.
PHP: Функция preg_match() с регулярным выражением.
Golang: Пакет go/scanner или go/token для проверки лексем.
Основное отличие Python - наличие единого встроенного метода, работающего с Unicode.