【发布时间】:2018-04-18 04:24:25
【问题描述】:
例如,我有一个函数 print_members() 应该打印传入的 2 个参数、给定组的名称和组成员的名称:
def print_members(group_name, *member_names):
print("Members of", group_name)
for i in range(len(member_names)):
print(member_names[i])
在 main() 中,我创建了一个需要使用函数打印的列表,其中列表的第一个元素是 group_name,其余的是组成员的名称。为此,我在 main() 中运行以下命令
def main():
group_mates = ["Book Club", "Allen", "Karla", "Matt", "Nadia"]
print_members(group_mates[0], group_mates[1:])
但是,当它运行时(afaik)将第二个参数作为一个元素的元组传递,即切片列表,因此当它通过 for 循环时,它只会看到一个元素,即封装的切片列表。像这样:
(['Allen', 'Karla', 'Matt', 'Nadia'])
所以它打印出来:
Members of Book Club
['Allen', 'Karla', 'Matt', 'Nadia']
即使它应该是
Members of Book Club
Allen
Karla
Matt
Nadia
是否有另一种方法可以在 main() 中调用函数 print_members(),这样它就不会将切片列表封装在一个元组中?还是有更好的方法来编写 print_members() ?该函数还需要能够在第一个参数之后接受任意数量的组成员名称,因此是星号,并以与我希望它打印单个列表的元组相同的方式打印它,所以我不能在我将其作为参数后将其展平。这样做会(再次afaik)展平已经是一维列表的列表,使每个 character 在列表中成为自己的元素。我需要每个 name 作为它自己的元素。任何和所有的帮助将不胜感激。
【问题讨论】:
-
为什么你的函数
print_members在参数*中有*member_names?这表示 *args:digitalocean.com/community/tutorials/…。如果您删除*,您的函数会执行您希望它执行的操作。列表已经是可变的,这意味着它的长度和元素数量已经可以改变,*意味着列表的数量可以改变。 -
另外,我建议找到除列表之外的另一种对象类型来解决此问题。我会考虑使用 python 字典。
-
@DavidJohnColemanII 该函数需要能够将名称作为逗号分隔的参数,而不仅仅是作为具有组名和成员名的列表
-
例如像
print_members("Book Club", "Allen", "Karla", "Matt", "Nadia")一样,这就是为什么参数中有一个星号 -
查看我在@ReblochonMasque 的回答中关于如何处理可变参数的评论。
标签: python list parameters tuples slice