Python 函数返回值及传递列表

函数返回值

  • 函数并非总是直接显示输出,它可以处理一些数据,并返回一个或一组值,函数返回的值被称为返回值。
  • 使用return语句将值返回到调用函数的代码行中
# 返回简单值
def get_formatted_name(first_name,last_name):
    """返回整洁的姓名"""
    full_name = first_name + ' ' + last_name
    return full_name.title()

musician = get_formatted_name('jimi','hendrix')
print(musician)
Jimi Hendrix
# 让实参变为可选
def get_formatted_name(first_name, last_name,middle_name=''):
    if middle_name:
        full_name = first_name + ' ' + middle_name + ' ' + last_name
    else:
        full_name = first_name + ' ' + last_name
    return full_name.title()
musician = get_formatted_name('jimi', 'hendrix')
print(musician)

musician = get_formatted_name('john','hooker','lee')
print(musician)
Jimi Hendrix
John Lee Hooker

返回字典

  • 函数可以返回任何类型的值,包括列表和字典等较复杂的数据结构
# 返回字典
def build_person(first_name, last_name):
    '''返回一个字典,其中包含有关一个人的信息 '''
    person = {'first': first_name, 'last': last_name}
    return person
musician = build_person('jimi', 'hendrix')
print(musician)
{'first': 'jimi', 'last': 'hendrix'}
# 混合案例:
def get_formatted_name(first_name, last_name):
    full_name = first_name + ' ' + last_name
    return full_name.title()
while True:
    print("Please tell me your name: ")
    f_name = input("First_name: ")
    l_name = input("Last_name: ")
    judge = input("Whether to continue running (y/n): ")
    if (judge == 'n'):
        break
    else:
        continue
    formatted_name = get_formatted_name(f_name,l_name)
    print("\nHello, " + formatted_name + "!")
Please tell me your name: 
First_name: li
Last_name: yege
Whether to continue running (y/n): y
Please tell me your name: 
First_name: wang
Last_name: erxiao
Whether to continue running (y/n): n

传递列表

  • 列表可能是名字、数字、或更复杂的对象如字典,将列表传递给函数后,函数就能直接访问其内容,使用列表来处理列表的效率
def greet_users(names):
    '''向列表中的每位用户都发出简单的问候'''
    for name in names:
        msg = "Hello , " + name.title() + "!"
        print(msg)
        
usernames = ['hahaha','try','margot']
greet_users(usernames)
Hello , Hahaha!
Hello , Try!
Hello , Margot!

函数中修改列表

  • 将列表传递给函数后,函数就可以对其进行修改
  • 函数中对列表所作的任何修改都是永久性的,可以高效地处理大量数据
# 不使用函数传递
#  首先创建一个列表,其中包含一些要打印的设计
unprinted_designs = ['iphone case','robot pendant','dodecahedron']
completed_models = []
#  模拟打印每个设计,直到没有未打印的设计为止
# 打印每个设计后,都将其移到列表 completed_models 中
while unprinted_designs:
    # 模拟根据设计制作 3D 打印模型的过程
    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(unprinted_designs,completed_models):
    while unprinted_designs:
         # 模拟根据设计制作 3D 打印模型的过程
        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)
print(unprinted_designs)
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(unprinted_designs,completed_models):
    while unprinted_designs:
         # 模拟根据设计制作 3D 打印模型的过程
        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)
print(unprinted_designs)
Printing model: dodecahedron
Printing model: robot pendant
Printing model: iphone case

The following models have been printed: 
dodecahedron
robot pendant
iphone case
['iphone case', 'robot pendant', 'dodecahedron']

练习

# 1.魔术师
# 创建一个包含魔术师名字的列表,并将其传递给一个名为 show_magicians() 的函数,这个函数打印列表中每个魔术师的名字
names = ['liuqian','xiaowang','zhangsan','lisi']
def show_magicians(names):
    for name in names:
        print("The magicians names is " + name.title() + ".")
show_magicians(names)
The magicians names is Liuqian.
The magicians names is Xiaowang.
The magicians names is Zhangsan.
The magicians names is Lisi.
# 2.了不起的魔术师
# 在你为完成练习编写的程序中,编写一个名为 make_great() 的函数,对魔术师列表进行修改,在每个魔术师的名字中都加入字样 “the
# Great” 。调用函数 show_magicians() ,确认魔术师列表确实变了
names = ['liuqian','xiaowang','zhangsan','lisi']
def show_magicians(names):
    for name in names:
        print("The magicians names is " + name.title() + ".")
def make_great(names):
    great_magicians = []
    while names:
        new_names = names.pop()
        great_magician = new_names + "the Great"
        great_magicians.append(great_magician)
    for great_magician in great_magicians:
        names.append(great_magician)

show_magicians(names)
print("\n")
make_great(names)
show_magicians(names)
The magicians names is Liuqian.
The magicians names is Xiaowang.
The magicians names is Zhangsan.
The magicians names is Lisi.


The magicians names is Lisithe Great.
The magicians names is Zhangsanthe Great.
The magicians names is Xiaowangthe Great.
The magicians names is Liuqianthe Great.
# 3.不变的魔术师
# 在调用函数 make_great() 时,向它传递魔术师列表的副本。由于不想修改原始列表,请返回修改后的
# 列表,并将其存储到另一个列表中。分别使用这两个列表来调用 show_magicians() ,确认一个列表包含的是原来的魔术师名字,而另一个列表包含的是添加了字
# 样 “the Great” 的魔术师名字。
def show_magicians(names):
    for name in names:
        print("The magicians names is " + name.title() + ".")
def make_great(names):
    great_magicians = []
    while names:
        new_names = names.pop()
        great_magician = new_names + "the Great"
        great_magicians.append(great_magician)
        print(names)
    for great_magician in great_magicians:
        names.append(great_magician)
        print(names)
        
names = ['liuqian','xiaowang','zhangsan','lisi']
show_magicians(names)
print("\n")
copy = names[:]
make_great(copy)
show_magicians((copy))
The magicians names is Liuqian.
The magicians names is Xiaowang.
The magicians names is Zhangsan.
The magicians names is Lisi.


['liuqian', 'xiaowang', 'zhangsan']
['liuqian', 'xiaowang']
['liuqian']
[]
['lisithe Great']
['lisithe Great', 'zhangsanthe Great']
['lisithe Great', 'zhangsanthe Great', 'xiaowangthe Great']
['lisithe Great', 'zhangsanthe Great', 'xiaowangthe Great', 'liuqianthe Great']
The magicians names is Lisithe Great.
The magicians names is Zhangsanthe Great.
The magicians names is Xiaowangthe Great.
The magicians names is Liuqianthe Great.

作者:野哥李
微信公众号:AI算法学习社
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。

posted @   野哥李  阅读(32)  评论(0编辑  收藏  举报  
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示

目录导航