调用用户定义的 Python 模块
此示例说明如何从以下 Python® 模块调用方法。本文档中的示例会使用此模块。此示例说明如何在 MATLAB® 中创建该模块。如果您在 Python 编辑器中创建 mymod.py
,请确保该模块位于 Python 搜索路径上。此示例还可指导经验不丰富的 Python 用户如何获得调用该函数的帮助。
将当前文件夹更改为可写文件夹。
在 MATLAB 编辑器中打开一个新文件。
复制下列命令并将该文件另存为
mymod.py
。# mymod.py """Python module demonstrates passing MATLAB types to Python functions""" def search(words): """Return list of words containing 'son'""" newlist = [w for w in words if 'son' in w] return newlist def theend(words): """Append 'The End' to list of words""" words.append('The End') return words
从 MATLAB 命令提示符下,将当前文件夹添加到 Python 搜索路径。
if count(py.sys.path,pwd) == 0 insert(py.sys.path,int32(0),pwd); end
要了解如何调用函数,请阅读
mymod.py
源文件中search
函数的函数签名。该函数接受一个输入参数words
。def search(words):
阅读
mymod.py
源文件中的函数帮助。根据 Python 网站文档,帮助位于“作为模块、函数、类或方法定义中的第一条语句出现的字符串文字”中。search
的帮助是:"""Return list of words containing 'son'"""
该函数返回一个列表。
在 MATLAB 中创建一个输入参数,即名称列表。
N = py.list({'Jones','Johnson','James'})
N = Python list with no properties. ['Jones', 'Johnson', 'James']
调用
search
函数。在模块名称和函数名称前键入py.
。names = py.mymod.search(N)
names = Python list with no properties. ['Johnson']
该函数返回
py.list
值。原始输入
N
未更改。N
N = Python list with no properties. ['Jones', 'Johnson', 'James']
重新加载经过修改的用户定义的 Python 模块
此示例说明如何在进程内运行 Python 解释器的同时重新加载修改后的 Python 模块。有关替代方法,请参阅重新加载进程外 Python 解释器。
创建 Python 模块
将当前文件夹更改为可写文件夹。在 MATLAB 编辑器中打开一个新文件。
复制下列用于定义 myfunc
函数的语句并将文件另存为 newmod.py
。
# newmod.py def myfunc(): """Display message.""" return 'version 1'
调用 myfunc
。
py.newmod.myfunc
ans = Python str with no properties. version 1
修改模块
修改该函数,用以下代码替换 return
语句:
return 'version 2'
保存文件。
卸载模块
clear classes
MATLAB 删除工作区中的所有变量、脚本和类。最佳做法是从命令提示符下调用 clear
。如果在工作区(如函数工作区)中运行 clear classes
,则 clear
可能无法清除所有变量。请尝试从基础工作区运行该命令。
导入经过修改的模块
mod = py.importlib.import_module('newmod');
在 Python 中重新加载模块
py.importlib.reload(mod);
调用更新后的模块中的函数
调用更新后的 myfunc
函数。
py.newmod.myfunc
ans = Python str with no properties. version 2