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)
[
1 2 3 4 ]
>>>  list(table.values())
[
10 20 30 40 ]
>>>  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)
[
- 3 3 20 ]
>>>  sorted(mapping.items())
[(
- 3 3 ), ( 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

 

 

作者:CoderZhCoderZh的技术博客 - 博客园
微博:http://t.sina.com.cn/coderzh
出处:http://coderzh.cnblogs.com
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值