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,如需转载请自行联系原作者

 

目录
打赏
0
0
0
0
19
分享
相关文章
Python 调用Zoomeye搜索接口
钟馗之眼是一个强大的搜索引擎,不同于百度谷歌,它主要收集网络中的主机,服务等信息,国内互联网安全厂商知道创宇开放了他们的海量数据库,对之前沉淀的数据进行了整合、整理,打造了一个名符其实的网络空间搜索引擎ZoomEye,运用Python接口可以灵活的实现数据采集。
314 0
Python 调用Zoomeye搜索接口
python接口自动化(三十四)-封装与调用--函数和参数化(详解)
参数化的思维只需记住一点:不要写死,这样就便于维护,否则就会牵一发而动全身,一处修改导致处处修改,不便于维护。
1219 1
python接口自动化(三十四)-封装与调用--函数和参数化(详解)
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(下)
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(下)
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(上)
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(上)
python调用redis-cell(CL.THROTTLE)
python调用redis-cell(CL.THROTTLE)
265 0
python调用redis-cell(CL.THROTTLE)
linux qt 项目中QProcess调用命令行命令执行python脚本
linux qt 项目中QProcess调用命令行命令执行python脚本
linux qt 项目中QProcess调用命令行命令执行python脚本
python接口自动化(三十七)-封装与调用--读取excel 数据(详解)
在进行软件接口测试或设计自动化测试框架时,一个不比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xlrd、xlwt开源包来读写excel。例如:当我们登录的账号有多个的时候,我们一般用 excel 存放测试数据,本篇文章介绍,python 读取excel 方法,并保存为字典格式。
413 0
python接口自动化(三十七)-封装与调用--读取excel 数据(详解)
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
上一篇已经给大家都介绍过了流程类接口关联,但是由于博客的登录机制改变,所以没有办法给小伙伴们实战演练一下,那么这篇就按照上一篇计划的用jenkins来给小伙伴们演示一下流程类接口的封装和调用,其实很简单,就是用上一篇和前边这篇传送门的代码稍稍修改即可。不知道你自己练习了么,如果练习了,可以看看和我有什么不同,没练习的看看自己思路和我有啥不一样。好了废话少说进入主题
214 0
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
流程相关的接口,主要用 session 关联,如果写成函数(如上篇),s 参数每个函数都要带,每个函数多个参数,这时候封装成类会更方便。在这里我们还是以博客园为例,带着小伙伴们实践一下。
411 0
python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
python 外部传参程序编写并打包exe及其调用方式
每种编程语言相互联系又相互独立,为此使用某种编程语言编写的程序都能够独立封装和生成自己的运行程序exe或者其他的API接口。而对于这样的运行程序目的往往不是用于双击使其运行的,而是通过外部传入的参数运行其中的内核函数达到某种目的的。所以在此研究python如何编写外部传参的程序,并将其封装未exe便于外部使用。
890 0
python 外部传参程序编写并打包exe及其调用方式

热门文章

最新文章