将列表传递给函数后,函数就能直接访问其内容。
def greet_users(names): """向列表中的每一位用户发出问候""" for name in names: msg="hello,"+name.title()+"!" print("\n"+msg) usernames=["tom","margot","jone"] greet_users(usernames) 运行结果: >>> ===================== RESTART: D:/python学习/第8章 函数/8.4.py ===================== hello,Tom! hello,Margot! hello,Jone! >>>
8.4.在函数中修改列表
将列表传递给函数后,函数就可以对其进行修改。在函数中对这个列表所做的任何修改都是永久性的。
#首先创建一个列表,其中包含一些要打印的设计 unprinted_designs=["iphone case","robot pendant","dodecahedron"] completed_models=[] #模拟打印每个设计,直到没有未打印的设计为止 #打印每个设计后,都将其移到列表completed_models中 while unprinted_designs: current_design=unprinted_designs.pop() #模拟根据设计制作3D打印模型的过程 print("Printing model:"+current_design) completed_models.append(current_design) #显示打印好的所有模型 print("\nThe following models have been printed:") for completed_model in completed_models: print(completed_model) 运行结果: >>> ==================== RESTART: D:/python学习/第8章 函数/8.4.1.py ==================== Printing model:dodecahedron Printing model:robot pendant Printing model:iphone case The following models have been printed: dodecahedron robot pendant iphone case >>>
以上程序可以编写两个函数,第一个函数负责处理打印设计的工作,第二个函数将概述打印了哪些设计。
def print_models(unprint_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 pendant","dodecahedron"] completed_models=[] print_models(unprinted_designs,completed_models) show_completed_models(completed_models) 运行结果: >>> =================== RESTART: D:/python学习/第8章 函数/8.4.1l.py =================== Printing model:dodecahedron Printing model:robot pendant Printing model:iphone case The following models have been printed: dodecahedron robot pendant iphone case >>>
8.4.2 禁止函数修改列表
有的时候需要禁止函数修改列表。如上例即便打印所有设计后,仍要保留原来的设计列表,以供备案。为解决这个问题,可向函数传递列表的副本而不是原件。
要将列表的副本传递给函数,可以用切片法[:]创建列表的副本。
function_name(list_name[:])
以上程序如果不想清空未打印的设计列表,可以像下面这样调用print_models():
print_models(unprinted_designs[:],completed_models)
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 pendant","dodecahedron"]
completed_models=[]
#要保留原来的设计列表,可以用切片法[:]创建列表的副本如:unprinted_designs[:]
print_models(unprinted_designs[:],completed_models)
show_completed_models(completed_models)
#验证一下:unprinted_designs列表不变
print("\n")
print(unprinted_designs)
运行结果:
>>>
================= RESTART: C:/Users/admin/Desktop/8.4.1ll.py =================
Printing model:dodecahedron
Printing model:robot pendant
Printing model:iphone case
The following models have been printed:
dodecahedron
robot pendant
iphone case
['iphone case', 'robot pendant', 'dodecahedron']
>>>