Python 在列表中使用元组解包创建对象
我很好奇我是否能解包一个从函数返回的元组,并使用解包后的值创建一个对象,所有这些都在一个列表中 我希望使用的代码如下所示:Python 在列表中使用元组解包创建对象,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我很好奇我是否能解包一个从函数返回的元组,并使用解包后的值创建一个对象,所有这些都在一个列表中 我希望使用的代码如下所示: data = [ Availability( user=random.randrange(100), start_time, end_time=generateTimes(), ) for x in range(10000) ] 上面的代码给出了错误SyntaxError:positional参数跟在关键字参数之后。
data = [
Availability(
user=random.randrange(100),
start_time, end_time=generateTimes(),
)
for x in range(10000)
]
上面的代码给出了错误
SyntaxError:positional参数跟在关键字参数之后
。如果可能的话,我更喜欢使用列表理解而不是传统的for循环
start\u time,end\u time=generateTimes()
这不会解压缩返回值。这会将变量start\u time
作为位置参数传递(可能未定义)(这就是为什么会得到SyntaxError
),并将generateTimes()中的两个返回值作为关键字参数传递。这不可能像你那样,你唯一的希望是:
如果您有如下定义的可用性构造函数:
def\uuuu init\uuuu(self,user=0,start\u time=0,end\u time=1)
您可以省略关键字并像传递位置参数一样传递参数
可用性(
随机。随机范围(100),
*生成时间()
)
但是,如果可用性类构造函数的关键字参数超过这三个,那么这很可能不起作用。然后,您必须像这样调用函数两次:
可用性(
随机。随机范围(100),
开始时间=生成时间()[0],
结束时间=生成时间[1]
)
编辑
我使用map()
找到了另一个解决方案(未经测试):
数据=[
可用性(
用户=随机。随机范围(100),
开始时间=开始时间,结束时间=结束时间
)
对于开始时间,映射中的结束时间(lambda:generateTimes(),范围(10000))
]
我更新了帖子以澄清出现的错误。“SyntaxError:位置参数跟随关键字参数”与列表理解无关,您需要在关键字参数之前传递所有位置参数。谢谢。可用性(random.randrange(100),*generateTimes())最终解决了这个问题。@Bonteq然后请使用左边的灰色复选标记接受答案。据我所知,答案是肯定的。@Bonteq嘿,再看看我的答案,我找到了更好的解决方案@Bonteq Woopsie现在应该可以工作了