混编中的基本属性

使用须知

要从 MATLAB 调用 Python 库,电脑需要安装有参考的 Python 版本。 MATLAB 支持2.7,3.4,3.5 和 3.6 版本。 由于不同的Python 库对应有不同的功能,而不同的库可能支持不同的 Python 版本。因此要注意。我电脑对应的 MATLAB 版本为 R2017b,Python 对应的版本为3.6。

Functions

pyversion改变 Python 解释器的默认版本
pyargs为 Python函数创建关键参数

pyversion 语法:

[version, executable, isloaded] = pyversion
___ = pyversion version
___ = pyversion executable

pyversion 显示关于当前Python版本的详细信息

[version,executable,isloaded] = pyversion 返回 Python 版本的信息

___ = pyversion version 改变系统默认的 Python 版本。该设置方式在 MATLAB 中是相同的。如果 Python 在 MATLAB 中已经加载过的话,便不能更改版本设置。只能重新启动后再调用 pyversion 进行设置。

___ = pyversion executable指定 Python 可执行文件的完整路径。 能够在在任何平台上使用。

输入参数:

version: 为 Python 版本号,可以为字符串或者字符向量,由主版本号和次版本号组成,中间由点分隔(仅限 Windows 平台)

使用时,pyversion 在 Windows 注册表中查找该版本。 如果是从Python官网下载安装的,安装会自动将之添加到注册表中。 如果从其他源下载的 Python 应用程序,要将其添加到注册表,或使用 pyversion(executable )语法更改版本。

示例:

pyversion 3.5

executable: 指现有 Python 可执行文件的名称,为字符串或字符向量。 此参数必须包含 Python 可执行文件的名称,并且它可以包含完整路径。

示例:

C:\Python33\python.exe

/usr/bin/python

输出参数:

version: Python 版本号,为字符向量。

executable:Python 可执行文件的名称,为字符向量。

isloaded:表明指定的 Python 是否加载,为布尔值。

输入py. 的命令时,MATLAB 会加载 Python。

如果 MATLAB 没有加载 Python,isloaded为 0 且输入 py.  的命令时会出现错误。

代码验证:

示例:

pyversion

结果:

       version: '3.6'
    executable: 'D:\Python3.6.5\python.EXE'
       library: 'D:\Python3.6.5\python36.dll'
          home: 'D:\Python3.6.5'
      isloaded: 1

示例:

[v, e, isloaded] = pyversion;
if isloaded
    disp('To change the Python version, restart MATLAB, then call pyversion.')
else
    pyversion 2.7
end

pyargs 语法:

kwa = pyargs(argKey,argValue)

kwa = pyargs(argKey,argValue) 创建一个 pyargs 关键字参数传递给 Python 函数

输入参数

argKey,argValue:Python 函数关键字参数可以指定一个或多个用逗号分隔的 argKey,argValue 参数对,其中 argKey 是 Python 函数的参数名(字符串或字符向量),argValue是对应的参数值,可以是任意类型。

另外可以使用函数参数列表来标识 argKey 和 argValue。 可以按任何顺序指定多个键和值对参数,如argKey1,argValue1,...,argKeyN,argValueN。

示例: 

'length',int32(2)

代码验证:

示例:

cal = py.calendar.TextCalendar;
formatmonth(cal,int32(2014),int32(12))

结果:

ans = 
  Python str (不带属性)。

          十二月 2014
    周一 周二 周三 周四 周五 周六 周日
     1  2  3  4  5  6  7
     8  9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30 31

查看函数功能:

py.help('calendar.TextCalendar.formatmonth')

结果:

Help on function formatmonth in calendar.TextCalendar:

calendar.TextCalendar.formatmonth = formatmonth(self, theyear, themonth, w=0, l=0)
    Return a month's calendar string (multi-line).

显示 formatmonth 函数的其它形式:

methods(cal,'-full')

可以找到:

lhs formatmonth(self, theyear, themonth, w, l, pyargs)

上式中,w 和 l 是可选参数,默认为 0。显式调用为:

formatmonth(cal,int32(2014),int32(12),pyargs('l',int32(2)))

结果:

ans = 
  Python str (不带属性)。

          十二月 2014
    
    周一 周二 周三 周四 周五 周六 周日
    
     1  2  3  4  5  6  7
    
     8  9 10 11 12 13 14
    
    15 16 17 18 19 20 21
    
    22 23 24 25 26 27 28
    
    29 30 31

Classes

matlab.exception.PyExeption

捕获 Python 异常的错误信息

matlab.exception.PyExeption类

处理来自 matlab.exception.PyException 对象的信息,以处理从 MATLAB 调用的 Python 方法抛出的 Python 错误。

 结构

e = matlab.exception.PyException(msgID,errMsg,excObj)

输入参数

msgID:信息标识符,为字符向量

errMsg:错误信息,为字符向量

ExcObj:异常对象,指定为导致异常的 pythonclass 

输出参数

e:matlab.exception.PyException 类的实例

属性

ExceptionObject:Python sys.exc_info 函数的结果。

对于 sys.exc_info(),可以查看

help('py.sys.exc_info')

结果:

exc_info() -> (type, value, traceback)

Return information about the most recent exception caught by an except
clause in the current stack frame or in an older stack frame.

 

代码验证

try
  py.list('x','y',1)
catch e
  e.message
  if(isa(e,'matlab.exception.PyException'))
    e.ExceptionObject
  end
end

结果: 

ans =
    'Python 错误 TypeError: list() takes at most 1 argument (3 given)'
ans = 
  Python tuple (不带属性)。

    (<class 'TypeError'>, TypeError('list() takes at most 1 argument (3 given)',), None)

注意事项:

通常情况下,不能显式构造 matlab.exception.PyException 对象。 每当 Python 抛出异常时,MATLAB 都会自动构造一个PyException 对象。 PyException 对象是原始 Python 异常的封装。

参考资料

1.MATLAB 官方文档:https://ww2.mathworks.cn/help/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值