Синтаксис, чтобы создать объект pyObj
Python®:
pyObj = py.modulename.ClassName(varargin)
где varargin
является списком аргументов конструктора, заданных методом __init__
в ClassName
.
В MATLAB® объекты Python являются ссылочными типами (объекты указателя) и не придерживаются копии на присвоении MATLAB и правил передачи значением. Когда вы копируете объект указателя, только указатель копируется, и и старые и новые указатели относятся к тем же данным. Когда вы копируете переменную MATLAB (объект значения), переменные данные также копируются. Новая переменная независима от изменений в исходной переменной.
Следующий пример создает объект класса TextWrapper
в модуле библиотеки textwrap
стандарта Python.
Считайте подпись конструктора, __init__
.
py.help('textwrap.TextWrapper.__init__')
Help on method __init__ in textwrap.TextWrapper: textwrap.TextWrapper.__init__ = __init__(self, width=70, initial_indent='', subsequent_indent='', expand_tabs=True, replace_whitespace=True, fix_sentence_endings=False, break_long_words=True, drop_whitespace=True, break_on_hyphens=True) unbound textwrap.TextWrapper method
Создайте объект TextWrapper
по умолчанию. Вы не должны передавать входные параметры, потому что каждый аргумент имеет значение по умолчанию, идентифицированное знаком "равно" (=
) символ.
tw = py.textwrap.TextWrapper;
tw = Python TextWrapper with properties: width: 70 subsequent_indent: [1x1 py.str] wordsep_simple_re_uni: [1x1 py._sre.SRE_Pattern] fix_sentence_endings: 0 break_on_hyphens: 1 break_long_words: 1 wordsep_re_uni: [1x1 py._sre.SRE_Pattern] initial_indent: [1x1 py.str] expand_tabs: 1 replace_whitespace: 1 drop_whitespace: 1 <textwrap.TextWrapper instance at 0x000000006D58F808>
Чтобы изменить логическое значение, например, свойство break_long_words
, введите:
tw.break_long_words = 0;
Чтобы изменить числовое значение, например, свойство width
, сначала определяют числовой тип.
class(tw.width)
ans = int64
По умолчанию, когда вы передаете номер MATLAB функции Python, Python читает его как плавание. Если функция ожидает целое число, Python может выдать ошибку или привести к неожиданным результатам. Явным образом преобразуйте номер MATLAB в целое число. Например, введите:
tw.width = int64(3);
Считайте справку для метода wrap
.
py.help('textwrap.TextWrapper.wrap')
Help on method wrap in textwrap.TextWrapper: textwrap.TextWrapper.wrap = wrap(self, text) unbound textwrap.TextWrapper method wrap(text : string) -> [string] Reformat the single paragraph in 'text' so it fits in lines of no more than 'self.width' columns, and return a list of wrapped lines. Tabs in 'text' are expanded with string.expandtabs(), and all other whitespace characters (including newline) are converted to space.
Создайте список перенесенных строк, w
, от входа T
.
T = 'MATLAB® is a high-level language and interactive environment for numerical computation, visualization, and programming.'; w = wrap(tw,T); whos w
Name Size Bytes Class Attributes w 1x1 112 py.list
Преобразуйте py.list
в массив ячеек и отобразите результаты.
wrapped = cellfun(@char, cell(w), 'UniformOutput', false); fprintf('%s\n', wrapped{:})
MATLAB® is a high- level language and interactive environment for numerical computation, visualization, and programming.
Несмотря на то, что width
равняется 3, устанавливание свойства break_long_words
ко лжи заменяет значение width
в отображении.