所以我正在使用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代替变量?
答案 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.format
和Format 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}' )