【Python】向函数传递列表

向函数传递列表

在实际使用中你会发现,向函数传递列表是比较实用的,这种列表可能包含名字、数字、可能更复杂的对象(字典)

假设向一个函数传递一堆水果,我们说出我们喜欢所有的水果

def Obj(fruits):
    for fruit in fruits:
        msg = 'I like '+fruit+'!'
        print(msg)

L = ['apple','orange']
Obj(L)

我们将Obj定义成接受一个水果种类列表,并将其存储在形参Obj中,这个函数遍历接受到的列表,然后打印'I like ..!'

在函数中修改列表

#首先定义一个列表,其中包含要打印的字母
letters = ['A','B','C','D']
already_letter = []

#模拟阅读每个字母,直到字母读取完毕为止
#将每个已经阅读过的字母转移到列表already_letter中
while letters:
    current_letter = letters.pop()
    print("Printing letter:"+current_letter)
    already_letter.append(current_letter)

#显示已经读取的所有字母
print("\nThe follwing letter has been read:")
for letter in already_letter:
    print(letter)

我们首先需要创建一个列表,还创建一个名为already_letter的空列表,每个已经阅读过的字母都存储到这个列表中,只要列表中还有字母,while循环就模拟阅读过程:从该列表中删除一个已经读取的字母,然后将其存储到变量current_letter中,并显示一条消息,再将该字母存储到新列表中,等到循环结束后,再打印出所有的字母。

上述程序改编版

def read_letter(letters,already_letter):
    """
    读取每个字母,直到读取完毕为止
    将读取完毕后的字母存储到新的列表中
    :param letters:
    :param already_letter:
    :return:
    """
    while letters:
        current_letter = letters.pop()

        #模拟读取字母的过程
        print("Printing letter:" + current_letter)
        already_letter.append(current_letter)
def show_already_letter(already_letter):
    """
    显示已经阅读的所有字母
    :param already_letter:
    :return:
    """
    print("\nThe follwing letters has been read:")
    for letter in already_letter:
        print(letter)


letters = ['A','B','C','D']
already_letter=[]

read_letter(letters,already_letter)
show_already_letter(already_letter)

我们定义了函数read_letter(),它包含2个形参:一个需要阅读字母的列表和一个存储已经阅读字母的列表。给定这两个列表,这个函数模拟阅读过程:将字母一个个阅读,然后打印,最后将其转存到存储已阅读的列表中,函数show_already_letter()主要是打印已经阅读字母列表,最后四条语句是定义一个列表与一个空列表,调用上面的两个函数。

总结

上面的函数中,在读取完毕之后,letters列表就编程空列表了,那么假如我们想在读取完列表后还保留该列表,该怎么办呢?

使用切片法[ : ]创建列表的副本

def read_letter(letters,already_letter):
    """
    读取每个字母,直到读取完毕为止
    将读取完毕后的字母存储到新的列表中
    :param letters:
    :param already_letter:
    :return:
    """
    while letters:
        current_letter = letters.pop()

        #模拟读取字母的过程
        print("Printing letter:" + current_letter)
        already_letter.append(current_letter)
def show_already_letter(already_letter):
    """
    显示已经阅读的所有字母
    :param already_letter:
    :return:
    """
    print("\nThe follwing letters has been read:")
    for letter in already_letter:
        print(letter)


letters = ['A','B','C','D']
already_letter=[]

read_letter(letters[:],already_letter)
show_already_letter(already_letter)

print(letters)
通过这段代码的打印结果可以看出,列表已经被复制了哦!

转载于:https://www.cnblogs.com/OliverQin/p/7801600.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值