Python:核心知识点整理大全16-笔记-2

简介: Python:核心知识点整理大全16-笔记

Python:核心知识点整理大全16-笔记-1 https://developer.aliyun.com/article/1424360

8.3 返回值

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


8.3.1 返回简单值

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


formatted_name.py


1 def get_formatted_name(first_name, last_name):
"""返回整洁的姓名"""
2 full_name = first_name + ' ' + last_name
3 return full_name.title()
4 musician = get_formatted_name('jimi', 'hendrix')
print(musician)


函数get_formatted_name()的定义通过形参接受名和姓(见1)。它将姓和名合而为一,在它 们之间加上一个空格,并将结果存储在变量full_name中(见2)。然后,将full_name的值转换为 首字母大写格式,并将结果返回到函数调用行(见3)。 调用返回值的函数时,需要提供一个变量,用于存储返回的值。在这里,将返回值存储在了 变量musician中(见4)。输出为整洁的姓名:


Jimi Hendrix 


我们原本只需编写下面的代码就可输出整洁的姓名,相比于此,前面做的工作好像太多了


print("Jimi Hendrix") 


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


8.3.2 让实参变成可选的

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


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


def get_formatted_name(first_name, middle_name, last_name):
 """返回整洁的姓名"""
 full_name = first_name + ' ' + middle_name + ' ' + last_name
 return full_name.title()
musician = get_formatted_name('john', 'lee', 'hooker')
print(musician)


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


John Lee Hooker 


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


1 def get_formatted_name(first_name, last_name, middle_name=''):
 """返回整洁的姓名"""
2 if middle_name:
 full_name = first_name + ' ' + middle_name + ' ' + last_name
3 else:
 full_name = first_name + ' ' + last_name
 return full_name.title()
musician = get_formatted_name('jimi', 'hendrix')
print(musician)
4 musician = get_formatted_name('john', 'hooker', 'lee')
print(musician)


在这个示例中,姓名是根据三个可能提供的部分创建的。由于人都有名和姓,因此在函数定 义中首先列出了这两个形参。中间名是可选的,因此在函数定义中最后列出该形参,并将其默认 值设置为空字符串(见1)。


在函数体中,我们检查是否提供了中间名。Python将非空字符串解读为True,因此如果函数 调用中提供了中间名,if middle_name将为True(见2)。如果提供了中间名,就将名、中间名和 姓合并为姓名,然后将其修改为首字母大写格式,并返回到函数调用行。在函数调用行,将返回 的值存储在变量musician中;然后将这个变量的值打印出来。如果没有提供中间名,middle_name 将为空字符串,导致if测试未通过,进而执行else代码块(见3):只使用名和姓来生成姓名, 并将设置好格式的姓名返回给函数调用行。在函数调用行,将返回的值存储在变量musician中; 然后将这个变量的值打印出来。


调用这个函数时,如果只想指定名和姓,调用起来将非常简单。如果还要指定中间名,就必 须确保它是最后一个实参,这样Python才能正确地将位置实参关联到形参(见4)。


这个修改后的版本适用于只有名和姓的人,也适用于还有中间名的人:


Jimi Hendrix
John Lee Hooker


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


8.3.3 返回字典

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


person.py


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


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


{'first': 'jimi', 'last': 'hendrix'}


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


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


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

目录
相关文章
|
1月前
|
缓存 Java 索引
[Python]知识点
本文主要介绍了Python的一些高级知识点和使用细节,包括pip的使用、内置函数、列表、元组、字典、集合、变量、Lambda表达式、面向对象编程、异常处理、模块及标准库等。文章适合有一定Python基础的读者,重点在于深入理解和掌握Python的高级特性。文中还提供了大量示例代码,帮助读者更好地理解和应用这些知识点。
28 1
[Python]知识点
|
2月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
2月前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
2月前
|
调度 Python
python知识点100篇系列(20)-python协程与异步编程asyncio
【10月更文挑战第8天】协程(Coroutine)是一种用户态内的上下文切换技术,通过单线程实现代码块间的切换执行。Python中实现协程的方法包括yield、asyncio模块及async/await关键字。其中,async/await结合asyncio模块可更便捷地编写和管理协程,支持异步IO操作,提高程序并发性能。协程函数、协程对象、Task对象等是其核心概念。
|
2月前
|
Python Windows
python知识点100篇系列(24)- 简单强大的日志记录器loguru
【10月更文挑战第11天】Loguru 是一个功能强大的日志记录库,支持日志滚动、压缩、定时删除、高亮和告警等功能。安装简单,使用方便,可通过 `pip install loguru` 快速安装。支持将日志输出到终端或文件,并提供丰富的配置选项,如按时间或大小滚动日志、压缩日志文件等。还支持与邮件通知模块结合,实现邮件告警功能。
python知识点100篇系列(24)- 简单强大的日志记录器loguru
|
2月前
|
自然语言处理 Python Windows
python知识点100篇系列(23)- 使用stylecloud生成词云
【10月更文挑战第10天】`stylecloud` 是 `wordcloud` 的优化版,支持使用 Font Awesome 图标自定义词云形状,操作更简便。本文介绍如何安装 `jieba` 和 `stylecloud` 库,并使用它们生成中文词云。通过 `jieba` 进行分词,再利用 `stylecloud` 的 `gen_stylecloud` 方法生成具有特定形状和颜色的词云图像。
python知识点100篇系列(23)- 使用stylecloud生成词云
|
2月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
2月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
2月前
|
Java Python
python知识点100篇系列(16)-python中如何获取线程的返回值
【10月更文挑战第3天】本文介绍了两种在Python中实现多线程并获取返回值的方法。第一种是通过自定义线程类继承`Thread`类,重写`run`和`join`方法来实现;第二种则是利用`concurrent.futures`库,通过`ThreadPoolExecutor`管理线程池,简化了线程管理和结果获取的过程,推荐使用。示例代码展示了这两种方法的具体实现方式。
python知识点100篇系列(16)-python中如何获取线程的返回值
|
2月前
|
Python
python知识点100篇系列(14)-分割大文件然后在合并
【10月更文挑战第2天】在工作中,因邮件附件大小限制或网络条件不佳,常需将大文件分割为小文件发送,接收后再合并。Python的文件读写功能可轻松实现此需求,也可借助第三方库filesplit简化操作。安装filesplit后,仅需几行代码即可完成文件的分割与合并,但掌握Python内置方法同样重要。