为了账号安全,请及时绑定邮箱和手机立即绑定

在字符串中将元组与其他字符串一起使用时,在 Python 中将它们传递给 .format 时遇到问题

在字符串中将元组与其他字符串一起使用时,在 Python 中将它们传递给 .format 时遇到问题

四季花海 2021-09-25 22:02:26
我有以下 TOML:[gps]measurement = "gps"tags = ["lat", "lon", "alt"]limit = 10它在 Python 中转换为以下字典:{  "gps": {       "measurement": "gps",       "tags": [ "lat", "lon", "alt"],       "limit": 10}我有一个类,我希望在其中创建一个成员函数read_gps,如下所示:获得**kwargs从上面字典目前,只需打印以下字符串: select "lat", "lon", "alt", from "gps" limit 10代码class dbClass:    def __init__(self, db=None, **kwargs):        self.kwargs = kwargs # this kwargs is different from the above kwargs        # do some initialization stuff here     def read_gps(self, **kwargs):        # pass the above mentioned dict here        # instance_dbClass.read_gps(gps_dict)        _data = kwargs        _tags = kwargs.get('tags')        print('select "{}","{}","{}" from "{}" limit {}'.format(*_tags,                          _data.get('measurement'),                           _data.get('limit'))        )但我收到以下错误:SyntaxError: only named arguments may follow *expression相反,如果我删除它measurement,limit它会正常工作。实现这一目标的pythonic方法是什么?我应该创建两个不同的字符串,然后最后将它们连接起来吗?审判query = """        select "{}", "{}", "{}" from "{}" limit {}        """.format(_tags[0], _tags[1], _tags[2], _data.get('measurement'),                   _data.get('limit'))print(query)工作但是它有一种方法可以在其他值中使用*元组的解包.format()
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

您的代码将在 Python 3.5+ 版本中运行,遵循Pep 448。如果必须使用低于 3.5 的版本,可以使用命名参数:

print(select "{}","{}","{}" from "{measurement}" limit {limit}'.format(*_tags, measurement=measurement, limit=limit))

或者,_tags先将加入单个字符串:

print('select "{}" from "{}" limit {}'.format('","'.join(_tags), measurement, limit))

即使长度发生_tags变化,第二个选项也将起作用。


查看完整回答
反对 回复 2021-09-25
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信