Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python~访问模板类中的元组成员_Python_Sqlite_Dictionary - Fatal编程技术网

Python~访问模板类中的元组成员

Python~访问模板类中的元组成员,python,sqlite,dictionary,Python,Sqlite,Dictionary,我是Python新手-请提前警告 我有一个模板类,它将列表作为参数,并将列表的成员应用于模板。这是第一节课: class ListTemplate: def __init__(self, input_list=[]): self.input_list = input_list def __str__(self): return "\n".join([self._template % x for x in self.input_list]) 以

我是Python新手-请提前警告

我有一个模板类,它将列表作为参数,并将列表的成员应用于模板。这是第一节课:

class ListTemplate:

    def __init__(self, input_list=[]):
        self.input_list = input_list

    def __str__(self):
        return "\n".join([self._template % x for x in self.input_list])
以下是模板代码/类别:

class HTML_Template(ListTemplate):

    _template = """ 
      <li>
        <table width="100%%" border="0">
          <tr>
            <td>Title: %(title)s</td>
            <td>Link: %(isbn)s</td>
          </tr>
          <tr>
            <td>Author: %(author)s</td>
            <td>Date: %(pub_date)s</td>
          </tr>
          <tr>
            <td>Summary: %(isbn)s</td>
            <td>Description: %(descr)s</td>
          </tr>
        </table>
        <hr>
      </li>"""
class HTML\u模板(ListTemplate):
_模板=“”“
  • 标题:%(标题)s 链接:%(isbn)s 作者:%(作者)s 日期:%(发布日期)s 汇总:%(isbn)s 说明:%(说明)s
  • “”“
    问题是:

    我使用fetchall从sqlite数据库中提取数据,fetchall返回元组列表。我可以通过将模板更改为%s(而不是%(isbn)…等)将此元组列表传递给此方法,但是,我需要在模板中多次访问isbn成员。为此,我现在将元组加载到字典中,并将它们推到另一个列表中……然后传递字典列表。这让我觉得效率很低。我的问题是:您将如何重写它,以便将元组的原始列表传递给模板(从而保存一个步骤),同时仍然允许通过项[0]或类似方式访问单个成员

    谢谢~


    Bubnoff

    如果您使用的是Python2.6或更高版本,则可以使用字符串方法而不是
    %
    运算符。这允许您指定给定参数的索引:

    >>> template = 'First value: {0}, Second value: {1}, First again: {0}'
    >>> values = (123, 456)
    >>> template.format(*values)
    'First value: 123, Second value: 456, First again: 123'
    
    如果使用,则可能仅对索引进行操作


    但这将是可怕的破译,即使有数据库方案在手。dict方法的列表听起来更合理,除非您运行一个非常频繁访问的服务,否则对性能的影响不会太大(这取决于数据集的大小-但您不会一次获得3k 7元组,是吗?)。词典在Python中相当有效。缓存也有助于提高性能。

    在2.5.2中有没有办法使用“导入未来”等来实现这一点?@Bubnoff:我不知道在2.5中有什么内置方法可以实现这一点。谢谢!这对我很有用。我将研究缓存,尽管在这种情况下我并不真正需要它。顺便说一句,使用列表作为默认参数(如在
    def\uu init\uuuu(self,input\u list=[]):
    )通常不是一个好的步骤。看见