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

目录

​编辑

7.3.2 删除包含特定值的所有列表元素

pets.py

7.3.3 使用用户输入来填充字典

mountain_poll.py

7.4 小结

第8章

函 数

8.1 定义函数

greeter.py

8.1.1 向函数传递信息

8.1.2 实参和形参

8.2.1 位置实参

2. 位置实参的顺序很重要

8.2.2 关键字实参

往期快速传送门👆(在文章最后):


7.3.2 删除包含特定值的所有列表元素

在第3章中,我们使用函数remove()来删除列表中的特定值,这之所以可行,是因为要删除 的值在列表中只出现了一次。如果要删除列表中所有包含特定值的元素,该怎么办呢? 假设你有一个宠物列表,其中包含多个值为'cat'的元素。要删除所有这些元素,可不断运 行一个while循环,直到列表中不再包含值'cat',如下所示:

pets.py
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)
while 'cat' in pets:pets.remove('cat')
print(pets)

我们首先创建了一个列表,其中包含多个值为'cat'的元素。打印这个列表后,Python进入 while循环,因为它发现'cat'在列表中至少出现了一次。进入这个循环后,Python删除第一个'cat' 并返回到while代码行,然后发现'cat'还包含在列表中,因此再次进入循环。它不断删除'cat', 直到这个值不再包含在列表中,然后退出循环并再次打印列表:

['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
['dog', 'dog', 'goldfish', 'rabbit'] 

7.3.3 使用用户输入来填充字典

可使用while循环提示用户输入任意数量的信息。下面来创建一个调查程序,其中的循环每 次执行时都提示输入被调查者的名字和回答。我们将收集的数据存储在一个字典中,以便将回答 同被调查者关联起来:

mountain_poll.py
responses = {}
# 设置一个标志,指出调查是否继续
polling_active = True
while polling_active:# 提示输入被调查者的名字和回答
1 name = input("\nWhat is your name? ")
response = input("Which mountain would you like to climb someday? ")# 将答卷存储在字典中
2 responses[name] = response# 看看是否还有人要参与调查
3 repeat = input("Would you like to let another person respond? (yes/ no) ")if repeat == 'no':polling_active = False
# 调查结束,显示结果
print("\n--- Poll Results ---")
4 for name, response in responses.items():print(name + " would like to climb " + response + ".")

这个程序首先定义了一个空字典(responses),并设置了一个标志(polling_active),用于 指出调查是否继续。只要polling_active为True,Python就运行while循环中的代码。 在这个循环中,提示用户输入其用户名及其喜欢爬哪座山(见1)。将这些信息存储在字典 responses中(见2),然后询问用户调查是否继续(见3)。如果用户输入yes,程序将再次进入 while循环;如果用户输入no,标志polling_active将被设置为False,而while循环将就此结束。 最后一个代码块(见4)显示调查结果。

如果你运行这个程序,并输入一些名字和回答,输出将类似于下面这样:

What is your name? Eric
Which mountain would you like to climb someday? Denali
Would you like to let another person respond? (yes/ no) yes
What is your name? Lynn
Which mountain would you like to climb someday? Devil's Thumb
Would you like to let another person respond? (yes/ no) no
--- Poll Results ---
Lynn would like to climb Devil's Thumb.
Eric would like to climb Denali. 

7.4 小结

在本章中,你学习了:如何在程序中使用input()来让用户提供信息;如何处理文本和数字 输入,以及如何使用while循环让程序按用户的要求不断地运行;多种控制while循环流程的方式: 设置活动标志、使用break语句以及使用continue语句;如何使用while循环在列表之间移动元素, 以及如何从列表中删除所有包含特定值的元素;如何结合使用while循环和字典。 在第8章中,你将学习函数。函数让你能够将程序分成多个很小的部分,其中每部分都负责 完成一项具体任务。你可以根据需要调用同一个函数任意次,还可将函数存储在独立的文件中。 使用函数可让你编写的代码效率更高,更容易维护和排除故障,还可在众多不同的程序中重用。



第8章

函 数

8.1 定义函数

下面是一个打印问候语的简单函数,名为greet_user():

greeter.py
1 def greet_user():
2 """显示简单的问候语"""
3 print("Hello!")
4 greet_user()

这个示例演示了最简单的函数结构。1处的代码行使用关键字def来告诉Python你要定义一个 函数。这是函数定义,向Python指出了函数名,还可能在括号内指出函数为完成其任务需要什么 样的信息。在这里,函数名为greet_user(),它不需要任何信息就能完成其工作,因此括号是空 的(即便如此,括号也必不可少)。最后,定义以冒号结尾。 紧跟在def greet_user():后面的所有缩进行构成了函数体。2处的文本是被称为文档字符串 (docstring)的注释,描述了函数是做什么的。文档字符串用三引号括起,Python使用它们来生成有关程序中函数的文档。 代码行print("Hello!")(见3)是函数体内的唯一一行代码,greet_user()只做一项工作: 打印Hello!。 要使用这个函数,可调用它。函数调用让Python执行函数的代码。要调用函数,可依次指定 函数名以及用括号括起的必要信息,如4处所示。由于这个函数不需要任何信息,因此调用它时 只需输入greet_user()即可。和预期的一样,它打印Hello!:

Hello! 

8.1.1 向函数传递信息

只需稍作修改,就可以让函数greet_user()不仅向用户显示Hello!,还将用户的名字用作抬 头。为此,可在函数定义def greet_user()的括号内添加username。通过在这里添加username, 就可让函数接受你给username指定的任何值。现在,这个函数要求你调用它时给username指定一 个值。调用greet_user()时,可将一个名字传递给它,如下所示:

def greet_user(username):
"""显示简单的问候语"""print("Hello, " + username.title() + "!")
greet_user('jesse') 

代码greet_user('jesse')调用函数greet_user(),并向它提供执行print语句所需的信息。这 个函数接受你传递给它的名字,并向这个人发出问候:

Hello, Jesse! 

同样,greet_user('sarah')调用函数greet_user()并向它传递'sarah',打印Hello, Sarah!。 你可以根据需要调用函数greet_user()任意次,调用时无论传入什么样的名字,都会生成相应的 输出。

8.1.2 实参和形参

前面定义函数greet_user()时,要求给变量username指定一个值。调用这个函数并提供这种 信息(人名)时,它将打印相应的问候语。

在函数greet_user()的定义中,变量username是一个形参——函数完成其工作所需的一项信 息。在代码greet_user('jesse')中,值'jesse'是一个实参。实参是调用函数时传递给函数的信 息。我们调用函数时,将要让函数使用的信息放在括号内。在greet_user('jesse')中,将实参 'jesse'传递给了函数greet_user(),这个值被存储在形参username中。


注意 大家有时候会形参、实参不分,因此如果你看到有人将函数定义中的变量称为实参或将 函数调用中的变量称为形参,不要大惊小怪。


8.2 传递实参

鉴于函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参 的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;也可使用关键字实参,其 中每个实参都由变量名和值组成;还可使用列表和字典。下面来依次介绍这些方式。

8.2.1 位置实参

你调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此, 最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。 为明白其中的工作原理,来看一个显示宠物信息的函数。这个函数指出一个宠物属于哪种动 物以及它叫什么名字,如下所示:

1 def describe_pet(animal_type, pet_name):"""显示宠物的信息"""print("\nI have a " + animal_type + ".")print("My " + animal_type + "'s name is " + pet_name.title() + ".")
2 describe_pet('hamster', 'harry')

这个函数的定义表明,它需要一种动物类型和一个名字(见1)。调用describe_pet()时,需 要按顺序提供一种动物类型和一个名字。例如,在前面的函数调用中,实参'hamster'存储在形 参animal_type中,而实参'harry'存储在形参pet_name中(见2)。在函数体内,使用了这两个形 参来显示宠物的信息。

输出描述了一只名为Harry的仓鼠

I have a hamster.
My hamster's name is Harry.

1. 调用函数多次

你可以根据需要调用函数任意次。要再描述一个宠物,只需再次调用describe_pet()即可:

def describe_pet(animal_type, pet_name):"""显示宠物的信息"""print("\nI have a " + animal_type + ".")print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet('hamster', 'harry')

第二次调用describe_pet()函数时,我们向它传递了实参'dog'和'willie'。与第一次调用时 一样,Python将实参'dog'关联到形参animal_type,并将实参'willie'关联到形参pet_name。与前 面一样,这个函数完成其任务,但打印的是一条名为Willie的小狗的信息。至此,我们有一只名 为Harry的仓鼠,还有一条名为Willie的小狗:

I have a hamster.
My hamster's name is Harry.
I have a dog.
My dog's name is Willie.

调用函数多次是一种效率极高的工作方式。我们只需在函数中编写描述宠物的代码一次,然 后每当需要描述新宠物时,都可调用这个函数,并向它提供新宠物的信息。即便描述宠物的代码 增加到了10行,你依然只需使用一行调用函数的代码,就可描述一个新宠物。 在函数中,可根据需要使用任意数量的位置实参,Python将按顺序将函数调用中的实参关联 到函数定义中相应的形参。

2. 位置实参的顺序很重要

使用位置实参来调用函数时,如果实参的顺序不正确,结果可能出乎意料:

def describe_pet(animal_type, pet_name):"""显示宠物的信息"""print("\nI have a " + animal_type + ".")print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet('harry', 'hamster') 

在这个函数调用中,我们先指定名字,再指定动物类型。由于实参'harry'在前,这个值将 存储到形参animal_type中;同理,'hamster'将存储到形参pet_name中。结果是我们得到了一个 名为Hamster的harry:

I have a harry.
My harry's name is Hamster. 

如果结果像上面一样搞笑,请确认函数调用中实参的顺序与函数定义中形参的顺序一致。

8.2.2 关键字实参

关键字实参是传递给函数的名称—值对。你直接在实参中将名称和值关联起来了,因此向函 数传递实参时不会混淆(不会得到名为Hamster的harry这样的结果)。关键字实参让你无需考虑函 数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。

下面来重新编写pets.py,在其中使用关键字实参来调用describe_pet():

def describe_pet(animal_type, pet_name):"""显示宠物的信息"""print("\nI have a " + animal_type + ".")print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(animal_type='hamster', pet_name='harry')

函数describe_pet()还是原来那样,但调用这个函数时,我们向Python明确地指出了各个实 参对应的形参。看到这个函数调用时,Python知道应该将实参'hamster'和'harry'分别存储在形 参animal_type和pet_name中。输出正确无误,它指出我们有一只名为Harry的仓鼠。

关键字实参的顺序无关紧要,因为Python知道各个值该存储到哪个形参中。下面两个函数调 用是等效的:

describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='harry', animal_type='hamster')

