Если бы у вас был размер чанка, например, 3, вы могли бы сделать:
zip(*[iterable[i::3] for i in range(3)])
источник: http://code.activestate.com/recipes/303060-group-a- list-in-sequential-n-tuples /
Я бы использовал это, когда размер моего чанка равен фиксированному числу, которое я могу напечатать, например «3», и никогда не изменится.
Большая разница в том, когда вам нужно сообщить XmlSerializer
о подпрограммах классов - например:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Car),
new Type[] { typeof(SportCar), typeof(Radio) });
Здесь без дополнительной информации, если бы не не знали (только из Автомобиль
) ни о SportCar
, ни о Radio
- поэтому, если вы дадите ему объект, который на самом деле является SportCar
, это не сработает:
Car car = new SportCar {...};
xmlSerializer.Serialize(destination, car);
Вы также можете сделать это, установив [XmlInclude (typeof (SportCar))]
вместо определения типа Car
:
[XmlInclude(typeof(SportCar))]
public class Car {...}
Это проще, но возможно только в том случае, если тип Автомобиль
находится в сборке, которая знает о SportCar
. Но вы часто знаете об этом , поэтому XmlInclude
является предпочтительным вариантом.
Кроме того: XmlInclude
дает некоторые преимущества в эффективности; за кулисами система использует динамическую генерацию типов, чтобы сделать XmlSerializer
эффективным. По этой причине вам обычно следует удерживать (и повторно использовать) созданный вами экземпляр XmlSerializer
; например, сохраняя его в статическом поле. Однако система делает это автоматически для использования по умолчанию ( new XmlSerializer (typeof (Car))
) - т.е. независимо от того, сколько раз вы используете этот конструктор, он генерирует динамический код только один раз. Если вы используете более сложный конструктор ( new XmlSerializer (typeof (Car), new Type [] {typeof (SportCar), typeof (Radio)})
), он будет генерировать тип каждый раз.
XmlSerializer
; например, сохраняя его в статическом поле. Однако система делает это автоматически для использования по умолчанию ( new XmlSerializer (typeof (Car))
) - т.е. независимо от того, сколько раз вы используете этот конструктор, он генерирует динамический код только один раз. Если вы используете более сложный конструктор ( new XmlSerializer (typeof (Car), new Type [] {typeof (SportCar), typeof (Radio)})
), он будет генерировать тип каждый раз. как правило, вам следует сохранить (и повторно использовать) созданный вами экземпляр XmlSerializer
; например, сохраняя его в статическом поле. Однако система делает это автоматически для использования по умолчанию ( new XmlSerializer (typeof (Car))
) - т.е. независимо от того, сколько раз вы используете этот конструктор, он генерирует динамический код только один раз. Если вы используете более сложный конструктор ( new XmlSerializer (typeof (Car), new Type [] {typeof (SportCar), typeof (Radio)})
), он будет генерировать тип каждый раз.