Python中的变量替换

时间:2014-06-27 08:26:27

标签: python string web.py

所以我正在使用Web.py,我有以下代码:

check = db.select('querycode', where='id=$id', vars=locals())[0]

哪个工作正常,它用变量代替$ id。但在这一行中,它不起作用:

web.sendmail('mail@mail.mail', "tomail@tomail.tomail", 'Subject', 'Hello $name')

我有什么不对,怎么办?我也得到了正确的概念:$ -sign代替变量?

2 个答案:

答案 0 :(得分:8)

Python一般不做PHP风格的变量插值。

您在第一个语句中看到的是db.select的一个特殊功能,它在调用者的上下文中从局部变量中选择变量值。

如果要替换第二行中的变量,则必须使用Python提供的方法之一手动执行此操作。这是一种这样的方式。

web.sendmail('mail@mail.mail', "tomail@tomail.tomail", 'Subject', 'Hello %s' % name)

这是另一种方式。

web.sendmail('mail@mail.mail', "tomail@tomail.tomail", 'Subject', 'Hello {0}'.format(name))

第一个选项记录在String Formatting operations

有关第二个选项的详细信息,请参阅str.formatFormat String Syntax的文档。

答案 1 :(得分:8)

@ merlin2011的答案解释得最好。

但只是为了补充它,因为你试图用变量名替换,python还支持以下形式的“替换”(或字符串格式化):

'Hello %(name)s' % locals()

或者限制命名空间:

'Hello %(name)s' % {'name': name}

EDIT 从python 3.6开始,变量替换是使用f-strings本地完成的。如,

print( f'Hello {name}' )