在 python 中转义单个 '{'
Escape single '{' in python
我正在使用 python 生成 C 代码,我想要一个打印以下内容的函数:
{
.data1="egg",
.data2="dog",
},
我试过这个功能:
def funky(data1,data2):
return """\
{
.data1="egg",
.data2="dog",
},""".format(data1,data2)
调用“funky("egg","dog")
”导致 KeyError。关于不成对的大括号。
如何打印这些大括号?
您需要:
- 使用两个
{
和两个 }
。
- 转义字符串中的双引号。
- 使用
{0}
和 {1}
代替 {egg}
和 {dog}
。
def funky(data1,data2):
return """\
{{
.data1=\"{0}\",
.data2=\"{1}\",
}},""".format(data1,data2)
您的字符串文字中没有变量,您没有转义 {
和 }
,并且您破坏了缩进。试试这个:
def stripMargin(txt):
return '\n'.join([r.split('|', 1)[1] for r in txt.split('\n')])
def funky(data1,data2):
return stripMargin("""|{{
|.data1="{0}",
|.data2="{1}",
|}},""".format(data1,data2))
print(funky("egg", "dog"))
|
部分与 stripMargin
相结合确保生成代码(目标语言)的缩进不会干扰 python(元语言)的缩进。
我实际上会以不同方式缩进生成的代码:
def funky(data1,data2):
return stripMargin("""|{{
| .data1="{0}",
| .data2="{1}",
|}},""".format(data1,data2))
由于您不需要在最终输出中使用任何常见的缩进,您还可以使用 dedent
:
from textwrap import dedent
def funky2(data1,data2):
return dedent("""\
{{
.data1="{0}",
.data2="{1}",
}},""").format(data1,data2)
(感谢@user2357112 指出)
我正在使用 python 生成 C 代码,我想要一个打印以下内容的函数:
{
.data1="egg",
.data2="dog",
},
我试过这个功能:
def funky(data1,data2):
return """\
{
.data1="egg",
.data2="dog",
},""".format(data1,data2)
调用“funky("egg","dog")
”导致 KeyError。关于不成对的大括号。
如何打印这些大括号?
您需要:
- 使用两个
{
和两个}
。 - 转义字符串中的双引号。
- 使用
{0}
和{1}
代替{egg}
和{dog}
。
def funky(data1,data2):
return """\
{{
.data1=\"{0}\",
.data2=\"{1}\",
}},""".format(data1,data2)
您的字符串文字中没有变量,您没有转义 {
和 }
,并且您破坏了缩进。试试这个:
def stripMargin(txt):
return '\n'.join([r.split('|', 1)[1] for r in txt.split('\n')])
def funky(data1,data2):
return stripMargin("""|{{
|.data1="{0}",
|.data2="{1}",
|}},""".format(data1,data2))
print(funky("egg", "dog"))
|
部分与 stripMargin
相结合确保生成代码(目标语言)的缩进不会干扰 python(元语言)的缩进。
我实际上会以不同方式缩进生成的代码:
def funky(data1,data2):
return stripMargin("""|{{
| .data1="{0}",
| .data2="{1}",
|}},""".format(data1,data2))
由于您不需要在最终输出中使用任何常见的缩进,您还可以使用 dedent
:
from textwrap import dedent
def funky2(data1,data2):
return dedent("""\
{{
.data1="{0}",
.data2="{1}",
}},""").format(data1,data2)
(感谢@user2357112 指出)