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

举报
小生凡一 发表于 2021/10/15 23:57:22 2021/10/15
【摘要】 今天老师布置了一个作业,很简单的几行代码。但是也算让我彻底知道了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)))

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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

  
 
  • 1
  • 2
  • 3
  • 4

我们从这里可以看到s和eval(s1)的效果是一样的,而s就仅仅比s1多了一个引号。
所以我们可以知道的就是eval(s1)的返回值就是返回s当中的值,注意此时都是字符串的形式。我们可以验证一下。

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

  
 
  • 1
  • 2
  • 3
  • 4

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

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

  
 
  • 1
  • 2
  • 3
  • 4

那么就是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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

就是这样啦嘻嘻收工!
最后说一下,本人只是大一新生,初学编程,也是刚接触Python不久,这篇文章也只是我自己看书做题上网查了之后,自己思考的结果。如果我有什么地方不正确的话,恳请各位大佬斧正!谢谢!

文章来源: blog.csdn.net,作者:小生凡一,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_45304503/article/details/104432543

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。