Python 中 如何向函数传递列表?
Posted 摸鱼芝士
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 中 如何向函数传递列表?相关的知识,希望对你有一定的参考价值。
嗨害大家好,我是芝士❤
今天也是来给大家整点干货的一天~
把列表传递给函数后, 函数就能直接访问列表中的内容咯。
假设有一组专家,我们想邀请他们参加研讨会。
def send_invitation(experts):
'''发送邀请函'''
for expert in experts:
print(expert + ',您好,现邀请您参加 XX 研讨会...')
experts = ['小明', '小红']
send_invitation(experts)
运行结果:
小明,您好,现邀请您参加 XX 研讨会…
黄莉莉,您好,现邀请您参加 XX 研讨会…
1 修改列表
列表参数传递给函数后, 函数就可以对其进行修改。
注意:在函数中对列表所进行的任何修改都是永久性的。
def send_invitation(experts, informed):
'''发送邀请函,并移动列表数据到【已通知】列表'''
while experts:
expert = experts.pop()
print(expert + ',您好,现邀请您参加 XX 研讨会...')
informed.append(expert)
experts = ['小明', '小红'] # 专家列表
informed = [] # 已通知人员列表
print('执行前:experts=' + str(experts) + ',informed=' + str(informed))
send_invitation(experts, informed)
print('执行后:experts=' + str(experts) + ',informed=' + str(informed))
运行结果:
执行前:experts=['小明', '小红'],informed=[]
小红,您好,现邀请您参加 XX 研讨会...
小明,您好,现邀请您参加 XX 研讨会...
执行后:experts=[],informed=['小红', '小明']
- 即使没有注释,那些具有描述性的函数名也能清晰地表达出函数所做的工作。
- 我们也可以在一个函数中调用另一个函数, 这样有助于将复杂的任务分解为一系列的步骤,让程序变得更具可读性。
更多学习资料:点击此处跳转文末名片获取
2 只读列表
有时候,我们并不想让函数修改传递进去的列表,
这时我们可以向函数传递列表的副本:
experts = ['小明', '小红'] # 专家列表
informed = [] # 已通知人员列表
print('执行前:experts=' + str(experts) + ',informed=' + str(informed))
send_invitation(experts[:], informed)
print('执行后:experts=' + str(experts) + ',informed=' + str(informed))
运行结果:
执行前:experts=['小明', '小红'],informed=[]
小红,您好,现邀请您参加 XX 研讨会...
小明,您好,现邀请您参加 XX 研讨会...
执行后:experts=['小明', '小红'],informed=['小红', '小明']
虽然向函数传递列表的副本可以保留原始列表的内容,
但除非有充分的理由需要这样做。
因为让函数使用传递进行的列表可以避免花时间
在内存中创建副本,
从而提高性能,
这在处理大数据列表时尤其需要注意。
👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇
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)
以上是关于Python 中 如何向函数传递列表?的主要内容,如果未能解决你的问题,请参考以下文章