Main Content

调用用户定义的 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

另请参阅

相关主题