懂Python

2024-05-13 04:43:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我喜欢Literate CoffeeScript的想法,想看看我是否能用Python做些什么。我试图完成类似于这个简单的Literate Ruby的事情,结果得到了以下结果。该程序采用标准输入、文件或文件列表中的有文字能力的Python,并仅执行代码。在

import fileinput
import re

code = ''

for line in fileinput.input():
    match = re.match(r'([ ]{4}|\t)(.*)', line)
    if match:
        code += match.group(2) + '\n'

exec code

一个简单易读的Python文件。在

^{pr2}$

我是Python新手,想知道我是否遗漏了什么,或者是否有更好的解决方案。在


Tags: 文件import程序re列表标准matchline
2条回答

正如我在一篇评论中所说,eval或{}是邪恶的,一个更好的选择是使用code模块,如下例所示。另外,您可能更喜欢编译regex,以便只在每次迭代时对输入执行匹配,而不是在每次迭代时构建自动机。在

import fileinput

import code
console = code.InteractiveConsole(locals())

import re    
r = re.compile(r'([ ]{4}|\t)(.*)')

code = ''

for line in fileinput.input():
    match = r.match(line)
    if match:
        console.push(match.group(2))

虽然该示例将输出sys.stdout上的结果,但您可能需要使用重载类,例如this example中的类。在

将python和类似markdown的语法结合起来最好是使用工具而不是更改语言。例如:

  • sphinx(在doc字符串或其他文件中呈现经过重组的文本的输出,这两个文件都可能有嵌入的代码示例)
  • ipython记事本(由markdown或python代码组成的“单元格”)

相关问题 更多 >