【笔记】python的传递列表:在函数中修改列表、禁止函数修改列表

一、传递列表

我们来学一下向函数传递列表,这个也挺有用的,顺便复习一下列表的知识。

向函数传递列表时,其中包含的可能是名字、数或者更复杂的对象(如字典)。将列表传递给函数后,函数就能直接访问其内容。

:如果我们有一个用户列表,我们要问候其中的每位用户。下面的代码将包含名字的列表传递给一个名为greet_users()的函数,这个函数问候列表中的每个人。

def greet_user(names):
    """向列表中的每位用户发出简单的问候"""
    for name in names:
        msg = f"Hello,{name.title()}!"
        print(msg)
usernames = ['hannah','try','margot']
greet_user(usernames)

输出结果
在这里插入图片描述

1.在函数中修改列表

将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所做的任何修改都是永久性的,这让我们能够高效的处理大量数据。

:来看一家为用户提交的设计3D打印模型的公司。需要打印的设计存储在一个列表中,打印后将移到另一个列表中。

不使用函数的情况下模拟这个过程

#首先创建一个列表,其中包含一些要打印的设计
unprinted_designs = ['phone case','robot pendant','dodecahedron']
completed_models = []

#模拟打印每个设计,直到没有未打印的设计为止
#打印每个设计后,都将其移到列表completed_models中
while unprinted_designs:
    current_design = unprinted_designs.pop()
    print(f"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()
        print(f"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 = ['phone 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(unprinted_designs[:],completed_models)
  • 25
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜努力码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值