初学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
相关文章
|
29天前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
30天前
|
存储 数据安全/隐私保护 索引
|
20天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
22天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
25天前
|
Python
python的时间操作time-函数介绍
【10月更文挑战第19天】 python模块time的函数使用介绍和使用。
27 4
|
26天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
19 1
|
9天前
|
Python
python中eval是什么意思?
语法“eval(表达式[, globals[, locals]])”。
16 0
|
26天前
|
安全 数据处理 数据安全/隐私保护
python中mod函数怎么用
通过这些实例,我们不仅掌握了Python中 `%`运算符的基础用法,还领略了它在解决实际问题中的灵活性和实用性。在诸如云计算服务提供商的技术栈中,类似的数学运算逻辑常被应用于数据处理、安全加密等关键领域,凸显了基础运算符在复杂系统中的不可或缺性。
18 0
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。