Использовать мощную систему ресурсов.
В макете xml задайте количество столбцов для целочисленного ресурса, а затем в /values/integers.xml
установите для него 2 для портрета и в /values-land/integers.xml
установите для него значение 3 для пейзажа
// хорошо, если вы выполняете configChanges в манифесте, вам нужно будет изменить количество столбцов из java в onConfogurationChanged
Невозможно неявно вызвать конструктор Object ()
для каждого элемента массива, как в C ++ (напомним, что в Java каждый элемент нового массива инициализируется значением null
для ссылочных типов).
Я бы сказал, что ваш метод понимания списка является наиболее питоническим:
lst = [Object() for i in range(100)]
Если вы не хотите наступать на лексический переменная i
, тогда соглашение в Python заключается в использовании _
для фиктивной переменной, значение которой не имеет значения:
lst = [Object() for _ in range(100)]
Для эквивалента аналогичной конструкции в Java, вы, конечно, можете использовать *
:
lst = [None] * 100
Обратите внимание, что Python эквивалентен коду Java (создание массива из 100 нулевых ссылок на объект):
Object arr = new Object[100];
или код C ++:
Object **arr = new Object*[100];
is:
arr = [None]*100
not:
arr = [Object() for _ in range(100)]
Второй будет таким же, как у Java:
Object arr = new Object[100];
for (int i = 0; i < arr.lenght; i++) {
arr[i] = new Object();
}
In Фактически, возможности Python по инициализации сложных структур данных намного лучше, чем у Java.
Примечание: Код C ++:
Object *arr = new Object[100];
должен сделать столько же работы, сколько и понимание списка Python:
выделить непрерывную память для 100 объектов
вызвать Object :: Object () для каждого из этих объектов
И результат будет совершенно другая структура данных.
Я думаю, что понимание списка - это самый простой способ, но, если вам это не нравится, очевидно, что это не единственный способ получить то, что вы хотите - 100 раз вызвать заданный вызываемый объект с помощью нет аргументов для формирования 100 элементов нового списка. Например, itertools
, очевидно, может это сделать:
>>> import itertools as it
>>> lst = list(it.starmap(Object, it.repeat((), 100)))
или, если вы действительно традиционалист, map
и apply
:
>>> lst = map(apply, 100*[Object], 100*[()])
Обратите внимание, что this по сути, такой же (крошечный, как концептуально, так и на самом деле ;-) объем работы, который потребовался бы, если бы вместо вызова без аргументов Object
нужно было вызвать с одним аргументом - или, скажем, , если Объект
на самом деле был функцией, а не типом.
Из вашего удивления, что для выполнения этой задачи может потребоваться «столько, сколько понимание списка», Вы, кажется, думаете, что каждый язык должен учитывать особый случай необходимости выполнять «вызовы типа без аргументов» по сравнению с другими видами вызовов вызываемых объектов, но я не понимаю, что такого важного и особенного в этом очень конкретном случае, чтобы требуют, чтобы к нему относились иначе, чем ко всем остальным; и, как следствие, я лично очень счастлив, что Python не выделяет этот случай для странного и странного обращения, а обрабатывает его так же регулярно и легко, как и любой другой подобный вариант использования! -)
lst = [Object() for i in range(100)]
Поскольку массив - это собственный объект первого класса в python, я думаю, что это единственный способ получить то, что вы находясь в поиске. * делает что-то безумное.