注意 使用关键字实参时,务必准确地指定函数定义中的形参名。


Python:核心知识点整理大全12-笔记-CSDN博客

往期快速传送门👆(在文章最后):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/267565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 实现点击复制文本到剪贴板

vue 实现点击复制文本到剪贴板 共四种方法 1. navigator.clipboard.writeText该方法需要在安全域下才能够使用&#xff0c;比如&#xff1a;https 协议的地址、127.0.0.1、localhost <template><div><el-button type"primary" click"btn1"…

OpenVINS学习2——VIRAL数据集eee01.bag运行

前言 周末休息了两天&#xff0c;接着做上周五那个VIRAL数据集没有运行成功的工作。现在的最新OpenVINS需要重新写配置文件&#xff0c;不像之前那样都写在launch里&#xff0c;因此需要根据数据集情况配置好estimator_config.yaml还有两个标定参数文件。 VIRAL数据集 VIRAL…

Redis 五大经典业务问题

Redis 五大经典业务问题 一 缓存穿透 缓存穿透是指当请求的数据既不在缓存中也不存在于数据库中时&#xff0c;请求会直接穿透缓存层&#xff0c;到达数据库层。这通常是由于恶意攻击或者程序错误造成的&#xff0c;比如攻击者故意请求不存在的大量数据&#xff0c;导致缓存不…

