如何将排序后的列表元素作为函数可变参数传入?
如何将排序后的列表元素作为函数可变参数传入?
嘿,我来帮你捋清楚这个问题!首先提个小细节:你写的函数名funciton拼写错啦,应该是function,不过这不是核心问题~
你想要把列表里的元素一个个作为参数传给可变参数函数,但之前的写法走偏了。先看看你原来的代码问题在哪:
funciton('{}'.format(*lis) * len(lis))
这个写法里,'{}'.format(*lis)会因为占位符数量和列表元素数不匹配直接报错(你这里列表有3个元素,但只有1个{});就算占位符写对了,比如改成'{}{}{}'.format(*lis),得到的也只是一个拼接后的字符串,再乘以len(lis)就是把这个字符串重复3次,最后传给函数的只有这一个长字符串,而不是三个单独的元素,这肯定不是你想要的效果。
那正确的做法是什么呢?其实超简单!Python里的*运算符在函数调用时,能直接把列表(或其他可迭代对象)的元素拆成单独的位置参数,正好匹配*names这种可变参数定义。如果需要先排序,那就先对列表排序再传:
# 修正函数名拼写 def function(*names): for name in names: print(name) lis = ['a', 'bb', 'srg'] # 先对列表排序,得到排序后的新列表 sorted_list = sorted(lis) # 用*解包列表元素,作为多个参数传入函数 function(*sorted_list)
运行这段代码,就会依次打印出:
a bb srg
如果不需要排序,直接传原列表的话,就写function(*lis)就行,顺序就是原列表的顺序~
备注:内容来源于stack exchange,提问作者BadProgramming
相关产品推荐
相关产品推荐

