gpt4 book ai didi

python - 为什么我的 Python 参数无法解包?

转载 作者:太空宇宙 更新时间:2023-11-03 19:05:47 24 4
gpt4 key购买 nike

我对 unpacking argument lists 有点困惑。我正在尝试以编程方式创建 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(..) 表达式。

关于python - 为什么我的 Python 参数无法解包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com