Main Content

pyrun

MATLAB 中运行 Python 语句

自 R2021b 起

    说明

    示例

    pyrun(code) 在 Python® 解释器中执行 code 中的 Python 语句。

    使用 pyrun 函数创建的变量是持久变量。您可以在对 pyrun 的后续调用中使用这些变量。

    示例

    outvars = pyrun(code,outputs) 通过在 outputs 中指定 Python 变量的名称并在 outvars 中捕获返回值,将由 Python 生成的任何变量返回给 MATLAB®

    示例

    outvars = pyrun(code,outputs,pyName=pyValue) 使用由一个或多个名称-值参量传递的 MATLAB 数据来执行其中包含已赋值的输入和输出变量名称的代码。

    示例

    全部折叠

    此示例在 Python 解释器中执行这些 Python 语句。

    greeting = "hello"
    print(greeting)

    从 MATLAB 中调用 Python 代码。

    pyrun(["greeting = 'hello'", "print(greeting)"])
    hello

    变量 greeting 仅存在于 Python 命名空间中。MATLAB 在 MATLAB 命令行中显示 print 语句的结果。

    以下 Python 代码将创建一周中各天的列表。

    days = ['Monday','Tuesday','Wednesday','Thursday','Friday']

    为列表函数创建一个 Python 变量 days。在 MATLAB 中,将变量命名为 mllist

    mllist = pyrun("days = ['Monday','Tuesday','Wednesday','Thursday','Friday']","days")
    mllist = 
      Python list with no properties.
    
        ['Tuesday', 'Monday', 'Wednesday', 'Thursday', 'Friday']
    

    此示例使用指定的输入值在 Python 解释器中执行语句 a = b*c

    pyrun("a = b*c", b = 5, c = 10)

    变量 abc 仅存在于 Python 命名空间中。但是,这些变量可用于对 pyrun 的进一步调用。

    md = pyrun("d = a+c", "d")
    md = 60

    此示例在 Python 中执行 b*c,并在 MATLAB 变量中返回结果。

    res = pyrun("a = b*c", "a", b=5, c=10)
    res = 50

    此示例将一个局部变量赋给一个 Python 变量,使其可在 MATLAB 中访问。

    创建一个模块 localModule.py

    def myFunc():
        print('myFunc executed')
    mvar = 3

    创建变量 m 以访问 mvar,并将值赋给 MATLAB 变量 out

    pyrun("import localModule")
    out = pyrun("m = localModule.mvar","m")

    输入参数

    全部折叠

    一个或多个 Python 语句,指定为字符串标量、字符串数组、字符向量、字符数组、字符向量元胞数组,或是使用 Python 内置 compile 函数从脚本生成的 Python 代码对象。每个条目表示一行 Python 代码。

    要调用单行语句,请将 code 作为字符串标量或字符向量进行传递。要调用多行 Python 语句,请将 code 作为字符串数组、字符数组或字符向量元胞数组进行传递。MATLAB 会在多行语句的元素之间插入换行符。

    示例: pyrun(["a = 3","print(a)"])

    要传递给 Python code 的一个或多个输入参量名称和值,指定为关键字和值参量。pyName 是变量的 Python 名称,pyValue 是所赋的值。您可采用任意顺序指定多个名称-值对组参量,如 pyName1=pyValue1,...,pyNameN=pyValueN 所示。

    示例: pyrun("b*c",b=5,c=10) 对 Python 语句 b*c 的变量 bc 进行初始化。

    一个或多个 Python 变量名称,指定为字符串数组。变量可以是局部变量,也可以是全局变量。MATLAB 将 code 的输出赋给由 outputs 指定的每个变量,并在 outvars 中返回值。

    示例: mb = pyrun("b=a+2","b",a=5)

    输出参量

    全部折叠

    一个或多个 MATLAB 工作区变量名称,从 code 中以有效 Python 类型形式返回。在 outputs 参量中指定 Python 变量的名称。如果您要访问 Python 数据,则必须使用 outvars 将 Python 对象显式返回给 MATLAB。

    要指定多个输出,请使用方括号。例如,[res1,res2] = pyrun("a=b*c",["a","b"],b=5,c=10) 返回两个 outvars,即 res1res2

    局限性

    • 对于使用 pyrunpyrunfile 定义的 Python 类,如果将类的实例返回到 MATLAB,将无法修改这些类。如果需要更改类定义,请重新启动解释器会话:

      terminate(pyenv)
      pyenv(ExecutionMode="OutOfProcess")

      或者,重新启动 MATLAB 以使用 "InProcess" 模式。

      有些局部变量要由其他局部变量通过某种方法来初始化,pyrunpyrunfile 函数不支持具有这种局部变量的类。对于这种用法,请创建一个模块并使用 py. 前缀访问它。

    版本历史记录

    在 R2021b 中推出