Порядок инициализации статических полей в статическом классе

При вынимании пустого списка от вызова для установки () в ответе Terhost, Вы получаете немного повышения скорости.

Изменение: найденный = набор ([])
к: найденный = набор ()

Однако Вам не нужен набор вообще.

def unique(items):
    keep = []

    for item in items:
        if item not in keep:
            keep.append(item)

    return keep

Используя timeit я получил эти результаты:

с набором ([]) - 4.97210427363
с набором () - 4.65712377445
без набора - 3.44865284975

44
задан Falko 26 July 2017 в 18:45
поделиться

3 ответа

Да, они будут, см. 10.4.5.1 Инициализация статического поля :

Инициализаторы переменных статического поля класса соответствуют последовательности задания, которые выполняются в текстовый порядок, в котором они появляются в объявление класса. Если статический конструктор (раздел 10.11) существует в класс, выполнение статического инициализаторы поля происходят немедленно перед выполнением этого статического конструктор. В противном случае статический инициализаторы полей выполняются в время, зависящее от реализации, до первое использование статического поля этот класс.

При этом, я думаю, было бы лучше выполнить инициализацию внутри инициализатора статического типа (статический конструктор).

52
ответ дан 26 November 2019 в 22:12
поделиться

На первый взгляд я не был уверен, и мне пришлось попробовать это, чтобы увидеть, компилируется ли оно вообще.

Учитывая это, я бы инициализировал значение в статическом конструкторе .

0
ответ дан 26 November 2019 в 22:12
поделиться

Хм ... Я удивлен который компилируется (я проверил). Я не знаю никаких гарантий, которые сделали бы это безопасным. Используйте статический конструктор ...


Изменить: я согласен (см. лучший ответ выше ), что он будет работать; но моя идея с кодом - сделать его максимально простым и очевидным. Если не очевидно , что это сработает (а этого не может быть, если вам нужно спросить), тогда не пишите так ...

В частности, проблемы с доверием по порядку полей:

14
ответ дан 26 November 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: