8.4 传递列表
假设有一个用户列表,我们要问候其中的每位用户。下面的示例将一个名字列表传递给名为greet_user() 的函数,这个函数问候列表中的每个人:
def greet_user(names):
#向列表中的每位用户都发出简单的问候
for name in names:
msg = "Hello, " + name.title() + "!"
print(msg)
user_names = ['lihui','xiaowei','zhoujielun']
greet_user(user_names)
8.4.1 在函数中修改列表
#首先创建一个列表,其中包含一些要打印的设计
unprinted_designs = ['iphone case','robot pendant','dodecahedron']
conpleted_models = []
#模拟打印每个设计,直到没有未打印的设计为止
#打印每个设计后,都将其移动到列表completed_models中
while unprinted_designs:
current_design =unprinted_designs.pop()
#模拟根据设计制作3D打印模型的过程
print("Printing model: " + current_design)
conpleted_models.append(current_design)
#显示打印好的所有模型
print("\nThe following models have been printed:")
for model in conpleted_models:
print(model)
优化代码:为重新组织这些代码,我们可编写两个函数,每个都做一件具体的工作。大部分代码都与原来相同,只是效率更高。第一个函数将负责处理打印设计的工作,而第二个将概述打印了哪些设计:
def print_models(unprinted_designs,conpleted_models):
#模拟打印每个设计,直到没有未打印的设计为止
#打印每个设计后,都将其移动到列表completed_models中
while unprinted_designs:
current_design =unprinted_designs.pop()
#模拟根据设计制作3D打印模型的过程
print("Printing model: " + current_design)
conpleted_models.append(current_design)
def show_printde_model(conpleted_models):
#显示打印好的所有模型
print("\nThe following models have been printed:")
for model in conpleted_models:
print(model)
unprinted_designs = ['iphone case','robot pendant','dodecahedron']
conpleted_models = []
print_models(unprinted_designs,conpleted_models)
show_printde_model(conpleted_models)
我们创建了一个未打印的设计列表,还创建了一个空列表,用于存储打印好的模型。接下来,由于我们已经定义了两个函数,因此只需调用它们并传入正确的实参即可。我们调用print_models()并向它传递两个列表;像预期的一样,print_models()模拟打印设计的过程。接下来,我们调用conpleted_models,并将打印好的模型列表传递给它,让其能够指出打印了哪些模型。描述性的函数名让别人阅读这些代码时也能明白,虽然其中没有任何注释。相比于没有使用函数的版本,这个程序更容易扩展和维护。如果以后需要打印其他设计,只需再次调用print_models()即可。如果我们发现需要对打印代码进行修改,只需修改这些代码一次,就能影响所有调用该函数的地方;与必须分别修改程序的多个地方相比,这种修改的效率更高。
8.4.2 禁止函数修改列表