一种简单易懂的语言,具有易于集成的功能。

viper-lang的Python项目详细描述


Build StatusDiscord server invitePyPI version infoPyPI supported Python versions

毒蛇

Viper是一种简单易懂的语言,具有易于集成的功能。在

安装

Viper可用于python 3.6+。
毒蛇现在在pypi!它可以通过
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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法将自定义数据类型转换为字符串?   JavaLog4j和appender,这个Log4j定义正确吗?   用于换行的java Android Eclipse拆分   与某个方法关联的java启用/禁用JButton   java小部件列表视图加载视图   java国家/地区名称中的正则表达式   从Java调用Kotlin时,如何获取错误的行号?   java将视图传递给AsyncTask以访问findViewById   java SQL性能:多个绑定还是绑定到一个SQL变量以供重用?   BluetoothAdapter上的安卓 Java NullPointerException。isEnabled()   在clojure中取消引用java方法   JAVA网SocketException:IP_添加_成员身份失败(硬件筛选器不足?)   java从类对象的方法接收nullpointer异常   java使用for循环创建多个对象   java无法使用NTLM身份验证apache camel cxf   java Eclipse不喜欢@Override注释   java Spark SQL模拟红移(Oracle)“系统日期”或“当前日期”