在Python中,exec()是一个十分有趣且使用的内置函数,不同于eval()函数只能执行计算数学表达式的结果的功能,exec()能够动态地执行复杂的Python代码,能够十分强大。具体的介绍可以参考官方文档: https://docs.python.org/3/library/functions.html#exec 。

本次分享讲简单聊聊exec()函数的用法,希望能给读者一点启示和参考。

首先是一个简单的小例子,代码如下:

i = 12

j = 13

exec("answer=i*j")

print("Answer is %s"%answer)

该代码的输出结果为:

Answer is 156

这表明第三句的exec()函数能够正确地执行Python代码,并且能将计算结果赋予answer变量,就像真正的Python代码一样。

那么,我们能不能让exec()函数执行一个复杂的Python代码呢?Why not?请看一下例子:

func = "def fact(n):\n\treturn 1 if n==1 else n*fact(n-1)"

exec(func)

a = fact(5)

print(a)

func为字符串,它是一个递归地计算整数阶乘的函数。因为exec()仅支持string和code object参数,所以我们要将该递归函数转化成一个字符串,当然,格式还是要Python代码的格式来,注意换行和缩进。刚才例子的输出结果为:

120

可能有些读者纳了闷了,这些代码不是直接能够在Python中执行吗,为何还要多此一举地把它写成字符串,并用exec()执行呢?笔者的答案是,刚才的例子只是为了演示exec()函数的基本用法,它的强大之处远不止于此。

在实际项目中,我们有些时候会将Python代码写入一些文件中,举个例子,如以下的eg.txt,它储存了我们想要的Python代码,如下:

def fact(n):

if n==1:

return 1

else:

return n*fact(n-1)

t = fact(6)

print(t)

请再次注意,这是一个txt格式的Python代码。那么,我们如何调用它呢?答案就是exec()函数,代码如下:

with open('E://eg.txt', 'r') as f:

s = f.read()

exec(s)

在上述代码中,我们先读取eg.txt文件的内容,再转交exec()函数执行,输出结果如下:

720

是不是有点棒呢?除了能执行string和code object外,还可以在exec()函数中加入参数,参数的传递可以写成字典(dict)形式。具体的使用方法可以参考下面的例子:

x = 10

expr = """

z = 30

sum = x + y + z

print(sum)

"""

def func():

y = 20

exec(expr)

exec(expr, {'x': 1, 'y': 2})

exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})

func()

其输出结果如下:

60

33

34

在expr语句中,有三个变量x,y,z,其中z值已给定,我们可以在exec()函数外指定x,y的值,也可以在exec()函数中以字典的形式指定x,y的值。在最后的语句中,我们给出了x,y,z的值,并且y值重复,exec()函数接收后面一个y值,且z值传递不起作用,因此输出结果为34.

---------------------

作者:剑与星辰

来源:CSDN

原文:https://blog.csdn.net/jclian91/article/details/80076512

版权声明:本文为博主原创文章,转载请附上博文链接!

python exec 函数_Python之浅谈exec函数相关推荐

  1. 计算机python指什么_python之浅谈计算机基础

    目录 一.计算机基础之编程 什么是编程语言 什么是编程 为什么要编程 二.计算机组成原理 1. 计算机五大组成 CPU 存储器 输入设备 输出设备 2.计算机五大部分补充 CPU相关 应用程序启动流程 ...

  2. softmax函数_干货 | 浅谈 Softmax 函数

    点击上方"视学算法",马上关注 来自 | 知乎 作者 | LinT链接丨https://zhuanlan.zhihu.com/p/79585726编辑 | 深度学习这件小事公众号仅 ...

  3. 浅谈云函数的代理IP利用面

    浅谈云函数的代理IP利用面 前言 本篇文章介绍如何通过 Serverless(云函数) 实现各种扫描器探测功能,以达到绕过态势感知.WAF等安全设备,增大蓝队研判人员溯源难度,实现封无可封,查无可查的 ...

  4. 浅谈async函数await用法

    async和await相信大家应该不陌生,让异步处理变得更友好. 其实这玩意儿就是个Generator的语法糖,想深入学习得去看看Generator,不然你可能只停留在会用的阶段. 用法很简单,看代码 ...

  5. Python之浅谈exec函数

      在Python中,exec()是一个十分有趣且使用的内置函数,不同于eval()函数只能执行计算数学表达式的结果的功能,exec()能够动态地执行复杂的Python代码,能够十分强大.具体的介绍可 ...

  6. python eval函数_Python中eval与exec区别 | 萧小寒

    摘要 学过JavaScript的人都知道,在JS中有一个函数叫内置函数叫eval.eval函数可计算某个字符串,并执行其中的的JavaScript代码.正是因为这个特性,所以现在很多教材都不推荐使用这 ...

  7. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  8. python 共享内存变量_浅谈python多进程共享变量Value的使用tips

    前言: 在使用tornado的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value(对于该变量的具体细节请查阅相关资料).在根据网上资料使用Value时,由于 ...

  9. python数据类型转换原因_浅谈Python数据类型之间的转换

    Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 compl ...

  10. python一共有多少个内置函数_Python 35个内置函数,你都ok吗?

    Python一共有60多个内置函数,今天先梳理其中35 个 1 abs() 绝对值或复数的模 In [1]: abs(-6) Out[1]: 6 . 2 all() 接受一个迭代器,如果迭代器的所有元 ...

最新文章

  1. Python3中生成器介绍
  2. 亮度翻转_ROG幻13翻转本发布;联想IdeaPad 5G轻薄本即将上线
  3. go语言笔记——append底层实现和Cpp vector无异,只是有返回值,double后返回了新的vector地址而已...
  4. 验证码生成java_JAVA-验证码生成
  5. vsftp实现只能上传不能下载、删除权限配置
  6. 机器学习导论(张志华):多元高斯分布及应用
  7. 图片显示时加水印(不改变原图片)
  8. JVM常用的参数配置
  9. Linux经典实用的使用技巧33则和常用60个命令
  10. 你好,弗朗索瓦丝·萨冈
  11. 模板:二维凸包(计算几何)
  12. 在本地实现完成多台服务器之间文件拷贝
  13. 使用ASP .NET (C#) 產生PDF檔的好幫手—iTextSharp library (上)
  14. jmu-枚举WeekDay
  15. 网盘中搭建git服务
  16. C++ 从入门到入土(English Version)Section 8 : Recursion, Searching and Backtracking
  17. NVM:使用nvm安装管理node版本
  18. 简单了解Java语言
  19. ubuntu虚拟机联网配置
  20. ceph osd pg 状态介绍

热门文章

  1. 计算平均指令时间_上海原油期货将推出TAS指令
  2. cannot allocate memory in static TLS block问题记录
  3. 【新书推荐】大唐的裂变(套装共5册)(王澄明等著)
  4. 基于python的图像灰度值处理(opencv)
  5. 99%的手机Root方法都在这里
  6. iOS 新浪新闻首页卡片滚动特效实现
  7. 中考计算机考试不合格会怎么样,中考考试细节:信息技术不合格 可申请重考1次...
  8. layui 上传图片 返回图片地址
  9. Hulugans看什么 | 50多部迪士尼经典动画片带你重温童年
  10. 为什么网页游戏不停开新服务器,网页游戏为什么要不断开新服?