如何在python中的字符串中插入全局和局部变量
我想创建一个字符串,我想同时替换全局和局部变量。下面的代码给我一个错误。 (KeyError异常: '表')如何在python中的字符串中插入全局和局部变量
TABLE = my_table
def get_data():
data_size = 10
print "get %(data_size)s rows from the table %(TABLE)s" %locals() %globals()
我想要的代码打印以下:
get 10 rows from the table my_table
有谁知道如何实现这一目标?提前致谢!
如果你想用你的格式化字符串完全按照你现在的样子,你需要指定确切映射,像这样一本字典:
mapping = {'data_size' : locals()['data_size'], 'TABLE' : globals()['TABLE']}
,或者更简单,
mapping = {'data_size' : data_size, 'TABLE' : TABLE}
现在,通过映射到像这样的字符串:
print "get %(data_size)s rows from the table %(TABLE)s" % mapping
这会给你get 10 rows from the table my_table
。
您收到的TypeError
是因为%(...)s
需要以传递给字符串的格式args指定的key:value映射。
'locals()['data_size']'和'globals()['TABLE']'可以写成'data_size'和'TABLE' – khelwood
@khelwood Thanks,edited。首先应该保持这一点,因为它似乎与OP使用locals()/ globals()的目标是同义的。 –
谢谢@COLDSPEED,这很有帮助。我没有意识到locals()和globals()基本上是字典。 –
您需要打印像这样:
TABLE = "my_table"
def get_data():
data_size = 10
print "get %s rows from the table %s"%(data_size, TABLE)
OUTPUT:
get 10 rows from the table my_table
这是一个有用的答案。仍然有什么方法可以在字符串中写入变量名称data_size和TABLE?因为随着字符串变长和复杂化,变得难以按照正确的顺序排列。 –
'print“从表%s”%(data_size,TABLE)'中获取%s行' – khelwood
@cᴏʟᴅsᴘᴇᴇᴅ它不适用于我。我得到 'TypeError:格式需要映射' –
@PulkitBansal是的,我的坏。语法并不完美,但它是沿着这些线条的。看到我的答案。 –