函数3传递列表-python进阶篇三

  假设有一个用户列表,我们要问候其中的每位用户。下面的示例将一个名字列表传递给一个名为greet_users() 的函数,这个函数问候列表中的每个人:

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!
‘‘‘

  在函数中修改列表

# 首先创建一个列表,其中包含一些要打印的设计
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)

  对上面的案例进行改进,我们可编写两个函数,每个都做一件具体的工作。大部分代码都与原来相同,只是效率更高。第一个函数将负责处理打印设计的工作,而第二个将概述打印了哪些设计:

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 = []
print_models(unprinted_designs, completed_models)
show_completed_models(completed_models)

  修改但要保留原列表。你可能会做出这样的决定:即便打印所有设计后,也要保留原来的未打印的设计列表,以供备案。但由于你将所有的设计都移出了unprinted_designs ,这个列表变成了空的,原来的列表没有了。为解决这个问题,可向函数传递列表的副本而不是原件;这样函数所做的任何修改都只影响副本,而丝毫不影响原件。

  可以通过列表复制,也就是列表切片的方法:

function_name(list_name[:])

print_models(unprinted_designs[:], completed_models)

 

函数3传递列表-python进阶篇三

上一篇:圆角三角形


下一篇:Codeforces Round #736 (Div. 2)C. Web of Lies(结论)