每日 python 学习之——compile()函数

本文介绍了Python的compile()函数,用于将源代码编译为代码或AST对象。讲解了参数source、filename、mode以及可选参数flags和dont_inherit的含义。文章提到了在不同Python版本中compile()的差异,并解释了ATS(抽象语法树)和编译模式如'exec'、'eval'、'single'。同时,对比了exec和eval()函数的区别和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

compile(source, filename, mode[, flags[, dont_inherit]])

说明:将 source 编译为代码或 ATS 对象。代码对象能够通过 exec 语句来执行或者 eval() 进行求值。

参数:

  • source:字符串或者 ATS 对象。
  • filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
  • mode:指定编译代码的种类。可以指定为 'exec', 'eval', 'single'。
  • flag 和 dont_inherit:可选参数

版本:在 python2.3、2.6、2.7、3.2 中均有不同,使用时要引起注意,兼容 python3


  1. ATS 对象:Abstract Syntax Tree,抽象语法树,是源代码语法结构的一种抽象表示。https://zhuanlan.zhihu.com/p/26988179
  2. exec 语句:exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。需要说明的是在 Python2 中exec不是函数,而是一个内置语句(statement)。
  3. eval() 函数:eval() 函数用来执行一个字符串表达式,并返回表达式的值。

在 python2.7 中的试用:

>>> code = 'for i in range(5): print i'
>>> exec code
0
1
2
3
4
>>> eval(code)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    for i in range(10): print i
      ^
SyntaxError: invalid syntax
>>> cmpcode = compile(code, '', 'exec')
>>> exec cmpcode
0
1
2
3
4
>>> eval(cmpcode)
0
1
2
3
4
>>> cmpcode
<code object <module> at 0x107843930, file "", line 1>
>>> str = '3 * 4 + 5'
>>> cmpstr = compile(str, '', 'eval')
>>> eval(cmpstr)
17
>>> exec cmpstr

 没太明白这个函数的使用场景,有什么好处,回头知道了再来更新,也欢迎知道的同学评论~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值