代码之家  ›  专栏  ›  技术社区  ›  Shan-Desai askovpen

将元组和其他字符串传递给字符串中的.format(Python格式)时遇到问题

  •  0
  • Shan-Desai askovpen  · 技术社区  · 7 年前

    我有以下TOML:

    [gps]
    measurement = "gps"
    tags = ["lat", "lon", "alt"]
    limit = 10
    

    这将转换为Python中的以下词典:

    {
      "gps": {
           "measurement": "gps",
           "tags": [ "lat", "lon", "alt"],
           "limit": 10
    }
    

    read_gps 详情如下:

    1. 得到 **kwargs 自上而下
    2. 当前,只需打印以下字符串: 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 它会很好用的。

    试验

    query = """
            select "{}", "{}", "{}" from "{}" limit {}
            """.format(_tags[0], _tags[1], _tags[2], _data.get('measurement'),
                       _data.get('limit'))
    print(query)
    

    但是,它有一种使用 * .format() 以及其他值

    1 回复  |  直到 7 年前
        1
  •  3
  •   jfhr    7 年前

    您的代码将在Python版本3.5+中工作,如下所示 Pep 448

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

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

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

    第二个选项将起作用,即使 _标签