7.3 Состояние переменных
При создании простых одноразовых программ бывает очень удобно видеть, какие переменные доступны в командной строке. Функция who и её аналоги whos и whos_line_format показывают различные сведения о содержимом памяти, как показано ниже.
str = "A random string"; who -| Variables in the current scope: -| -| ans str
- : who
-
: who
pattern … -
: who
option pattern … -
:
C =who(…) -
Вывести список определённых в данный момент переменных, соответствующих заданным шаблонам.
Допустимый синтаксис шаблонов совпадает с описанным для команды
clear. Если шаблоны не заданы, выводятся все переменные.По умолчанию отображаются только переменные, видимые в локальной области видимости.
Допустимы следующие параметры, которые нельзя использовать вместе.
global-
Вывести переменные глобальной области видимости, а не текущей области.
-regexp-
При сопоставлении переменных для отображения шаблоны считаются регулярными выражениями. Используется тот же синтаксис шаблонов, что и в функции
regexp. -fileСледующий аргумент рассматривается как имя файла. Выводятся все переменные, найденные в указанном файле. При чтении переменных из файла шаблоны не допускаются.
При вызове в качестве функции возвращает массив ячеек с именами определённых переменных, соответствующих заданным шаблонам.
- : whos
-
: whos
pattern … -
: whos
option pattern … -
:
S =whos("pattern", …) -
Вывести подробные сведения об определённых в данный момент переменных, соответствующих заданным шаблонам.
Параметры и синтаксис шаблонов совпадают с используемыми командой
who.Дополнительные сведения о каждой переменной представлены в таблице со следующими столбцами по умолчанию.
- Атрибуты
-
Атрибуты перечисленных переменных. Возможны следующие атрибуты:
- пусто
-
Переменная в локальной области видимости
c-
Переменная комплексного типа.
f-
Формальный параметр (аргумент функции).
g-
Переменная с глобальной областью видимости.
pПостоянная переменная.
- Имя
-
Имя переменной.
- Размер
-
Логический размер переменной. Скаляр имеет размер 1x1, вектор — 1xN или Nx1, двумерная матрица — MxN.
- Байты
-
Объём памяти, используемый в данный момент для хранения переменной.
- Класс
Класс переменной. Например: double, single, char, uint16, cell и struct.
Таблицу можно настроить, чтобы отображать больше или меньше сведений, с помощью функции
whos_line_format.Если
whosвызывается в качестве функции, она возвращает массив структур с именами определённых переменных, соответствующих заданным шаблонам. Структура, описывающая каждую переменную, содержит поля: name, size, bytes, class, global, sparse, complex, nesting, persistent.См. также: who, whos_line_format.
-
:
val =whos_line_format() -
:
old_val =whos_line_format(new_val) -
:
old_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 — абсолютное имя файла, обычный файл в
pathOctave или (после добавления ‘.m’) файл функции вpathOctave. - 3
-
name — файл ‘.oct’ или ‘.mex’ в
pathOctave. - 5
-
name — встроенная функция.
- 7
-
name — каталог.
- 8
-
name — класс classdef.
- 103
-
name — функция, не связанная с файлом (введённая в командной строке).
- 0
name не существует.
Если указан необязательный аргумент type, проверяются только символы указанного типа. Допустимы следующие типы:
"var"-
Проверять только переменные.
"builtin"-
Проверять только встроенные функции.
"dir"-
Проверять только каталоги.
"file"-
Проверять только файлы и каталоги.
"class"Проверять только классы classdef.
Если тип не указан и для имени есть несколько возможных совпадений,
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]соответствует всем строчным и прописным буквам. В Windows квадратные скобки воспринимаются буквально и не используются для группировки символов.
Например, команда
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, только если в данный момент определены и переменная, и одноимённая (затенённая) функция. Например, предположим, что вы определили функцию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 отключает такое поведение.Если выходная переменная не указана, содержимое отображается на экране. В противном случае возвращается массив ячеек со строками, каждый элемент которого соответствует содержимому одной из запрошенных функций.
-
: which
name … -
:
[str, …] =which('name', …) -
Вывести тип каждого name.
Если name определён в файле функции, также выводится полное имя файла.
- : 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–2026 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/v9.4.0/Status-of-Variables.html