Єдиний справді надійний спосіб зробити це:
if "".__eq__(myString):
Усі інші рішення мають можливі проблеми та випадки, коли перевірка може не виконати.
len(myString)==0
може вийти з ладу, якщо myString
це об'єкт класу, який успадковує str
і переосмислює __len__()
метод.
Аналогічно може myString == ""
і myString.__eq__("")
не вдатися, якщо myString
відмінити __eq__()
і __ne__()
.
Чомусь "" == myString
також обманюється, якщо myString
відміняється __eq__()
.
myString is ""
і "" is myString
є рівнозначними. Обидва вони будуть відмовлені, якщо myString
це насправді не є рядком, а підкласом рядка (обидва повернуться False
). Крім того, оскільки вони перевіряють особистість, єдина причина, чому вони працюють, полягає в тому, що Python використовує String Pooling (також званий String Internment), який використовує той самий екземпляр рядка, якщо він інтернований (див. Тут: Чому порівнюються рядки, використовуючи або '= = 'або' є 'іноді дають інший результат? ). І ""
інтернований з самого початку в CPython
Велика проблема перевірки ідентичності полягає в тому, що String Internment - це, наскільки я міг знайти), що це не стандартизовано, які рядки інтерновані. Це означає, що теоретично ""
не потрібно інтернованих, і це залежить від реалізації.
Єдиний спосіб зробити це , що на насправді не обдуриш це один згадувалося на початку: "".__eq__(myString)
. Оскільки це явно викликає __eq__()
метод порожнього рядка, його не можна обдурити, замінивши будь-які методи в myString і твердо працює з підкласами str
.
Також покладатися на хибність рядка може не спрацювати, якщо об'єкт переосмислить його __bool__()
метод.
Це не тільки теоретична робота, але може бути актуальною і в реальному використанні, оскільки я бачив, як фреймворки та бібліотеки підкласифікуються str
раніше, і використання myString is ""
може повернути туди неправильний вихід.
Крім того, порівняння рядків, що використовують is
загалом, є досить злою пасткою, оскільки вона працюватиме правильно іноді, але не в інший час, оскільки об'єднання рядків дотримується досить дивних правил.
Зважаючи на це, у більшості випадків усі згадані рішення працюватимуть правильно. Це посада - це здебільшого наукова робота.
""
не так добре?