初学Python之eval函数的嵌套eval中的eval

简介: 今天老师布置了一个作业,很简单的几行代码。但是也算让我彻底知道了Python中的eval这个函数了,因为之前学过一点Python,以为自己已经知道了eval函数的用法(还以为这是用来自动识别输入类型,可以用来输入字典)结果啪啪打脸了。呜呜呜。。。

今天老师布置了一个作业,很简单的几行代码。但是也算让我彻底知道了Python中的eval这个函数了,因为之前学过一点Python,以为自己已经知道了eval函数的用法(还以为这是用来自动识别输入类型,可以用来输入字典)

结果啪啪打脸了。呜呜呜。。。


首先明确一下eval的用法:

value=eval(<字符串>)

读取字符串参数的内容

1.如果该字符串的内容为包含运算符的python表达式,则计算该表达式并返回结果。

2.若该字符串参数的内容为变量,则返回该变量的值。

3.若该字符串的内容为常量,则返回该常量。


题目如下:

在Python窗口界面的shell window执行下列代码,观察输出结果,掌握**eval()**函数的使用方法。(没办法老师要求用shell)

>>> s = ‘3**3**2’
>>> s1 = ‘s’
>>> s1
>>> print(s1)
>>> print(eval(s1))
>>> print(eval(eval(s1)))

PS:这是老师在word里面打出来的,所以就是这个样子啦.

(<<<也是老师自己打出来的)

我一开始看见了eval(eval()),确实人都有点傻了,很是奇怪,反应了一会才反应过来。

首先我们所以知道的eval函数的返回值是返回表达式的计算结果

那么现在我们先明白这些变量的值

s=‘3 ** 3 ** 2’,再将‘s’的值赋给s1,那么我认为此时就可以相当于字符串中的字符串

那么s1就可以相当于‘ ‘3 ** 3 ** 2’ ’(为了和双引号分开,我在两个单引号中加了个空格),此时的s1就有两层,在我的理解看来,此时使用eval函数就像剥开洋葱一样,返回其中所蕴含的值。

>>> s='3**3**2'
>>> s1='s'
>>> s1
's'
>>> s
'3**3**2'
>>> print(s1)
s

s1是代表s这个字符串,Python中的字符串是有单引号‘’或是双引号“”的,而输出则就是将其字符串输出出来,不需要带引号。

>>> print(eval(s1))
3**3**2
>>> print(s)
3**3**2

我们从这里可以看到s和eval(s1)的效果是一样的,而s就仅仅比s1多了一个引号。

所以我们可以知道的就是eval(s1)的返回值就是返回s当中的值,注意此时都是字符串的形式。我们可以验证一下。

>>> isinstance(s,str)
True
>>> isinstance(s1,str)
True

那么问题来了,eval(eval())呢?

现在问题就变得很简单了。eval(s1)就是‘3 ** 3 ** 2’,再对其进行eval就是返回这个表达式的结果了。PS:这个幂运算的结合性是从右往左的呦~

>>> print(eval(eval(s1)))
19683
>>> print(eval(s))
19683

那么就是3的9次方啦

总代码如下:

>>> s='3**3**2'
>>> s1='s'
>>> s1
's'
>>> print(s1)
s
>>> print(eval(s1))
3**3**2
>>> print(s)
3**3**2
>>> print(eval(eval(s1)))
19683
>>> print(eval(s))
19683

但是这里能如果你想有一次性输出的话呢,可以在每一句的后面加一个;\即可,如下图所示:

>>> s='3**3**2';\
   s1='s';\
   print(s1);\
   print(eval(s1));\
   print(eval(eval(s1)))
s
3**3**2
19683
相关文章
|
2月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
148 67
|
14天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
26 3
|
18天前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
28 2
|
3天前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
7 0
|
1月前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
57 18
|
1月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
73 8
|
1月前
|
Python
Python中的函数
Python中的函数
51 8
|
Python
12.1、python内置函数——eval、exec、compile
内置函数——eval、exec、compile eval() 将字符串类型的代码执行并返回结果 print(eval('1+2+3+4')) exec()将自字符串类型的代码执行 print(exec("1+2+3+4"))exec("print('hello,world')") code = ''' import os print(os.
1126 0
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。