aardio 文档
aardio 范例: 调用 aardio 对象
//调用 aardio 对象
import winex;
import console.int;
import py3;
//可以这样预先指定 Python 全局变量
py3.main.console = py3.export(console);////用 py3.export(com) 直接将 aardio 对象完整导入 Python
var pyCode = /**
def testPy(winex):
# 在 Python 里直接使用 aardio 对象,简单得就像在 aardio 里调用 aardio 对象
console.log("在 Python 里调用 aardio 库函数")
# 还能支持 aardio 创建的迭代器
for(hwnd,title,threadId,processId) in winex.each():
console.log(title)
**/
//执行 Python 代码
py3.exec( pyCode );
//调用 Python 函数
py3.main.testPy(
py3.export(winex) //也可以通过参数将 aardio 对象导出给 Python
);
/**details(重要说明)
一、简介
-----------------------------------------------------------
当 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 创建多进程来替代多线程可能更方便一些。
end details**/
Markdown 格式