阅读 220

函数的学习(三) — 返回值

返回值

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

1.返回简单值

下面来看一个函数,它接受名和姓并返回整洁的姓名:

def get_name(frist_name,last_name):     """返回整洁的名字"""          full_name = frist_name +' ' + last_name     return full_name.title()      a = get_name('zhang','jibin') print(a) 复制代码

函数get_name()的定义通过形参接受名和姓。
将结果存储在变量full_name中。
将full_name的值转换为首字母大写格式。
将结果返回到函数调用行。
调用返回值的函数时,需要提供一个变量,用于存储返回的值。
输出姓名为:

Zhang Jibin 复制代码

存储大量名和姓的大型程序中,像get_name()这样的函数非常有用。
你分别存储名和姓,每当需要显示姓名时都调用这个函数。

2.让实参变成可选的

有时候,需要让实参变成可选的,这样使用函数的人就只需在必要时才提供额外的信息。可使用默认值来让实参变成可选的。
例如,假设我们要扩展函数get_name(),使其还处理中间名。
将其修改成这样:

def get_name(frist_name,middle_name,last_name):     """返回整洁的名字"""          full_name = frist_name +' ' +middle_name + ' ' + last_name     return full_name.title() a = get_name('zhang','jing','ze') print(a) 复制代码

只要同时提供名、中间名和姓,这个函数就能正确地运行。它根据这三部分创建一个字符串,加上空格,并将结果转换为首字母大写格式:

Zhang Jing Ze 复制代码

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

def get_name(frist_name,last_name,middle_name = ''):     """返回整洁的名字"""     if middle_name:         name = frist_name +' ' +middle_name + ' ' + last_name     else:         name = frist_name + ' ' + last_name       return name.title() a = get_name('chen','feng') print(a) a = get_name('zhang','ze','jing') print(a) 复制代码

在函数体中,我们检查是否提供了中间名。Python将非空字符串解读为True,因此如果函数调用中提供了中间名,if middle_name将为True。
调用这个函数时,如果只想指定名和姓,调用起来将非常简单。如果还要指定中间名,就必须确保它是最后一个实参,这样Python才能正确地将位置实参关联到形参。
打印结果为:

Chen Feng Zhang Jing Ze 复制代码

可选值让函数能够处理各种不同情形的同时,确保函数调用尽可能简单。

3.返回字典

函数可返回任何类型的值,包括列表和字典等较复杂的数据结构。
例如:

def build_person(first_name, last_name):     """返回一个字典,其中包含有关一个人的信息"""          person = {'first': first_name,'last': last_name}     return person a = build_person('zhang', 'jibin') print(a) 复制代码

函数build_person()接受名和姓,并将这些值封装到字典中。
存储first_name的值时,使用的键为'first',而存储last_name的值时,使用的键为'last'。
最后,返回表示人的整个字典。打印这个返回的值,此时原来的两项文本信息存储在一个字典中:

{'first': 'zhang', 'last': 'jibin'} 复制代码

这个函数接受简单的文本信息,将其放在一个更合适的数据结构中,让你不仅能打印这些信息,还能以其他方式处理它们。
例如,下面的修改让你还能存储年龄:

def build_person(first_name, last_name, age=''):     """返回一个字典,其中包含有关一个人的信息"""          person = {'first': first_name, 'last': last_name}     if age:         person['age'] = age     return person a = build_person('zhang', 'jibin', age=27) print(a) 复制代码

在函数定义中,我们新增了一个可选形参age,并将其默认值设置为空字符串。如果函数调用中包含这个形参的值,这个值将存储到字典中。在任何情况下,这个函数都会存储人的姓名,但可对其进行修改,使其也存储有关人的其他信息。
打印结果为:

{'first': 'zhang', 'last': 'jibin', 'age': 27} 复制代码

4.结合使用函数和while循环

可将函数同本书前面介绍的任何Python结构结合起来使用。例如,下面将结合使用函数get__name()和while循环,以更正规的方式问候用户。下面尝试使用名和姓跟用户打招呼:

def get_name(first_name, last_name):     """返回整洁的姓名"""          name = first_name + ' ' + last_name     return name.title()      # 这是一个无限循环! while True:      print("\nPlease tell me your name:")       f_name = input("First name: ")      l_name = input("Last name: ")      g_name = get_name(f_name, l_name)      print("\nHello, "+g_name+"!") 复制代码

我们使用的是get_name()的简单版本,不涉及中间名。
其中的while循环让用户输入姓名:依次提示用户输入名和姓。
打印结果为:

Please tell me your name: First name: zhang Last name: jibin Hello, Zhang Jibin! Please tell me your name: First name: wang Last name: fan Hello, Wang Fan! 复制代码

while循环存在一个问题:没有定义退出条件。每次提示用户输入时,都使用break语句提供了退出循环的简单途径:

def get_name(first_name, last_name):     """返回整洁的姓名"""          name = first_name + ' ' + last_name     return 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          g_name = get_name(f_name, l_name)     print("\nHello, "+g_name+"!") 复制代码

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

Please tell me your name: (enter 'q' at any time to quit) First name: zhang Last name: jibin Hello, Zhang Jibin! Please tell me your name: (enter 'q' at any time to quit) First name: wang  Last name: fan Hello, Wang  Fan! Please tell me your name: (enter 'q' at any time to quit) First name: q >>>

 伪原创工具 SEO网站优化  https://www.237it.com/

作者:衍生星球
链接:https://juejin.cn/post/7035435277376028708


文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