Я использую (в Matlab) оператор global
внутри команды if, поэтому я импортирую глобальную переменную в локальное пространство имен, только если она действительно необходимо.
Анализатор кода предупреждает меня, что « global
может быть очень неэффективным, если он не является оператором верхнего уровня в своей функции». Думая о возможной внутренней реализации, я нахожу это ограничение очень странным и необычно. Я думаю о двух возможностях:
На самом деле это предупреждение означает, что « global
сам по себе очень неэффективен, поэтому не используйте его в цикле». В частности, используя его внутри если, как и я, совершенно безопасно, и предупреждение выдается неправильно (и плохо сформулировано)
Предупреждение правильное; Matlab использует какой-то действительно необычный механизм загрузки переменных в фоновом режиме, поэтому он действительно намного медленнее для импорта глобальных переменных внутри оператора if. В этом случае я хотел бы получить подсказку или указатель на то, как это материал действительно работает, потому что мне интересно, и это кажется важным, если я хочу писать эффективный код в будущем.
Какое из этих двух объяснений верно? (или, может быть, ни то, ни другое?)
Заранее спасибо.
РЕДАКТИРОВАТЬ: чтобы было понятнее: я знаю, что global
работает медленно (и, очевидно, я не могу избежать его использования, поскольку это дизайнерское решение старой библиотеки, которую я использую); Я спрашиваю, почему анализатор кода Matlab жалуется на
if(foo==bar)
GLOBAL baz
baz=1;
else
do_other_stuff;
end
, а не на
GLOBAL baz
if(foo==bar)
baz=1;
else
do_other_stuff;
end
. Мне трудно представить причину, по которой первый должен быть медленнее, чем второй.