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

我有以下 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()


四季花海
浏览 204回答 2
2回答

慕沐林林

您的代码将在 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变化,第二个选项也将起作用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python