P126 传递列表
可以向函数传递列表,这种列表包含的可能是名字、数字或更复杂的对象(如字典)。将列表传递给函数后,函数就能直接访问其内容。
如:def greet_users(names):
"""向列表中的每位用户都发出简单的问候"""
for name in names:
msg = "Hello, "+name.title()+"!"
print(msg)
usernames = ['hannah','ty','margot']
greet_users(usernames)
将列表传递给函数后,函数就可以对其进行修改。在函数中对这个列表所做的任何修改都是永久性的,这让你能够高效地处理大量的数据。
我们在使用函数时,还要有这样一种理念,即每个函数都应只负责一项具体的工作,这优于使用一个函数来完成多项工作。编写函数时,如果你发现它执行的任务太多,请尝试将这些代码划分到两个函数中。
如:def print_models(unprinted_designs,completed_models):
"""模拟打印每个设计,直到没有未打印的设计为止
打印每个设计后,都将其移到列表completed_models中"""
while unprinted_designs:
current_design = unprinted_designs.pop()
#模拟根据设计制作3D打印模型的过程
print("printing model: "+current_design)
completed_models.append(current_design)
def show_completed_models(completed_models):
"""显示打印好的所有模型"""
print("\nThe following models have been printed:")
for completed_model in completed_models:
print(completed_model)
unprinted_designs = ['iphone case','robot pendent','dodecahedron']
completed_models = []
print_models(unprinted_designs,completed_models)
show_completed_models(completed_models)
有时候,需要禁止函数修改列表。为解决这个问题,可向函数传递列表的副本而不是原件,这样函数所做的任何修改都只影响副本,而丝毫不影响原件。要将列表的副本传递给函数,可以使用切片表示法[:]创建列表的副本。
虽然向函数传递列表的副本可保留原始列表的内容,但除非有充分的理由需要传递副本,否则还应将原始列表传递给函数,这样可以避免花时间和内存创建副本,从而提高效率。