Python8.3返回值

本文详细介绍了Python函数的返回值,包括返回简单值、让实参变成可选的、返回字典以及结合使用函数和while循环。通过示例展示了如何定义和调用返回值函数,如何设置默认参数,以及如何在函数中返回字典等复杂数据结构。同时,还给出了一个结合while循环的示例,展示了如何在用户输入时提供退出途径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数并非总是直接显示输出,它还可以处理一些数据,并返回一个或一组值。函数返回的值称为返回值。在函数中,可使用return语句将值返回到调试函数的代码行。返回值让你能够将程序的大部分繁重工作移到函数中去完成,从而简化主程序。

8.3.1 返回简单值

例如,下面函数接受名和姓并返回整洁的姓名:

def get_formatted_name(first_name,last_name):
    """返回整洁的姓名"""
    full_name = f"{first_name}{last_name}"
    return full_name.title()
musician = get_formatted_name('hhh','lll')
print(musician)

函数get formatted name()的定义通过形参接受名和姓。它将姓和名合二为一,并将结果赋给变量full name。然后full name的值转换为首字母大写格式,并将结果返回到函数调用行。

调用返回值的函数时,需要提供一个变量,以便将返回的值赋给它。在这里,将返回值赋给了musician,输出简洁的姓名:Hhhlll。

8.3.2让实参变成可选的

有时候,需要让实参变成可选的,这样使用函数的人就能只在必要时提供额外的信息。可使用默认值来让实参变成可选的。

例如,假设要扩展函数get_formatted_name(),使其同时处理中间名。为此,可将其修改成类似于下面的:

def get_formatted_name(first_name,middle_name,last_name):
    """返回整洁的姓名"""
    full_name = f"{first_name} {middle_name} {last_name}"
    return full_name.title()
musician = get_formatted_name('hhh','lll','kkk')
print(musician)

输出:Hhh Lll Kkk

并非所有人都有中间名,但如果调用这个函数时只提供了名和姓,它将不能正确运行。为了让中间名变成可选的,可给形参middle 指定一个空的默认值,并在用户没有提供中间名时不使用这个形参。为让get formatted name()在没有提供中间名时依然可行,可将形参 middle name的默认值设置为空字符串,并将其移到形参列表的末尾:

def get_formatted_name(first_name,last_name,middle_name=''):
    """返回整洁的姓名"""
    if middle_name:
         full_name = f"{first_name} {middle_name} {last_name}"
    else:
         full_name = f"{first_name}  {last_name}"
    return full_name.title()
musician = get_formatted_name('hhh','lll','kkk')
print(musician)

在本例中,姓名是根据3个可能提供的部分创建的。由于人都有名和姓,因此在函数定义中首先列出了这2个形参。中间名是可选的,因此在函数定义中最后列出该形参,并将其默认值设置为空字符串。在函数体中,检查是否提供了中间名。 Python将非空字符串解读为True,因此如果函数调用中提供了中间名,函数将为True。如果提供了中间名,就将明、中间名和姓合并为姓名,再将其修改为首字母大写格式,并返回到函数调用行。在函数调用行,将返回的支付给变量,然后这个变量的值被打印出来。如果没有提供中介名导致If测试未通过进而执行else代码块.

8.3.3返回字典

函数可返回任何类型的值,包括列表和字典等比较复杂的数据结构。例如,下面的函数接受姓名的组成部分,并返回一个表示人的字典;

def build_person(first_name,last_name):
    """返回一个字典,其中也包含有关一个人的信息"""
    person = {'first':first_name,'last':last_name}
    return person
musician = build_person('hhh','lll')
print(musician)

输出:{'first': 'hhh', 'last': 'lll'}

这个函数接受简单的文本信息,并将其放在一个更适合的数据结构中,让你不仅能输出这些信息,还能以其他的方式处理它们。当前字符串hhh和lll被标记为名和姓。可以轻松地扩展这个函数让其接受可选值,如中间名、年龄、职业或其他任何要储存的信息。例如:

def build_person(first_name,last_name,age=None):
    """返回一个字典,其中也包含有关一个人的信息"""
    person = {'first':first_name,'last':last_name}
    if age:
        person['age']= age
    return person
musician = build_person('hhh','lll',age= 18)
print(musician)

输出:

{'first': 'hhh', 'last': 'lll', 'age': 18}

在函数定义中,新增了一个可选形参AJE,并将其默认值设置为特殊值None括号表示变量没有纸括号。可将None视为占位置。在条件测试中None相当于false。如果函数调用中包含形参AGE的值,这个值将被存储到字典中。在任何情况下,这个函数都会存储人的姓名,但可进行修改,使其同时存储有关人的其他信息。

8.3.4 结合使用函数和while循环

可将函数这之前介绍的任何python结构结合起来使用。例如,下面将结合使用函数get formatted name() 和 while 循环,以更正式的方式问候用户。下面尝试使用名和姓跟用户打招呼:

def get_formatted_name(first_name,last_name):
    """返回整洁的姓名"""
    full_name = f"{first_name}{last_name}"
    return full_name.title()
#这是一个无限循环!
while True:
    print("\nPlease tell me your name:")
    f_name = input("First name:")
    l_name = input("Last name:")
    formatted_name = get_formatted_name(f_name,l_name)
    print(f"\nHello,{formatted_name}")

在本例中while循环让用户输入姓名:依次提示用户输入名和姓。

但是这个while循环没有定义退出条件。请用户提供一系列输入时,要让用户能够尽可能容易地退出,因此每次提示用户输入时,都应提供退出途径。每次提示用户输入时,都是用break语句提供退出循环的简单途径:

def get_formatted_name(first_name,last_name):
    """返回整洁的姓名"""
    full_name = f"{first_name}{last_name}"
    return full_name.title()
while True:
    print("\nPlease tell me your name:")
    print("(enter 'q' at any time to quit)")
    f_name = input("First name:")
    if f_name == 'q':
        break
    l_name = input("Last name:")
    if l_name == 'q':
        break
    print(f"\nHello,{formatted_name}")
    if f_name == 'q':
        break
    formatted_name = get_formatted_name(f_name, l_name)
    print(f"\nHello,{formatted_name}")

我们添加了一条消息来告诉用户如何退出,然后在每次提示用户输入时,都检查他输入的是否退出值。如果是,就退出循环。现在,这个程序将不断问候,直到用户输入的姓或名为‘’q.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值