将列表传递给函数后,函数就能直接访问其内容
def greet_users(names):
"""向列表中的每一位用户都发出简单的问候"""
for name in names:
msg="Hello, "+name.title()+"!"
print(msg)
usernames=['hannah','ty','margot']
greet_users(usernames)
这个函数问候列表中的每一个人
Hello, Hannah!
Hello, Ty!
Hello, Margot!
1、在函数中修改列表
将列表传递给函数之后,函数就可以对其进行修改。在函数中对这个列表所做的任何修改都是永久性的,这让你能够高效的处理大量数据
#首先创建一个列表,其中包含一些要打印的设计
unprinted_designs=['iphone case','robot pendant','dodecahedron']
completed_models=[]
#模拟打印每个设计,直到没有未打印的设计为止
# 打印每个设计后,都将其转移到列表completed_models中
while unprinted_designs:
current_design=unprinted_designs.pop()
#模拟根据设计制作打印模型的过程
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)
结果
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(unprined_designs,completed_models):
"""
模拟打印每个设计,知道没有打印未打印的设计为止
打印每个设计后,都将其移到列表completed_models中
"""
while unprinted_designs:
current_design=unprinted_designs.pop()
#模拟根据设计制作打印模型的过程
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)
2、禁止函数修改列表
要将列表的副本传递给函数,可以像下面这样做:
function_name(list_name[:])
切片法[:]表示创建列表的副本,在上面的例子中,如果不想清空未打印的设计列表,可像下面这样调用print_models():
print_models(unprined_designs[:],completed_models)
这样函数print_models()依然能够完成其工作,因为它获得了所有未打印的设计名称,但它使用的是列表unprinted_design的副本,而不是列表unprinted_design本身。