Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用m4以及如何处理独立和空白_Python_Macros_M4 - Fatal编程技术网

如何在Python中使用m4以及如何处理独立和空白

如何在Python中使用m4以及如何处理独立和空白,python,macros,m4,Python,Macros,M4,在Python中使用m4有一个好的通用策略吗?具体来说,Python的空白要求使得使用m4有些尴尬。例如,以下程序: def foo(): pushdef(`X',`1=$2') 包括(test01.def) popdef(`X') foo() 使用test01.defas X(x,1) X(y,2) X(z,3) 生成python程序: def foo(): x=1 y=2 z=3 foo() 因此,缩进是关闭的。当然,我们可以用 def foo(): pushdef(`X',`1=$2

在Python中使用m4有一个好的通用策略吗?具体来说,Python的空白要求使得使用m4有些尴尬。例如,以下程序:

def foo():
pushdef(`X',`1=$2')
包括(test01.def)
popdef(`X')
foo()
使用
test01.def
as

X(x,1)
X(y,2)
X(z,3)
生成python程序:

def foo():
x=1
y=2
z=3
foo()
因此,缩进是关闭的。当然,我们可以用

def foo():
pushdef(`X',`1=$2')
包括(test01.def)
popdef(`X')
foo()
然而,我觉得我们编辑的文件变得丑陋,因为在我们的代码组织中更难跟踪缩进。真的,我想做的是使用第一个程序,让m4在include之前吃掉前导空格。我不确定m4是否有可能吃掉前导空格


此外,我知道有一些特定于Python的宏实用程序。但是,我对使用这些工具不感兴趣。我需要在许多不同的语言中使用这些X宏,比如在C和LaTeX中,我打算在每种情况下都使用m4,因为m4很容易获得,而且语言不可知。因此,如果可能的话,我真的在寻找m4解决方案。

以下类似的解决方案是否可以接受

define(在新的行中包含)`
包括(1美元)
`def foo():'
pushdef(`X',`1=$2')
在新的行(`test01.def')中包含
popdef(`X')
`foo()'
如果您觉得输出更令人满意,可以在前一行添加一个额外的
dnl
。不是所有的报价都需要,但我喜欢谨慎


但老实说,我发现你的“丑陋”解决方案更容易理解。为什么M4代码应该像Python代码一样缩进?

缩进是首选项。真的,这一切都有效,但我更容易看到缩进的东西。