一种简单易懂的语言,具有易于集成的功能。
viper-lang的Python项目详细描述
毒蛇
Viper是一种简单易懂的语言,具有易于集成的功能。在
安装
python -m pip install viper-lang
版本可以通过dev安装
^{pr2}$并且可以导入到您的项目中
importviper
Python用法
要在应用程序中使用Viper,请使用两种评估方法,毒蛇评估以及viper.eval_文件功能。这些功能 是异步的,必须使用asyncio运行,无论是通过await关键字,还是类似于异步运行。可以在here找到异步文档。在
importviperimportasynciocode='$myvar = "hi"'asyncio.run(viper.eval(code))
或者
importasyncioimportviperasyncio.run(viper.eval_file("myfile.vp"))
您还可以传递要注入到命名空间中的默认值
importasyncioimportviperasyncio.run(viper.eval("say($myvar)",{"myvar":"blue"}))
传递默认值的另一种方法是将Viper名称空间传递给eval
importasyncioimportvipernamespace=viper.VPNamespace()namespace['myvar']="blue"# creating a static variablenamespace['mystaticvar']="red",Trueasyncio.run(viper.eval("say($myvar)",namespace=namespace))
通过将safe关键字传递到毒蛇评估/viper.eval_文件。在
importasyncioimportviperasyncio.run(viper.eval('$myvar = read("names.txt")',safe=True))# raises VP_NameError,# as the variable `read` doesnt exist due to safe mode
说到错误,Viper堆栈跟踪现在是可用的。可以通过打印出error.format_堆栈()。在
importasyncioimportvipertry:asyncio.run(viper.eval("blah"))exceptviper.VP_Errorase:print(e.format_stack())
将打印:
File<string>,top-level:blahSyntaxError:blah
语法
变量
变量的设置与python中类似,但在名称前面有一个美元符号($)。以同样的方式检索变量, 前面有美元符号($)的名称。变量可以标记为static,方法是将static放在变量前面 姓名。静态变量不能被python代码中的干预更改
$myvar = "red" static $mystaticvar = "blue" $mystaticvar = "hello" <-- StaticError
功能
函数可以在python中创建并传递给命名空间,或者在viper中创建。在viper中创建的函数遵循以下语法
func myfunc() { return }
非常类似于python,但有一些关键的区别。您可以将static`放在`func关键字前面,将函数标记为static, 防止它被重新分配。在
static func myfunc() { return }
参数如下所示
func myfunc(argument1, argument2) { return }
可以通过插入问号(?)使参数成为可选参数在参数名前面,E.x
func myfunc(argument1, ?optional_arg1) { return }
未给出的可选参数将作为none对象传递(请注意,这与pythonnone不同)
函数的调用与python中的相同:
func myfunc() { return } myfunc()
内部构件
viper内部有几个可用的函数。它们可以在毒蛇身上看到/内置.py文件。 在这个文件中有两个未定义的内置变量namespace变量,它指向全局命名空间。 还有true/false,它们是毒蛇布尔(又称python布尔型)。在
一个完整的例子
static $globalvar = "hi" func name(arg, ?arg1) { $var = 1 if ($var is 1) { $var += 1 } else if ($var is not 1) { $var = "stuff" } else { $var = none } } func main() { say("hi") name("hello") } main()
定制毒蛇
大多数毒蛇都可以通过编辑毒蛇来编辑/关键词.py文件。大多数选项都是不言自明的。这些也可以在运行时通过导入关键字文件和更改字典来更改
importviper.keywordsviper.keywords.VIPER_KEYWORDS['VIPER_VARMARKER']="%"# variables will now be accessed with % instead of $
在不和.py集成
为了让事情更简单,我们的毒蛇外部不和谐模块使安全对象很容易传递给毒蛇,但可接近性有限, 容易通过不和.py模型(间接)给你的用户,不用担心泄露你的令牌和/或其他敏感数据。只需传递一个不和.py为其各自的建模外部不和谐对应项,并将其传递给viper命名空间
importviperfromviper.extsimportdiscordasviper_discordasyncdefon_message(message):namespace=viper.VPNamespace()safe_message=viper_discord.SafeAccessMessage(message)namespace['msg']=safe_messageawaitviper.eval('say($msg.channel.send("hi"))',namespace=namespace,safe=True)
- 项目
标签: