80. Python eval函数-执行一个字符串表达式并返回执行结果

80. Python eval函数-执行一个字符串表达式并返回执行结果

文章目录

  • 80. Python eval函数-执行一个字符串表达式并返回执行结果
    • 1. 知识回顾
    • 2. eval函数
    • 3. eval函数的语法
    • 4. 返回字符串表达式的计算结果
    • 5. eval实现数据类型之间的转换
    • 6. 知识总结

1. 知识回顾

将字符串转换成能计算的数据,我们学过2个函数。

int函数:将整数类型的字符串转换为整数。

float函数:将小数类型的字符串转换为浮点数。

我们之前在学数据转换的时候,特别强调过:

小数类型的数据不能直接使用int函数进行转换。

【将整数型字符串转换为整数】

x = '15'
print(int(x))
print(type(int(x)))

【终端输出】

15

变量x原本是字符串类型,int函数将其转换成整数类型。

int函数的作用是脱去字符串的引号。

【小数类型的字符串不能直接用int函数】

x = '15.5'
print(int(x))
print(type(int(x)))

【终端输出】

ValueError: invalid literal for int() with base 10: '15.5'

这里的变量x也是字符串类型,但它是小数类型的字符串,就不能直接使用int函数。

运行代码程序报错:invalid literal for int() with base 10: '15.5'

【将整数类型的数据转换成浮点数】

x = '15'
print(float(x))
print(type(int(x)))

【终端输出】

15.0

变量x原本是字符串类型,float函数将其转换成浮点数类型。

float函数的作用是脱去字符串的引号。

原来字符的数据为整数15,使用float函数后整数15变成了浮点数15.0

float函数改变了原有的字符串里的数据类型。

【将小数类型的数据转换成浮点数】

x = '15.5'
print(float(x))
print(type(int(x)))

【终端输出】

15.5

变量x原本是字符串类型,float函数将其转换成浮点数类型。

float函数的作用是脱去字符串的引号。

【使用int和float函数的缺点】

  1. 需要先判断字符串里的数据是整数还是小数。

  2. 函数可能会改变原有的数据类型。

我们今天来学一个函数,它不用考虑字符串里的数值是整数还是小数,也不会改变字符串里的数据类型。

2. eval函数

【eval百科解释】

eval函数用于将括号内的字符串视为语句并运行。

【功能】

官方定义eval函数的功能是:执行一个字符串表达式,并返回表达式的值。

【我的概括】

eval函数的功能就是脱去字符串的引号。

  1. 如果eval函数的参数是运算表达式,那输出该表达式的计算结果。

  2. 如果eval函数的参数仅仅是一个数值的字符串,那脱去字符串的引号,直接输出该数值。整数就输出整数,浮点数就输出浮点数。

【重点分析】

上面的语句我们可以提取到3个关键信息:

  1. 字符串

  2. 表达式

  3. 返回一个值

大家学习的时候注意找到重点哦!!!

3. eval函数的语法

eval(expression, globals=None, locals= None)

expression [ɪkˈspreʃn]:表达。

globals:全局变量。

locals ['ləʊklz]:局部变量。

none[nʌn]:没有。

【eval( )函数由3部分组成】

1.函数名:eval

2.英文圆括号:( )

3.参数

参数expression:字符串类型的表达式。

参数globals:可选参数,变量作用域,全局命名空间,如果指定该参数,必须是一个字典对象。

参数locals:可选参数,变量作用域,局部命名空间,如果指定该参数,可以是任何映射对象。

【返回值】

返回表达式的计算结果,或字符串里的数值。

【碎碎念】

学到这里大家对Python的函数应该有一个系统的理解。

Python函数通常都具有下面几个特征:

  1. 函数名。

  2. 函数名后都需要紧跟一对英文圆括号( )

  3. 函数的参数通常都有必须参数和可选参数2种。

  4. 部分参数通常都有默认值。

  5. 函数通常都有返回,有时候返回的是值,有时候返回的是对象。

大家看我的笔记会发现我不是单纯的再讲一个知识点。

我会贯穿Python的语法结构以及编写的逻辑思维。

大家刚开始学习学的是单纯知识点,后期再学习应该就把重点放在语法结构和逻辑思维上。

学一个知识点不是目的,我们要学的是一种能够自学的能力。

Python中的函数、模块成百上千,且不断更新,我写10年都不一定写得完。

但大家基础入门后,可以花一点点时间在语法结构和逻辑思维上,这样后期你会有质的提升。

当你看完源代码你就能懂这个函数、模块要实现的功能,这就是学习能力。

例如,今天你接触一个新的函数,你就应该想到他会有几个参数,哪些参数是必须的,哪些参数是可选的,函数返回的是什么。

4. 返回字符串表达式的计算结果

【表达式的结果为整数】

print("1+2+3+4+5")

【终端输出】

1+2+3+4+5

print函数括号中的内容有引号,有引号则数据类型为字符串。

print会原样输出字符串,因此运行程序后输出的结果为"1+2+3+4+5"

print(eval("1+2+3+4+5"))

【终端输出】

15

加了eval函数,则输出的就是一个值。

"1+2+3+4+5"就是eval函数的字符串表达式。即:expression="1+2+3+4+5"

我们在print函数中学过,字符串是不能进行运算的,字符串只能进行拼接。

但有eval函数则不一样。

eval函数会识别括号中的内容为一个字符串表达式,会返回该表达式的计算结果。

因此输出的结果为15

print(type(eval("1+2+3+4+5")))

【终端输出】


class 数据表示数据类型。

int表示数据类型为整数。

如果字符串表达式的计算结果为整数,则eval函数返回的数据类型为整数。

【表达式的结果为浮点数】

print(eval("1.1+2.1+3.3+4.1+5.1"))
print(type(eval("1.1+2.1+3.3+4.1+5.1")))

【终端输出】

15.7

如果字符串表达式的计算结果为浮点数,则eval函数返回的数据类型为浮点数。

【表达式为除法】

print(eval("1000/2"))

【终端输出】

500.0

"1000/2"是eval函数的字符串表达式。即:expression="1000/2"

【表达式为乘法】

print(eval("50*2"))

【终端输出】

100

"50*2"是eval函数的字符串表达式。即:expression="50*2"

【实操练习】

  1. 用input函数从终端输入一个表达:10*10

  2. 输出这个两个数的乘积。

x = input ("请输入一个表达式:")
print(eval(x))

【终端输出】

100

注意expression参数的值要是字符串数据类型。

input函数接收的数据类型刚好就是字符串类型。

5. eval实现数据类型之间的转换

a = "520"
print("a的数据类型:", type(a))
print(eval(a))
print("eval后a的数据类型:", type(eval(a)))

【终端输出】

a的数据类型: 
520
eval后a的数据类型: 

a的数据类型为字符串。

字符串里的数据类型为整数。

eval函数可以将a的引号去掉,将其转换为整数。

a = "3.14"
print("a的数据类型:", type(a))
print(eval(a))
print("eval后a的数据类型:", type(eval(a)))

【终端输出】

a的数据类型: 
3.14
eval后a的数据类型: 

a的数据类型为字符串。

字符串里的数据类型为浮点数。

eval函数将a的引号去掉,将其转换为浮点数。

a = "[2, 4, 6, 8]"
print("a的数据类型:", type(a))
print(eval(a))
print("eval后a的数据类型:", type(eval(a)))

【终端输出】

a的数据类型: 
[2, 4, 6, 8]
eval后a的数据类型: 

a的数据类型为字符串。

字符串里的数据类型为列表。

eval函数将a的引号去掉,将其转换为列表。

a = "(2, 4, 6, 8)"
print("a的数据类型:", type(a))
print(eval(a))
print("eval后a的数据类型:", type(eval(a)))

【终端输出】

a的数据类型: 
(2, 4, 6, 8)
eval后a的数据类型: 

a的数据类型为字符串。

字符串里的数据类型为元组。

eval函数将a的引号去掉,将其转换为元组。

通过上面的输出结果,我们可以发现eval的作用其实就是脱去字符串的引号,保留字符串里的内容的数据。

6. 知识总结

【功能】eval函数用于执行一个字符串表达式,并返回表达式的值。

【函数语法】

eval(expression, globals=None, locals= None)

参数expression:字符串类型表达式。

参数globals:可选参数,变量作用域,全局命名空间,如果指定该参数,必须是一个字典对象。

参数locals:可选参数,变量作用于,局部命名空间,如果指定该参数,可以是任何映射对象。

【代码总结】

print("返回值:", eval("1.1+2.1+3.3+4.1+5.1"))
print("返回的数据类型:",type(eval("1.1+2.1+3.3+4.1+5.1")))

a = "520"
print("返回值:", eval(a))
print("返回的数据类型:",type(eval(a)))

a = "3.14"
print("返回值:",eval(a))
print("返回的数据类型:",type(eval(a)))

a = "[2, 4, 6, 8]"
print("返回值:",eval(a))
print("返回的数据类型:",type(eval(a)))

a = "(2, 4, 6, 8)"
print("返回值:",eval(a))
print("返回的数据类型:",type(eval(a)))

【终端输出】

返回值: 15.7
返回的数据类型: 
返回值: 520
返回的数据类型: 
返回值: 3.14
返回的数据类型: 
返回值: [2, 4, 6, 8]
返回的数据类型: 
返回值: (2, 4, 6, 8)
返回的数据类型: 

【备注】
剩下的2个参数以后用到的时候再介绍。

你可能感兴趣的:(python,算法,数据结构)