簡體   English   中英

為什么我的Python參數沒有解包?

[英]Why are my Python arguments not unpacking?

我對解壓縮參數列表有些困惑。 我正在嘗試以編程方式制作XSL-FO文件,因此需要在文件中的某個位置插入可變數量的元素。 當然,我可以通過其他方式(XML / XSLT,其他XML方法等)來執行此操作,但是我想知道為什么這種方法不起作用,因為也許我對Python的基本知識有些生銹。 我正試圖通過“ RIGHT HERE”插入column_elms列表作為可變數量的參數。 請注意,這並不包含列表,並且如果我復制下一行中的內容( E("table-column...),一遍又一遍,實際上會產生所需的輸出(多個table-column元素。但是解壓縮后,無論如何,它只給了我一個table-column元素。

from lxml.builder import ElementMaker
from lxml import etree as ET  
COLUMNS = 8
E = ElementMaker(namespace='http://www.w3.org/1999/XSL/Format',
                 nsmap={'fo':"http://www.w3.org/1999/XSL/Format"})
column_elms = [E("table-column",{"column-width":"41mm"})] * COLUMNS
root = E("root",
         E("layout-master-set",
           E("simple-page-master",
             {"master-name":"label-sheet",
                "margin-left":"5mm",
                "margin-right":"5mm",
                "margin-top":"14mm",
                "margin-bottom":"14mm"},
             E("region-body"))),
         E("page-sequence",
           {"master-reference":"label-sheet"},
             E("flow", {"flow-name":"xsl-region-body"},
                E("table", *column_elms # **RIGHT HERE**
                                        # E("table-column",{"column-width":"41mm"}),
                    ))))

您正在創建包含同一對象的COLUMNS副本的列表:

column_elms = [E("table-column",{"column-width":"41mm"})] * COLUMNS

上面的代碼沒有調用E() 8次,而是調用了一次,然后將8個引用放入列表中。

就好像您在跑:

column_elms = []
tcolumn = E("table-column",{"column-width":"41mm"})
for i in range(COLUMNS):
    column_elms.append(tcolumn)

改用列表理解:

column_elms = [E("table-column",{"column-width":"41mm"}) for _ in xrange(COLUMNS)]

它將為循環中的每次運行評估E(..)表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM