Это называется форвардной декларацией. Тело класса 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;
};
в
определенно более питонический.
Фактически has_key ()
был удален в Python 3.x .
в
явно выигрывает не только в элегантности (и не является устаревшей ;-), но и в производительности, например:
$ 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
ТАК полезен - это не просто о экономии сотни наносекунд здесь и там! -)
Согласно python docs :
has_key ()
устарел в пользувведите d
.
Используйте dict.has_key ()
, если (и только если) ваш код должен запускаться версиями Python ранее, чем 2.3 (когда ключ в dict
).
has_key
- словарный метод, но в
будет работать с любым коллекции, и даже если __ содержит __
отсутствует, в
будет использовать любой другой метод для итерации коллекции, чтобы выяснить.