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

 

 

本文转自CoderZh博客园博客,原文链接:http://www.cnblogs.com/coderzh/archive/2010/11/29/lupa.html,如需转载请自行联系原作者

 

你可能感兴趣的:(Lupa - Python中调用Lua)