Должен ли я использовать has_key () или in в Python dicts?

Это называется форвардной декларацией. Тело класса foo будет определено в более поздней части файла. Для определения циклических зависимостей выполняется следующее: определение класса Bar требует класса Foo и наоборот.

class Bar
{
   Foo * foo;
};
class Foo
{
   Bar * bar;
};

Как вы можете видеть, Bar имеет ссылку на Foo и наоборот , Если вы попытаетесь скомпилировать это, компилятор заявит, что он ничего не знает о Foo. Решение состоит в том, чтобы переслать объявление class Foo над Bar (так же, как вы объявляете прототип функции над main и определяете ее тело позже).

class Foo; //Tells the compiler that there is a class Foo coming down the line.
class Bar
{
   Foo * foo;
};
class Foo
{
   Bar * bar;
};
830
задан smci 29 November 2018 в 06:37
поделиться

5 ответов

в определенно более питонический.

Фактически has_key () был удален в Python 3.x .

1220
ответ дан 22 November 2019 в 21:09
поделиться

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

$ python -mtimeit -s'd=dict.fromkeys(range(99))' '12 in d'
10000000 loops, best of 3: 0.0983 usec per loop
$ python -mtimeit -s'd=dict.fromkeys(range(99))' 'd.has_key(12)'
1000000 loops, best of 3: 0.21 usec per loop

Хотя следующее наблюдение не является всегда true, вы заметите, что обычно , в Python более быстрое решение является более элегантным и питоническим; вот почему -mtimeit ТАК полезен - это не просто о экономии сотни наносекунд здесь и там! -)

250
ответ дан 22 November 2019 в 21:09
поделиться

Согласно python docs :

has_key () устарел в пользу введите d .

92
ответ дан 22 November 2019 в 21:09
поделиться

Используйте dict.has_key () , если (и только если) ваш код должен запускаться версиями Python ранее, чем 2.3 (когда ключ в dict ).

39
ответ дан 22 November 2019 в 21:09
поделиться

has_key - словарный метод, но в будет работать с любым коллекции, и даже если __ содержит __ отсутствует, в будет использовать любой другой метод для итерации коллекции, чтобы выяснить.

15
ответ дан 22 November 2019 в 21:09
поделиться
Другие вопросы по тегам:

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