(a,b) = (None, []) if not len(c) else (c[0], c[1:])
также является опцией для обработки случая, когда c - пустая последовательность, хотя она не будет различать [None] и [] в терминах как присвоения a, b. Так что используйте его с осторожностью, try / except, вероятно, лучше всего.
Я не вижу никакой реальной разницы между Python 3 и 2.7 при обработке пустого контейнера, но хорошая вещь о Python 3 здесь работает с любой итеративный.
Это работает в версии 2.7, если вы знаете, что c является генератором.
a,b = c.next(), c
Но полная красота распаковки, по-видимому, требует Python 3.
На x86 процессорах, по крайней мере, float
и double
будет каждый преобразован в 10 байтов, реальных FPU для обработки. FPU не имеет отдельных блоков обработки для различных типов с плавающей точкой, которые он поддерживает.
старый совет, который float
быстрее, чем double
, применялся 100 лет назад, когда большинство центральных процессоров не имело встроенного FPUs (и у немногих людей были отдельные микросхемы FPU), таким образом, управление самое с плавающей точкой было сделано в программном обеспечении. На этих машинах (которые приводились в действие паром, сгенерированным ямами лавы), это было быстрее для использования float
с. Теперь единственная реальная выгода для float
с - то, что они занимают меньше места (который только имеет значение, есть ли у Вас миллионы из них).
Существуют все еще некоторые случаи, где плавания предпочтены однако - с OpenGL, кодирующим, например, намного более распространено использовать тип данных GLFloat (обычно отображаемый непосредственно на плавании на 16 битов), поскольку это более эффективно на большинстве GPU, чем GLDouble.
У меня был небольшой проект, в котором я использовал CUDA, и я помню, что float там тоже был быстрее, чем double. На этот раз трафик между Хостом и Устройством ниже (Хост - это ЦП, а «нормальная» ОЗУ, а Устройство - это графический процессор и соответствующая ОЗУ). Но даже если данные все время хранятся на устройстве, это медленнее. Думаю, я где-то читал, что это изменилось недавно или должно измениться в следующем поколении, но я не уверен.
Похоже, что в этих случаях графический процессор просто не может изначально обрабатывать двойную точность, что также объясняет, почему обычно используется GLFloat, а не GLDouble.
(Как я уже сказал, это насколько я помню, просто наткнулся на это, когда искал float vs. double на CPU.)