Python的eval小语句,大原理

Python中的eval语言,可以体现python做为解释型语言的灵活性,可以很方便地实现c语言不方便实现的功能。

eval就是把里边的字符串看成表达式,先解析表达式,再计算表达式的值,把结果传回去。下边这个简单的例子,就是计算3+4的值,可以直接调用变量计算,也可以用eval语句来计算,结果是一样的。

都是计算a+b结果都是7

在程序里直接调用表达式,和先把表达式写成字符串,再用eval来计算它的值。都可以计算出表达式的结果来,那设计编程语言时,设计这个eval语句有说明作用呢?

表达式可以包含变量和运算符,如果程序直接调用表达式,变量可以用循环语句变更数值,运算符在循环语句中无法直接变更。如果用eval语句,把表达式先写成字符串,字符串可以通过程序任意改变,所以运算符也可以任意改变,所以使用起来更灵活。

看下边这个例子,要实现用程序打印9*9乘法表。

先打印加法表,再打印乘法表

这个不调用eval语句,也可以轻松实现,只要循环变量就可以了。

如果增加要求,先打印9*9加法表,再打印9*9乘法表,再打印除法表。

这样,如果不调用eval语句的话,变量循环,就需要重复三次。

因为无法对运算符进行循环。

有了eval语句,那就轻松了,变量循环不用重复几次了。直接在原来的循环外边套一层运算符循环就可以了。

下边是程序,如果看着繁复的话,可以略过。最后边有github链接。可以慢慢看,也可以试运行。

这个是调用eval语句的实现方法,

象eval语句这样的功能,c语言等编译型语言是不好实现的。因为程序需要在运行前编译好,所以编译时表达式要先解析完,再翻译成二进制代码。表达式解析时运算符已经固定了,所以不能在已经编译好的二进制代码中替换运算符,只可以调用时改变变量的值。

而python是边解释边执行,表达式是运行时解析的,所以支持程序中动态变更运算符。

类似的还有c语言中不支持运行中,动态变更变量类型,而python可以,所以python更符合人自然的思维方式,所以编程速度更快。

以后要实现更高级的人工智能,在人不干预的情况下,实现程序的自我更新,自我演化,类似于python这种动态变更的思维,需要向更高层次发展。程序解释器本身的功能,如果可以在运行中自我变更和添加功能,那就神了。

或许可以从一个只能做简单事情的小程序,经过自我演化,人不干预,运行几个月后,经过自我更新,变成一个功能复杂的智能体。

例子程序的github链接:




转载请注明:http://www.aierlanlan.com/tzrz/3683.html