Lupa - Python中调用Lua

Lupa将LuaJIT集成到了Python模块中,可以在Python中执行Lua代码。 比较有意思,也许以后用的着,记录一下。

基本用法:

复制代码
>>> import lupa
>>> from lupa import LuaRuntime
>>> lua = LuaRuntime()

>>> lua.eval('1+1')
2

>>> lua_func = lua.eval('function(f, n) return f(n) end')

>>> def py_add1(n): return n+1
>>> lua_func(py_add1, 2)
3

>>> lua.eval('python.eval(" 2 ** 2 ")'== 4
True
>>> lua.eval('python.builtins.str(4)'== '4'
True
复制代码


Lua中的Python对象 

复制代码
>>> lua_func = lua.eval('function(obj) return obj["get"] end')
>>> d = {'get' : 'got'}

>>> value = lua_func(d)
>>> value == 'got'
True

>>> dict_get = lua_func( lupa.as_attrgetter(d) )
>>> dict_get('get'== 'got'
True

>>> lua_func = lua.eval(
...     
'function(obj) return python.as_attrgetter(obj)["get"] end')
>>> dict_get = lua_func(d)
>>> dict_get('get'== 'got'
True
复制代码


Lua中的迭代循环:

复制代码
>>> lua_copy = lua.eval('''
...     function(L)
...         local t, i = {}, 1
...         for item in python.iter(L) do
...             t[i] = item
...             i = i + 1
...         end
...         return t
...     end
... 
''')

>>> table = lua_copy([1,2,3,4])
>>> len(table)
4
>>> table[1]   # Lua indexing
1
复制代码


Lua中的Table:

复制代码
>>> table = lua.eval('{10,20,30,40}')
>>> table[1]
10
>>> table[4]
40
>>> list(table)
[
1234]
>>> list(table.values())
[
10203040]
>>> len(table)
4

>>> mapping = lua.eval('{ [1] = -1 }')
>>> list(mapping)
[
1]

>>> mapping = lua.eval('{ [20] = -20; [3] = -3 }')
>>> mapping[20]
-20
>>> mapping[3]
-3
>>> sorted(mapping.values())
[
-20-3]
>>> sorted(mapping.items())
[(
3-3), (20-20)]

>>> mapping[-3= 3     # -3 used as key, not index!
>>> mapping[-3]
3
>>> sorted(mapping)
[
-3320]
>>> sorted(mapping.items())
[(
-33), (3-3), (20-20)]
复制代码


(等等……)

 

参考:

1. http://pypi.python.org/pypi/lupa/0.18

2. http://androguard.blogspot.com/2010/11/lupa-lua-from-python.html

 

 

posted @   CoderZh  阅读(14363)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2008-11-29 Zope学习汇总
点击右上角即可分享
微信分享提示