Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.
Пример:
string postalcode=Customer.Address.PostalCode;
//if customer or address is null , this will through exeption
здесь, если адрес имеет значение null, то вы получите NullReferenceException.
Итак, в качестве практики мы всегда должны использовать проверку нуля, прежде чем обращаться к свойствам в таких объектах (особенно в общих)
string postalcode=Customer?.Address?.PostalCode;
//if customer or address is null , this will return null, without through a exception
Строка
a[:] = [i + 6 for i in a]
не сохранит никакой памяти. Сначала Python оценивает правую сторону, как указано в документации по языку :
Оператор присваивания оценивает список выражений (помните, что это может быть одно выражение или список с разделителями-запятыми, последний из которых дает кортеж) и присваивает единственный результирующий объект каждому из целевых списков слева направо.
blockquote>В данном случае одиночный результат объект будет новым списком, а единственной целью в целевом списке будет
a[:]
.Мы могли бы заменить понимание списка выражением генератора:
a[:] = (i + 6 for i in a)
Теперь , правая часть вычисляет генератор вместо списка. Бенчмаркинг показывает, что это все еще медленнее, чем наивный
a = [i + 6 for i in a]
. Так действительно ли выражение генератора сохраняет память? На первый взгляд, вы можете подумать, что это так. Но вхождение в исходный код функции
list_ass_slice()
показывает, что это не так. Строкаv_as_SF = PySequence_Fast(v, "can only assign an iterable");
использует PySequence_Fast () , чтобы сначала преобразовать итерируемый (в данном случае генератор) в кортеж, который затем скопирован в старый список. Кортеж использует тот же объем памяти, что и список, поэтому использование выражения генератора в основном такое же, как использование понимания списка в этом случае. Во время последней копии элементы исходного списка повторно используются.
Мораль, по-видимому, в том, что самый простой подход является лучшим в любом отношении.