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.Расширенная информация о каждой переменной обобщается в таблице со следующими стандартными полями.
- Attr
-
Атрибуты перечисленных переменных. Возможные атрибуты:
- blank
-
Переменная в локальной области видимости
c-
Переменная комплексного типа.
f-
Формальный параметр (аргумент функции).
g-
Переменная с глобальной областью видимости.
pПеременная с сохранением состояния.
- Name
-
Имя переменной.
- Size
-
Логический размер переменной. Скаляр — 1x1, вектор — 1xN или Nx1, 2-мерная матрица — MxN.
- Bytes
-
Объём используемой памяти для хранения переменной.
- Class
Класс переменной. Примеры: 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=complex, s=sparse, 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)¶ -
Проверка существования имя в качестве переменной, функции, файла, каталога или класса.
Код возврата c — это одно из значений:
- 1
-
имя — это переменная.
- 2
-
имя — это абсолютный путь к файлу, обычный файл в Octave
path, или (после добавления ‘.m’) — файл функции в Octavepath. - 3
-
имя — это файл ‘.oct’ или ‘.mex’ в Octave
path. - 5
-
имя — это встроенная функция.
- 7
-
имя — это каталог.
- 8
-
имя — это класс classdef.
- 103
-
имя — это функция, не связанная с файлом (введена в командной строке).
- 0
имя не существует.
Если указан необязательный аргумент тип, то проверяются только символы указанного типа. Допустимые типы:
"var"-
Проверка только переменных.
"builtin"-
Проверка только встроенных функций.
"dir"-
Проверка только каталогов.
"file"-
Проверка только файлов и каталогов.
"class"Проверка только классов classdef.
Если тип не указан, а для имени существует несколько возможных совпадений,
existвернёт код в соответствии со следующим списком приоритетов: переменная, встроенная функция, oct-файл, каталог, файл, класс.existвозвращает 2, если в пути поиска Octave присутствует обычный файл с именем имя. Для получения информации об других типах файлов, не находящихся в пути поиска, используйте комбинацию функцийfile_in_pathиstat.Примечание по программированию: Если имя реализовано неисправным файлом .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 …¶ -
Удалить имена, соответствующие заданным шаблонам, освободив память.
Шаблон может содержать следующие специальные символы:
?-
Соответствует любому одиночному символу.
*-
Соответствует нулю или более символам.
[ 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Аргументы шаблон интерпретируются как регулярные выражения, и все совпадения будут очищены.
За исключением -exclusive и -regexp, все длинные опции могут быть использованы и без тире. Обратите внимание, что помимо -exclusive, может появиться только одна другая опция. Все опции должны идти перед любыми шаблонами.
Примечания по программированию: Команда
clear 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–2023 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.2.0/Status-of-Variables.html