首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

python笔记75-compile() 函数将字符串转字节代码

compile 函数返回结果 1、如果编译通过,结果可以生成字节码(类型code)或者AST(抽像语法树),字节码可以使用函数exec()或eval来执行,而AST可以使用eval()来继续编译(关于AST的内容本节都不介绍,ATS 对象:Abstract Syntax Tree,抽象语法树,是源代码语法结构的一种抽象表示。关于抽象语法树大家可以参考:https://zhuanlan.zhihu.com/p/26988179; 2、exec 语句:exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。需要说明的是在 Python2 中exec不是函数,而是一个内置语句; 3、如果编译的源码不合法,此函数会触发 SyntaxError 异常;如果源码包含 空字节(空字符串),则3.5版本以前会触发 ValueError 异常,3.5版本后则不会触发可以编译通过并执行。注意: 1) 在 ‘single’ 或 ‘eval’ 模式编译多行代码字符串(这些串必须是一个完整语句或表达式而不是多个语句或表达式)时,输入必须以至少一个换行符结尾; 2)如果编译足够大或者足够复杂的字符串成 AST 对象时,Python 解释器会因为 Python AST 编译器的栈深度限制而崩溃

03

Latex中bib参考文献的编译

编译四次涉及到 LaTeX 和 BibTeX 协同工作时的原理。本质上,在 \bibliography 命令处出现的参考文献列表,是从后缀为 .bbl 的文件读取的;而 .bbl 文件则是由 BibTeX 编译后缀为 .aux 的文件之后产生的;.aux 文件则是 (pdf/Xe)LaTeX 编译后缀为 .tex 的文件产生的。所以整个流程是这样的。 (pdf/Xe)LaTeX 编译 .tex 文件 读取 \bibliographystyle 的信息,写入 .aux 文件; 读取散落在文中的 \cite 命令,写入 .aux 文件; 读取 \cite 命令的同时,尝试读入 .aux 文件中有关引用的标记,但是因为文件内无相关信息而失败(\cite 处出现问号); 读取 \bibliography 的信息,尝试读入 .bbl 文件,但是因为文件不存在而失败(不输出参考文献列表)。 BibTeX 编译 .aux 文件 读取刚才写入的信息,然后去 .bib 文件中查找相关的参考文献条目,生成 .bbl 文件。 (pdf/Xe)LaTeX 编译 .tex 文件 读取 \bibliographystyle 的信息,写入 .aux 文件(和第一步完全一样); 读取散落在文中的 \cite 命令,写入 .aux 文件(和第一步完全一样); 读取 \cite 命令的同时,尝试读入 .aux 文件中有关引用的标记,但是因为文件内无相关信息而失败(\cite 处出现问号,和第一步完全一样); 读取 \bibliography 的信息,尝试读入 .bbl 文件,此时第二步已经生成 .bbl 文件,读入成功,输出参考文献列表,同时将引用标记写入 .aux 文件。 (pdf/Xe)LaTeX 编译 .tex 文件 读取 \bibliographystyle 的信息,写入 .aux 文件(和第一步完全一样); 读取散落在文中的 \cite 命令,写入 .aux 文件(和第一步完全一样); 读取 \cite 命令的同时,尝试读入 .aux 文件中有关引用的标记,因为第三步最后写入了引用标记,所以文内引用处出现正确的引用记号;

04
领券