eval() 的用法,相信网上一搜一大片,这里我主要分享一下数字字符串连接 * / + 区别。
先介绍一下eval()函数的作用,后续例子会使用到eval()函数。
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
注意:eval()函数只能转换数字型字符串,无法转换汉字及字母。
m=eval('abc')
n=eval('撒野')
--------------------
Traceback (most recent call last):
File "/usercode/file.py", line 3, in <module>
m=eval('abc')
File "<string>", line 1, in <module>
NameError: name 'abc' is not defined
一、字符串
字符串string 分为文字型字符串和数字型字符串,由引号括起来的称为字符串。eval()函数属于数字型字符串转换函数,eval()函数可以将小数型或整数型字符串转换为对应类型的数字。
二、数字字符串连接 * / + 区别
本篇文章主要分享数字字符串连接 * / + 区别。
1)字符串只含有运算符 " + " 号
a. 当 “ + ” 号在引号内
x="99+45"
y=eval(x)
print('字符串 x=',x,"\neval转换后 y=",y)
输出结果:
字符串 x= 99+45
eval转换后 y= 144
从输出结果可以看出,x 这个字符串中虽然有 ” +“ 号,但 x 的值是直接将引号 ’ ” ' 中的运算式进行了输出。eval()函数就是直接的进行四则运算。
b. 当 “ + ” 号在引号外
注意:此时 “ + ” 号两边都必须是字符串,否则会报错!
x="9*3"+2
y=eval(x)
print('字符串 x=',x,"\neval转换后 y=",y)
-------------------------------------------
Traceback (most recent call last):
File "/usercode/file.py", line 4, in <module>
x="9*3"+2
TypeError: can only concatenate str (not "int") to str
x="93"+'45'
y="9+3"+'45'
m=eval(x)
n=eval(y)
print('字符串 x=',x,"\neval转换后 m=",m)
print()
print('字符串 y=',y,"\neval转换后 n=",n)
输出结果:
字符串 x= 9345
eval转换后 m= 9345
字符串 y= 9+345
eval转换后 n= 354
由输出结果可得,x 和 y 的值是将 ” + “ 号左右两边的数字或表达式直接进行连接输出的," + " 在字符串中是作为一个拼接符号,而不是传统四则运算里面的 ” + “ 号做加法运算。eval()函数在对 x 和 y 进行转换时,直接进行四则运算。
小结:+ 号的作用,连接符号两侧字符串中的内容,中间不需要加入任何符号。
2)字符串含只有运算符 " * " 号
a. 当 “ * ” 号在引号内
x="99*45"
y=eval(x)
print('字符串 x=',x,"\neval转换后 y=",y)
输出结果:
字符串 x= 99*45
eval转换后 y= 4455
从输出结果可以看出,x 这个字符串中虽然有 ” * “ 号,但 x 的值是直接将引号 ’ ” ' 中的运算式进行了输出。eval()函数在对 x 进行转换时,直接进行四则运算。
b. 当 “ * ” 号在引号外
注意:此时 “ * ” 号连接的左右两边必有一边是数值,不能两边都是字符串,否则会报错!
x="99"*'5'
y=eval(x)
print('字符串 x=',x,"\neval转换后 y=",y)
-----------------------------------------------
Traceback (most recent call last):
File "/usercode/file.py", line 3, in <module>
x="99"*'5'
TypeError: can't multiply sequence by non-int of type 'str'
x="93"*5
y="9+3"*5
m=eval(x)
n=eval(y)
print('字符串 x=',x,"\neval转换后 m=",m)
print()
print('字符串 y=',y,"\neval转换后 n=",n)
输出结果:
字符串 x= 9393939393
eval转换后 m= 9393939393
字符串 y= 9+39+39+39+39+3
eval转换后 n= 168
由输出结果可得,x 和 y 的值是字符串引号内的数字或表达式直接复制5次可得,这里的 “ * ” 号作为字符串的复制符号,“ * ” 后面的数值5是字符串复制的次数。eval()函数在对 x 和 y 进行转换时候,直接进行四则运算。
小结:* 号的作用,复制字符串中的内容,复制出来的多个内容直接进行连接,中间不需要加入任何符号。
3)字符串中既有 “ * ” 号又有 “ + ” 号
a. 当 “ * ”、 “ +” 号都在引号内
x="9*3+2"
y=eval(x)
print('字符串 x=',x,"\neval转换后 y=",y)
输出结果:
字符串 x= 9*3+2
eval转换后 y= 29
分析:和上面1)/2)中的 a 小点一样,x都是正常输出引号内的内容。eval()函数转换是正常的四则运行。
b. 当“ * ” 、“ +” 号在引号外
x="9"*2+'5'
y="9*3"+'5'*2
m=eval(x)
n=eval(y)
print('字符串 x=',x,"\neval转换后 m=",m)
print()
print('字符串 y=',y,"\neval转换后 n=",n)
输出结果:
字符串 x= 995
eval转换后 m= 995
字符串 y= 9*355
eval转换后 n= 3195
由输出结果可得,x 的值是从左往右依次计算,此时 ” * “是在 ” + “ 前;y 的值是先算的 " * ",再算的 ” + “ ,此时 ” * “是在 ” + “ 后。从而得出结论如下:
* / + 同时出现在数字型字符串中时,* (复制)> + (连接) 的。
最后,到这里结束啦!(可能要自己找重点啦)