首页 / LUA / python执行lua代码
python执行lua代码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python执行lua代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1683字,纯文字阅读大概需要3分钟。
内容图文
![python执行lua代码](/upload/InfoBanner/zyjiaocheng/1236/d4f45ebbc0dc476a92115fd2f2f64fc0.jpg)
楔子
下面我们来看看如何使用python来执行lua代码。如果了解lua的话,可能会感到器官,我们之前调用C、调用go,都是调用其编写的动态库。可lua是脚本语言啊,难道也可以写动态库吗?其实我们不是调用动态库,而是直接执行lua代码。
这时候可能又有人猜到了,python执行lua代码,本质上应该还是通过lua解释器来调用吧。答案不是的,因为python的执行lua代码的包自带了一个lua解释器,并且是以pyd的形式。
因为lua解释器非常的精简,自带lua解释器的pyd文件只有500k左右,并且这还是包含了内置的标准库。在lua5.3中,一些内置的模块全部嵌入到解释器里面了。
为什么使用lua
首先lua它的定位就是嵌入到其它语言中,比如C++,来提供一些扩展功能。因此lua不具备独立开发大型应用的功能,虽然它和python都是动态语言,但是lua中有JIT(即时编译)技术,可以将lua代码编译成非常快速的机器码,甚至某些时候比一些编译语言还要快,下面我们就来看看如何使用吧。
python执行lua代码,需要使用一个包:lupa,直接pip install lupa即可。
举个栗子
import lupa
# 实例化一个lua解释器
lua = lupa.LuaRuntime()
# 类似于python中的eval,将字符串当成代码来执行
# 同时返回其结果
print(lua.eval("1 + 1")) # 2
lua_func = lua.eval(
"""
function (f, str, substr)
return f(str, substr)
end
"""
)
print(lua_func(str.find, "hello satori", "satori")) # 6
try:
print(lua.eval("2 ** 2"))
except Exception as e:
print(e) # error loading code: [string "<python>"]:1: unexpected symbol near ‘*‘
# lua中的幂运算使用的是 ^
print(lua.eval("2 ^ 5")) # 32
# 如果就想使用python的语法的话
print(lua.eval("python.eval(‘2 ** 5‘)")) # 32
print(lua.eval("python.builtins.list(‘abc123‘)")) # [‘a‘, ‘b‘, ‘c‘, ‘1‘, ‘2‘, ‘3‘]
lua中的python对象
import lupa
lua = lupa.LuaRuntime()
lua_type = lua.globals().type # lua中的type函数
print(lua_type(1)) # number
print(lua_type("xxx")) # string
print(lua_type([])) # userdata
print(lua_type(())) # userdata
print(lua_type({})) # userdata
python的字典也可以放在lua里面
import lupa
lua = lupa.LuaRuntime()
lua_func = lua.eval(
"""
function (obj, key)
return obj[key]
end
"""
)
d = {"a": 1, "name": "satori"}
print(lua_func(d, "a")) # 1
print(lua_func(d, "name")) # satori
具体可以看https://pypi.org/project/lupa/0.18/
,写的比较详细了。
原文:https://www.cnblogs.com/traditional/p/13194862.html
内容总结
以上是互联网集市为您收集整理的python执行lua代码全部内容,希望文章能够帮你解决python执行lua代码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。