静态链接库和动态链接库(隐式载入显式载入)

文章目录 动态链接库和静态链接库什么是链接库&#xff1f;静态链接库动态链接库动态链接库的俩种链接方式加载时动态链接运行时动态链接 动态链接库和静态链接库 动态链接库和静态链接库都是共享代码的方法&#xff0c;只是二者略有区别。 以C/C为例&#xff0c;一个可执行文…

DevEco Studio 生成HPK文件

DevEco Studio 生成HPK文件 一、安装环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、生成HPK文件 生成的HPK文件存放在entry文件夹下。下图是未生成HPK的样式。 生成HPK&#xff1a;菜单Build->Build Hap(s)/APP(s)->Build Hap(s)…

手动搭建koa+ts项目框架(日志篇)

文章目录 前言一、安装koa-logger二、引入koa-logger并使用总结如有启发&#xff0c;可点赞收藏哟~ 前言 本文基于手动搭建koats项目框架&#xff08;路由篇&#xff09;新增日志记录 一、安装koa-logger npm i -S koa-onerror and npm i -D types/koa-logger二、引入koa-lo…

Java EE 多线程之 CAS

文章目录 1. 什么是 CAS2. CAS 有那些应用2.1 实现原子类2.2 实现自旋锁2.3 ABA 问题2.3.1 ABA 问题的解决方案 1. 什么是 CAS CAS&#xff1a;全称Compare and swap 假如有一个内存 M 有两个寄存器 A B CAS(M, A, B) 如果 M 和 A 的值相同的话&#xff0c;就把 M 和 B 里的值…

和鲸科技携手深圳数据交易所,“数据+数据开发者生态”赋能人工智能产业发展

信息化时代&#xff0c;数据驱动决策的重要性日益凸显。通过利用数据可以深入了解市场需求、客户行为、竞争态势等关键信息&#xff0c;从而制定更为有效的战略和决策。围绕推动数据要素产业发展&#xff0c;近日&#xff0c;深圳数据交易所&#xff08;以下简称“深数所”&…

网络安全——Iptables防DDoS攻击实验

一、实验目的要求&#xff1a; 二、实验设备与环境&#xff1a; 三、实验原理&#xff1a; 四、实验步骤&#xff1a; 五、实验现象、结果记录及整理&#xff1a; 六、分析讨论与思考题解答&#xff1a; 一、实验目的要求&#xff1a; 1、掌握常见DDoS攻击SYN Flood的攻击…

PyTorch张量:内存布局

你可能对 torch 上的某些函数感到困惑&#xff0c;它们执行相同的操作但名称不同。 例如&#xff1a; reshape()、view()、permute()、transpose() 等。 这些函数的做法真的不同吗&#xff1f; 不&#xff01; 但为了理解它&#xff0c;我们首先需要了解一下张量在 pytorch 中…

scala集合_数组_元组_映射_列表

数组元组映射列表 1.11 集合&#xff08;scala.collection&#xff09; 集合是一种用来存储各种对象和数据的容器。Scala 集合分为可变的和不可变的集合。 1. 不可变集合可以安全的并发访问。 2. 可变集合可以在适当的地方被更新或扩展。这意味着你可以修改&#xff0c;添加…

二叉树--基础OJ

1.对称二叉树 题目链接&#xff1a;101. 对称二叉树 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 我们可以用递归的方法去做&#xff1a; 如果两个树互为镜像&#xff08;1.根节点的值相同&#xff0c;2.左子树的值与右子树的值对称&#xff09;则为对称二叉树&a…