7.3 Состояние переменных
При создании простых одноразовых программ очень удобно видеть, какие переменные доступны в командной строке. Функция who и её аналоги whos и whos_line_format покажут различную информацию о содержимом памяти, как показано ниже.
str = "A random string"; who -| Variables in the current scope: -| -| ans str
- : who ¶
- : who шаблон … ¶
- : who опция шаблон … ¶
- : C = who ("шаблон", …) ¶
-
Выводит список определённых переменных, соответствующих заданным шаблонам.
Синтаксис шаблона такой же, как описано для команды
clear. Если шаблоны не указаны, выводятся все переменные.По умолчанию отображаются только переменные, видимые в локальной области видимости.
Следующие опции допустимы, но не могут комбинироваться.
global-
Выводит переменные из глобальной области видимости вместо текущей.
-regexp-
Шаблоны рассматриваются как регулярные выражения при сопоставлении с переменными для отображения. Используется тот же синтаксис шаблонов, что и для функции
regexp. -fileСледующий аргумент рассматривается как имя файла. Выводятся все переменные, найденные в указанном файле. Шаблоны не принимаются при чтении переменных из файла.
Если вызвана как функция, возвращает ячейковый массив имён определённых переменных, соответствующих заданным шаблонам.
- : whos ¶
- : whos шаблон … ¶
- : whos опция шаблон … ¶
- : S = whos ("шаблон", …) ¶
-
Предоставляет подробную информацию о текущих определённых переменных, соответствующих заданным шаблонам.
Опции и синтаксис шаблонов такие же, как и для команды
who.Расширенная информация о каждой переменной обобщена в таблице со следующими стандартными записями.
- Атрибут
-
Атрибуты перечисленных переменных. Возможные атрибуты:
- blank
-
Переменная в локальной области видимости
c-
Переменная комплексного типа.
f-
Формальный параметр (аргумент функции).
g-
Переменная с глобальной областью видимости.
pПерсистентная переменная.
- Имя
-
Имя переменной.
- Размер
-
Логический размер переменной. Скаляр – 1x1, вектор – 1xN или Nx1, 2-мерная матрица – MxN.
- Байты
-
Количество памяти, используемой для хранения переменной.
- Класс
Класс переменной. Примеры: double, single, char, uint16, cell, struct.
Таблица может быть настроена для отображения больше или меньше информации с помощью функции
whos_line_format.Если
whosвызвана как функция, возвращает массив структур с именами определённых переменных, соответствующих заданным шаблонам. Поля в структуре, описывающие каждую переменную: имя, размер, байты, класс, глобальная, разреженная, комплексная, вложенность, персистентная.См. также: who, whos_line_format.
- : val = whos_line_format () ¶
- : old_val = whos_line_format (new_val) ¶
- : whos_line_format (new_val, "local") ¶
-
Запрос или установка строки формата, используемой командой
whos.Полная строка формата:
%[modifier]<command>[:width[:left-min[:balance]]];
Доступные последовательности команд:
%a-
Выводит атрибуты переменных (c=комплексная, s=разреженная, f=формальный параметр, g=глобальная, p=персистентная).
%b-
Выводит количество байтов, занимаемых переменными.
%c-
Выводит имена классов переменных.
%e-
Выводит элементы, хранящиеся в переменных.
%n-
Выводит имена переменных.
%s-
Выводит размерности переменных.
%tВыводит имена типов переменных.
Каждая команда также может иметь модификатор выравнивания:
l-
Выравнивание слева.
r-
Выравнивание справа (по умолчанию).
cВыравнивание по столбцам (применимо только к команде %s).
Параметр
width– целое положительное число, определяющее минимальное количество столбцов для вывода. Максимальное значение не требуется, так как поле автоматически расширяется по мере необходимости.Параметры
left-minиbalanceдоступны только при использовании модификатора выравнивания по столбцам с командой ‘%s’.balance– номер столбца внутри ширины поля, который будет выровнен между записями. Нумерация начинается с 0, что указывает на самый левый столбец.left-min– минимальная ширина поля слева от указанного столбца выравнивания.Формат по умолчанию:
" %la:5; %ln:6; %cs:16:6:1; %rb:12; %lc:-1;\n"
При вызове изнутри функции с опцией
"local", переменная изменяется локально для функции и любых вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: whos.
Вместо отображения переменных в памяти можно определить, доступна ли заданная переменная. Таким образом, можно изменять поведение программы в зависимости от наличия переменной. Следующий пример иллюстрирует это.
if (! exist ("meaning", "var"))
disp ("The program has no 'meaning'");
endif - : c = exist (name) ¶
- : c = exist (name, type) ¶
-
Проверяет существование name как переменной, функции, файла, каталога или класса.
Возвращаемое значение c – одно из
- 1
-
name – переменная.
- 2
-
name – абсолютный путь к файлу, обычный файл в
path, или (после добавления ‘.m’) файл функции вpath. - 3
-
name – файл ‘.oct’ или ‘.mex’ в
path. - 5
-
name – встроенная функция.
- 7
-
name – каталог.
- 8
-
name – класс classdef.
- 103
-
name – функция, не связанная с файлом (введена в командной строке).
- 0
name не существует.
Если опциональный аргумент type указан, проверяются только символы указанного типа. Допустимые типы:
"var"-
Проверка только переменных.
"builtin"-
Проверка только встроенных функций.
"dir"-
Проверка только каталогов.
"file"-
Проверка только файлов и каталогов.
"class"Проверка только классов classdef.
Если тип не указан, и существует несколько возможных совпадений для name,
existвозвратит код в соответствии со следующим приоритетным списком: переменная, встроенная функция, файл .oct, каталог, файл, класс.existвозвращает 2, если обычный файл с именем name присутствует в пути поиска Octave. Для получения информации об других типах файлов, не находящихся в пути поиска, используйте комбинацию функцийfile_in_pathиstat.Примечание по программированию: Если name реализован неисправным файлом .oct/.mex, вызов exist может привести к аварийному завершению Octave. Чтобы сохранить высокую производительность, Octave доверяет файлам .oct/.mex вместо их изоляции.
См. также: file_in_loadpath, file_in_path, dir_in_loadpath, stat.
Обычно Octave управляет памятью, но иногда бывает удобно удалять переменные вручную. Это обычно необходимо при работе с большими переменными, которые занимают значительную часть памяти. На компьютере, использующем формат с плавающей запятой IEEE, следующая программа выделяет матрицу, которая требует около 128 МБ памяти.
large_matrix = zeros (4000, 4000);
Поскольку наличие этой переменной в памяти может замедлить другие вычисления, может потребоваться удалить ее вручную из памяти. Для этого используются функции clear или clearvars.
- : clear ¶
- : clear pattern … ¶
- : clear options pattern … ¶
-
Удалить имена, соответствующие заданным patternам, тем самым освободив память.
Шаблон pattern может содержать следующие специальные символы:
?-
Соответствует любому одиночному символу.
*-
Соответствует нулю или более символам.
[ list ]Соответствует списку символов, указанных в list. Если первый символ —
!или^, соответствуют все символы, кроме тех, которые указаны в list. Например, шаблон[a-zA-Z]соответствует всем строчным и прописным буквам алфавита.
Например, команда
clear foo b*r
очищает имя
fooи все имена, начинающиеся с буквы 'b' и заканчивающиеся буквой 'r'.Если
clearвызывается без аргументов, все пользовательские переменные очищаются из текущего рабочего пространства (т. е. локальные переменные). Любые присутствующие глобальные переменные больше не будут видны в текущем рабочем пространстве, но они продолжат существовать в глобальном рабочем пространстве. Функции не затрагиваются этим видомclear.Следующие параметры доступны в длинной и короткой формах
all, -all, -a-
Очистить все локальные и глобальные пользовательские переменные и все функции из таблицы символов.
-exclusive, -x-
Очистить переменные, которые не соответствуют указанному шаблону.
functions, -functions, -f-
Очистить имена функций из таблицы символов функций. Постоянные переменные будут переинициализированы до своего значения по умолчанию, если функция не была заблокирована в памяти с помощью
mlock. global, -global, -g-
Очистить имена глобальных переменных.
variables, -variables, -v-
Очистить имена локальных переменных.
classes, -classes, -c-
Очистить таблицу структуры классов и все объекты.
-regexp, -rАргументы pattern обрабатываются как регулярные выражения, и любые совпадения будут удалены.
За исключением -exclusive и -regexp, все длинные параметры могут использоваться и без тире. Обратите внимание, что помимо -exclusive, может появиться только один другой параметр. Все параметры должны предшествовать любым шаблонам.
Примечания к программированию: команда
clear nameочищает переменную name только тогда, когда одновременно определены как переменная, так и (затененная) функция с именем name. Например, предположим, что вы определили функциюfoo, а затем скрыли ее, выполнив присваиваниеfoo = 2. Выполнение командыclear fooодин раз очистит определение переменной и восстановит определениеfooкак функции. Выполнениеclear fooво второй раз очистит определение функции.Когда локальное имя переменной, связанное с глобальной переменной, очищается, удаляется только локальная копия переменной. Глобальная копия остается нетронутой и может быть восстановлена с помощью
global global_varname. И наоборот,clear -g global_varnameудалит как локальные, так и глобальные переменные.
- : clearvars ¶
- : clearvars pattern … ¶
- : clearvars -regexp pattern … ¶
- : clearvars … -except pattern … ¶
- : clearvars … -except -regexp pattern … ¶
- : clearvars -global … ¶
-
Удалить переменные, соответствующие заданным patternам, из памяти.
Шаблон pattern может содержать следующие специальные символы:
?-
Соответствует любому одиночному символу.
*-
Соответствует нулю или более символам.
[ list ]Соответствует списку символов, указанных в list. Если первый символ —
!или^, соответствуют все символы, кроме тех, которые указаны в list. Например, шаблон[a-zA-Z]соответствует всем строчным и прописным буквам алфавита.
Если параметр -regexp задан, последующие шаблоны обрабатываются как регулярные выражения, и любые совпадения будут удалены.
Если параметр -except задан, последующие шаблоны выбирают переменные, которые не будут удалены.
Если параметр -global задан, все шаблоны будут применяться к глобальным переменным, а не к локальным.
При вызове без аргументов,
clearvarsудаляет все локальные переменные.Пример кода:
Очистить все переменные, начинающиеся с
'x'и конкретную переменную"foobar"clearvars x* foobar
Очистить конкретную переменную
"foobar"и использовать регулярные выражения для очистки всех переменных, начинающихся с'x'или'y'.clearvars foobar -regexp ^x ^y
Очистить все переменные, кроме
"foobar"clearvars -except foobar
Очистить все переменные, начинающиеся с
"foo", за исключением тех, которые заканчиваются на"bar"clearvars foo* -except -regexp bar$
- : pack () ¶
-
Консолидировать память рабочего пространства в MATLAB.
Эта функция предоставлена для совместимости, но в Octave ничего не делает.
См. также: clear.
Информация о функции или переменной, такой как ее расположение в файловой системе, также может быть получена из Octave. Это обычно полезно только во время разработки программ, а не в рамках программы.
- : type name … ¶
- : type -q name … ¶
- : text = type ("name", …) ¶
-
Отобразить содержимое name, которое может быть файлом, функцией (m-файлом), переменной, оператором или ключевым словом.
typeобычно предваряет строку заголовка, описывающую категорию name, такую как функция или переменная; параметр -q подавляет это поведение.Если переменная вывода не используется, содержимое отображается на экране. В противном случае возвращается массива строк, где каждый элемент соответствует содержимому каждой запрошенной функции.
- : what ¶
- : what dir ¶
- : w = what (dir) ¶
-
Перечислите файлы, специфичные для Octave, в каталоге dir.
Если dir не указан, используется текущий каталог.
Если требуется возвращаемое значение, найденные файлы возвращаются в структуре w. Структура содержит следующие поля:
- path
-
Полный путь к каталогу dir
- m
-
Массив ячеек m-файлов
- mat
-
Массив ячеек mat-файлов
- mex
-
Массив ячеек mex-файлов
- oct
-
Массив ячеек oct-файлов
- mdl
-
Массив ячеек mdl-файлов
- slx
-
Массив ячеек slx-файлов
- p
-
Массив ячеек p-файлов
- classes
-
Массив ячеек каталогов классов (@classname/)
- packages
Массив ячеек каталогов пакетов (+pkgname/)
Примечание по совместимости: Octave не поддерживает mdl-, slx- и p-файлы.
whatвсегда будет возвращать пустой список для этих категорий.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v7.2.0/Status-of-Variables.html