break
остановился бы foreach
, цикл полностью, continue
пропустит к следующему DataRow
.
Из документации Python 3 :
sys.intern(string)
Введите строку в таблицу «интернированных» строк и верните интернированная строка - это сама строка или ее копия. Интернирование строк полезно для повышения производительности при поиске по словарю - если ключи в словаре интернированы, а ключ поиска интернирован, сравнение ключей (после хеширования) может быть выполнено путем сравнения указателя вместо сравнения строк. Обычно имена, используемые в Python программы автоматически интернируются, а словари, используемые для хранения атрибуты модуля, класса или экземпляра имеют интернированные ключи.
Интернированные строки не бессмертны; вы должны держать ссылку на возвращает значение intern (), чтобы извлечь из этого пользу.
Пояснение :
Как указано в документации, функция sys.intern
предназначена для использования для оптимизации производительности .
Функция sys.intern
поддерживает таблицу интернированных строк. Когда вы пытаетесь интернировать строку, функция ищет ее в таблице и:
Если строка не существует (еще не интернирована), функция сохраняет его в таблице и возвращает его из таблицы интернированных строк.
>>> import sys
>>> a = sys.intern ('почему панголинам снится пирог с заварным кремом')
>>> а
'почему ящеры мечтают о пироге с заварным кремом'
В приведенном выше примере a
содержит интернированную строку. Хотя это и не видно, функция sys.intern
сохранила строковый объект «почему панголины мечтают о пироге с заварным кремом»
в таблице интернированных строк.
Если строка существует (был интернирован) функция возвращает его из таблица интернированных строк.
>>> b = sys.intern ('почему ящеры мечтают о пироге с заварным кремом')
>>> б
'почему ящеры мечтают о пироге с заварным кремом'
Несмотря на то, что это не сразу видно, потому что строка «почему панголины мечтают о пироге с заварным кремом»
была интернирована раньше, b
теперь содержит тот же строковый объект, что и a
.
>>> b - это
Правда
Если мы создадим одну и ту же строку без использования intern, мы получим два разных строковых объекта с одинаковым значением.
>>> c = 'почему панголинам снится пирог с заварным кремом'
>>> c - это
Ложь
>>> c - это b
Ложь
Используя sys.intern
, вы гарантируете, что никогда не создадите два строковых объекта с одинаковым значением - когда вы запрашиваете создание второго строкового объекта с тем же значением, что и существующий строковый объект, вы получить ссылку на уже существующий строковый объект. Таким образом вы экономите память . Кроме того, сравнение строковых объектов теперь очень эффективно , потому что оно выполняется путем сравнения адресов памяти двух строковых объектов вместо их содержимого.
По сути, стажер ищет (или сохраняет, если нет) строку в наборе интернированных строк, поэтому все интернированные экземпляры будут иметь одну и ту же идентичность. Вы торгуете единовременными затратами на поиск этой строки для более быстрых сравнений (сравнение может возвращать True после простой проверки идентичности вместо необходимости сравнивать каждый символ) и уменьшения использования памяти.
Однако python будет ] автоматически вставляет небольшие строки или похожие на идентификаторы , так что вы можете обнаружить, что не добились улучшения, потому что ваши строки уже интернируются за кулисами. Например:
>>> a = 'abc'; b = 'abc'
>>> a is b
True
В прошлом одним из недостатков было то, что интернированные строки были постоянными. После интернирования строковая память никогда не освобождалась даже после удаления всех ссылок.
Возвращает канонический экземпляр строки.
Поэтому, если у вас много одинаковых экземпляров строки, вы экономите память, и, кроме того, вы также можете сравнивать канонические строки по идентичности вместо равенства что быстрее.
Они не говорили о ключевом слове intern
, потому что в Python такого нет. Они говорили о несущественной встроенной функции intern
. Который в py3k был перемещен в sys.intern
. Документы содержат исчерпывающее описание.