aardio 文档

py3.export 库模块帮助文档

重要说明

一、简介

当 py3.export() 作为对象构造函数使用时, 可用于导入参数指定的 aardio 对象为 Python 对象。 这种「代理对象」在 Python 中将保持对原始 aardio 对象的引用,也就是传址而非传值。

二、解决了什么问题

aardio 在与 Python 交互时, 默认除了布尔值、浮点数值、小于53位的整数值,布尔值转换为纯 aardio 值以外。 在 aardio 这些对象存为 pyObject,并保留对原始 Python 对象的引用。

而 aardio 对象在自动转换为 Python 对象时, 默认是传值而非传址,Python 中不保留对 aardio 对象的引用。

py3.export 的特别之处在于可以导出 aardio 模块到 Python, 在 Python 中引用与操作原始的 aardio 对象。

例如:

py3.export.aardio = {
    exportFunction = function(){

    } 
}

然后可以在 Python 中 import aardio,调用这个模块的所有成员函数。

三、py3.export( aardioObject ) 使用要点

py3.export( aardioObject ) 可以导出 aardio 中的 table,cdata,class,function 等 aardio 对象, 也可以自动导出 aardio 迭代器,适用于 Python 的 for 语句(aardio 迭代器在 Python 中返回 tuple 而非单个值)

对于整型数值 py3.export( number ) 默认转换为 Python 中的整型,而非浮点数。 其他类型(例如字符串) py3.export 不作转换直接返回。

Python 调用导出函数的返回值也会由 py3.export() 再次导出 。 Python 调用 aardio 导出函数的参数会自动调用 parseValue() 解析为纯 aardio 值。

四、使用限制

注意 py3.export 只能在 Python 启动线程中使用, 这是 Python 的限制与 aardio 无关!

aardio 可以支持真多线程, 也提供了 py3.lock 简化了 Python 全局锁操作,支持除 py3.export 以外的接口。 但是:py3.export 不支持多线程。

在非 Python 主线程下,py3.export 为 null 值, 使用 py3.mainThread 也可以检测是否 Python 主线程,

其实 Python 因为有全局锁 —— 无法实现真正的多线程, 调用 process.python 创建多进程来替代多线程可能更方便一些。

Markdown 格式