Python中数字字符串连接 * / + 区别


 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 的值是先算的 " * ",再算的 ” + “ ,此时 ” * “是在 ” + “ 后。从而得出结论如下:

 * / + 同时出现在数字型字符串中时,* (复制)> + (连接) 的。

最后,到这里结束啦!(可能要自己找重点啦)


版权声明:本文为qq_33907703原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。