Python基础入门(3)—— 什么是函数递归、字典、集合、文件操作、异常处理?

文章目录

  • 01 | 🚘函数 && 递归
    • 🚔函数
    • 🚔递归
  • 02 | 🚘字典
  • 03 | 🚘集合
  • 04 | 🚘文件
  • 05 | 🚘异常处理
  • 06 | 🚘习题

Better late than never.
迟做总比不做好;晚来总比不来好。

在这里插入图片描述

01 | 🚘函数 && 递归

在Python中,函数(function)和递归(recursion)是两个非常重要的概念。函数是有一定功能的代码块,可以接受参数并返回结果。递归是一种解决问题的方法,通过自身调用来解决一个问题。

以下是关于Python函数与递归的详细讲解:

🚔函数

  1. 定义函数:在Python中定义函数使用def语句,语法如下:

    def function_name(parameters):
    	function_body
    	return [expression]
    

    其中function_name是函数的名称,parameters是函数的参数,在圆括号内列出,如果没有参数,则留空。函数体包含了要执行的代码,return关键字后面的表达式是返回值(可选),它是函数调用的结果。

  2. 调用函数:要调用函数,请输入函数的名称以及任何必需的参数,并以圆括号括起来。示例:

    def my_func(name):
    	print('Hello, ' + name)
    
    my_func('Tom')     # 输出'Hello, Tom'
    
  3. 参数传递:Python中的参数有两种(位置参数和关键字参数)。位置参数是按顺序传递给函数的,而关键字参数则是通过参数名指定。示例:

    def add_numbers(x, y):
    	return x + y
    
    result1 = add_numbers(2, 3)         # 位置参数
    result2 = add_numbers(y=3, x=2)     # 关键字参数
    
    print(result1)      # 输出5
    print(result2)      # 输出5
    
  4. 默认参数:可以在函数定义时为参数指定默认值,这样在调用函数时可以不传递该参数。示例:

    def greet(name='John'):
    	print('Hello, ' + name)
    
    greet()             # 输出'Hello, John'
    greet('Tom')        # 输出'Hello, Tom'
    
  5. 不定长参数:如果不知道将要传递多少个参数,可以在函数定义中使用*args**kwargs来接受不确定数量的位置参数和关键字参数。示例:

    def my_func(*args):
    	for arg in args:
    		print(arg)
    
    my_func(1, 2, 3, 4)     # 输出1 2 3 4
    
    def my_func(**kwargs):
    	for key, value in kwargs.items():
    		print(key + ': ' + str(value))
    
    my_func(name='Tom', age=30)     # 输出'name: Tom' 和 'age: 30'
    
  6. 匿名函数(Lambda):Python支持使用lambda表达式创建匿名函数,lambda语法如下:

    lambda arguments: expression
    

    其中arguments是参数列表,expression是函数体,它是由参数产生的返回值。示例:

    add_numbers = lambda x, y: x + y     # 创建一个lambda函		数'add_numbers'
    result = add_numbers(2, 3)           # 调用lambda函数
    print(result)                        # 输出5
    

🚔递归

递归是一种在函数中调用自身以解决问题的技术。在递归函数中,需要找到基本情况和递归规则,确保在每次递归时问题的规模都缩小了。

以下是一个通过递归计算阶乘的示例:

def factorial(n):
    if n == 1:              # 基本情况
        return 1
    else:
        return n * factorial(n-1)     # 递归规则

result = factorial(5)

print(result)           # 输出120

函数递归调用的图解可以看下图示例:

在这里插入图片描述

总之,在Python中函数和递归都是重要的编程概念,而且它们可以相互结合使用来解决各种问题。函数可以接受参数并返回值,有默认参数、不定长参数和匿名函数等特性。递归则是一种解决问题的方法,通过自身调用来解决一个问题

02 | 🚘字典

在Python中,字典(Dictionary)是一种无序、可变的数据类型,用于存储键值对。它们非常灵活,在许多编程场景中都可以派上用场。以下是关于Python字典的详细讲解:

  1. 创建字典

    要创建一个字典,请使用花括号{}并以逗号分隔键值对。示例:

    my_dict = {'name': 'Tom', 'age': 30, 'gender': 'male'}
    

    如果希望创建一个空字典,请使用空的花括号{}。示例:

    my_dict = {}
    
  2. 访问字典内的值

    可以使用方括号[]来访问字典中的特定值,也可以使用get()方法。如果访问一个不存在的键,则会引发KeyError异常。但是如果使用get()方法,则在找不到指定键时返回None,或设置的默认值(可选参数)。示例:

    my_dict = {'name': 'Tom', 'age': 30, 'gender': 'male'}
    
    print(my_dict['name'])     # 输出'Tom'
    print(my_dict.get('address'))   # 输出None
    print(my_dict.get('address', 'Beijing'))     # 输出'Beijing'
    
  3. 修改字典

    要更改字典中的值,请使用给定键的索引。示例:

    my_dict = {'name': 'Tom', 'age': 30, 'gender': 'male'}
    
    my_dict['age'] = 40
    
    print(my_dict)      # 输出{'name': 'Tom', 'age': 40, 'gender': 'male'}
    
  4. 添加和删除键值对

    要向字典中添加一个键值对,请使用给定键的索引。示例:

    my_dict = {'name': 'Tom', 'age': 30}
    
    my_dict['gender'] = 'male'
    
    print(my_dict)      # 输出{'name': 'Tom', 'age': 30, 'gender': 'male'}
    

    要从字典中删除一个键值对,请使用del语句或pop()方法。示例:

    my_dict = {'name': 'Tom', 'age': 30}
    
    del my_dict['age']
    
    print(my_dict)      # 输出{'name': 'Tom'}
    
    my_dict.pop('name')
    
    print(my_dict)      # 输出{}
    
  5. 字典长度和键值大小写转换

    要获取字典中的键数,请使用len()函数。要将字典中的所有键转换为小写或大写,请使用keys()和lower()或upper()方法。示例:

    my_dict = {'Name': 'Tom', 'Age': 30, 'Gender': 'male'}
    
    print(len(my_dict))       # 输出3
    
    lower_keys = [key.lower() for key in my_dict.keys()]
    
    print(lower_keys)         # 输出['name', 'age', 'gender']
    

    总之,在Python中,字典是一种非常有用的数据类型,可以存储键值对并提供快速且方便的访问。通过学习如何创建、访问、修改、添加和删除字典,并掌握一些基本的方法和技巧,能更好地应用它们来解决各种编程问题。

03 | 🚘集合

在Python中,集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。它们非常有用,可以帮助解决各种编程问题。以下是关于Python集合的详细讲解:

  1. 创建集合

    要创建一个集合,请使用花括号{}或set()函数,并以逗号分隔多个元素。示例:

    my_set = {1, 2, 3}
    
    my_set = set([1, 2, 3])
    

    如果希望创建一个空集合,请不要使用空的花括号{},因为这将创建一个空字典。相反,您应该使用set()函数。示例:

    my_set = set()
    
  2. 集合操作

    与其他数据类型一样,集合也支持各种操作。以下是几个重要的集合操作:

    1. 添加元素:可以使用add()方法向集合中添加元素,或使用update()方法向其添加另一个集合。示例:

      my_set = {1, 2, 3}
      
      my_set.add(4)
      
      print(my_set)    # 输出{1, 2, 3, 4}
      
      my_set.update({4, 5, 6})
      
      print(my_set)    # 输出{1, 2, 3, 4, 5, 6}
      
    2. 删除元素:可以使用remove()或discard()方法删除集合中的元素。remove()方法在需要删除的元素不存在时会引发KeyError异常,而discard()方法则不会。示例:

      my_set = {1, 2, 3}
      
      my_set.remove(2)
      
      print(my_set)    # 输出{1, 3}
      
      my_set.discard(4)
      
      print(my_set)    # 输出{1, 3}
      
    3. 集合运算:可以使用一些内置函数执行集合操作(如联合、交集和差异)。这些操作包括union()、intersection()和difference()。示例:

      set_a = {1, 2, 3}
      set_b = {3, 4, 5}
      
      set_c = set_a.union(set_b)
      
      print(set_c)     # 输出{1, 2, 3, 4, 5}
      
      set_d = set_a.intersection(set_b)
      
      print(set_d)     # 输出{3}
      
      set_e = set_a.difference(set_b)
      
      print(set_e)     # 输出{1, 2}
      
  3. 集合推导式

    与列表推导式类似,Python也具有集合推导式的概念。它允许将一行代码转换为集合中的多个元素。示例:

    my_set = {x**2 for x in range(10)}
    
    print(my_set)    # 输出{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
    

总之,在Python中,集合是一种非常有用的数据类型。通过学习如何创建、添加、删除和操作集合,并掌握一些基本的技巧,能更好地应用它们来解决各种编程问题。

04 | 🚘文件

在Python中,文件操作是一种非常常见的编程任务。它可以帮助读取、写入和操作文件数据。以下是关于Python文件操作的详细讲解:

  1. 打开文件

    要读取或写入文件,请首先打开它。在Python中,使用open()函数可以打开一个文件,该函数接受两个参数:文件名和打开模式。

    打开模式用于指定文件应如何打开。有几种不同的模式可用,包括:

    1. “r”:读取模式。默认值。如果文件不存在,则引发FileNotFoundError异常。

    2. “w”:写入模式。如果文件已存在,则其内容将被清除。如果文件不存在,则创建一个新文件。

    3. “a”:追加模式。将新内容添加到文件的末尾。如果文件不存在,则创建一个新文件。

    4. “x”:独占排他模式。创建文件,但如果文件已存在,则调用返回FileExistsError异常。

    示例:

    file = open("myfile.txt", "r")
    
  2. 读取文件

    要读取打开的文件,请使用read()或readline()方法读取文件内容。read()方法将读取整个文件,并将其作为字符串返回,而readline()方法将逐行读取文件,并返回每行作为一个字符串。示例:

    file = open("myfile.txt", "r")
    
    content = file.read()
    
    print(content)
    
    file.close()
    
  3. 写入文件

    要向文件中写入数据,请使用write()或writelines()方法。write()方法将作为参数传递的字符串写入文件,而writelines()方法将多个字符串写入文件。示例:

    file = open("myfile.txt", "w")
    
    file.write("This is my first line\n")
    file.write("This is my second line\n")
    
    file.close()
    
  4. 关闭文件

    完成对文件的读取或写入后,请务必关闭打开的文件。可以使用close()方法来关闭文件。示例:

    file = open("myfile.txt", "r")
    content = file.read()
    print(content)
    file.close()
    
  5. with语句

    Python中的with语句是一种很优美的写法,可以在代码块结束时自动关闭文件。不需要显式地调用close()方法。以下是使用with语句读取文件的示例:

    with open("myfile.txt", "r") as file:
    	content = file.read()
    	print(content)
    

总之,在Python中进行文件操作是一种非常常见的编程任务。通过学习如何打开、读取和写入文件,并了解不同的文件操作模式和用法,能更好地操作和处理文件数据。同时需要注意合理使用文件操作,避免资源浪费和不必要的安全风险。

05 | 🚘异常处理

在Python中,异常处理是一种重要的编程技术。它可以帮助捕获和处理发生在程序执行期间的错误,以避免程序崩溃或出现不可预知的行为。以下是关于Python异常处理的详细讲解:

  1. 什么是异常?

    在Python中,当代码发生错误时,将引发异常对象。异常包含有关错误的信息,例如错误类型和堆栈跟踪等。常见的异常包括ZeroDivisionError、NameError和TypeError等。示例:

    a = 10 / 0
    

    上面的代码将引发ZeroDivisionError异常,提示“division by zero”。

  2. 捕获异常

    要捕获异常,请使用try-except语句块。try块将包含可能引发异常的代码,而except块将包含异常处理代码。except块捕获特定类型的异常,并向用户提供有用的错误消息并采取适当的操作。示例:

    try:
    	a = 10 / 0
    except ZeroDivisionError as e:
    	print("Error: ", e)
    

    上述代码将捕获ZeroDivisionError异常,并输出错误信息“Error: division by zero”。

  3. 多个异常

    可以在同一个try块中处理多个异常。只需添加每个异常的一个except块即可。示例:

    try:
    	a = int(input("Enter a number: "))
    	b = int(input("Enter another number: "))
    	c = a / b
    except ZeroDivisionError as e:
    	print("Error: ", e)
    except ValueError as e:
    	print("Error: ", e)
    

    上面的代码将如果除数为零,输出“Error: division by zero”,如果输入的不是数字,输出“Error: invalid literal for int() with base 10”。

  4. finally块

    try-except语句还允许使用finally块,该块包含在完成代码块后始终运行的代码。即使异常未被捕获,finally块也会执行。示例:

    try:
    	f = open("myfile.txt", "r")
    	print(f.read())
    except FileNotFoundError as e:
    	print("Error: ", e)
    finally:
    	f.close()
    

    上述代码将打开一个文件并打印其内容。如果文件不存在,输出“Error: [Errno 2] No such file or directory"。无论文件的哪个部分出现问题,都会关闭文件。

  5. 自定义异常

    在Python中,您还可以通过创建子类来创建自定义异常。 自定义异常可用于检测特定的错误,并向用户提供更有针对性的错误消息。示例:

    class MyError(Exception):
    	def __init__(self, message):
        	self.message = message
    
    
    try:
    	raise MyError("A custom error occurred.")
    except MyError as e:
    	print(e.message)
    

    以上代码将抛出MyError异常,并输出“A custom error occurred.”。

总之,在Python中,异常处理是一种非常重要的编程技术。通过学习如何捕获和处理异常,以及了解不同类型的异常和自定义异常的用法,您将能够更好地编写健壮、可靠的程序。

06 | 🚘习题

利用字典创建3人(姓名和电话号码如下)的简易通讯录:

小赵123456789
小明123456788
小花123456787

要求输入姓名时能够以“姓名:电话”的形式反馈联系电话,当输入姓名有误时,系统提示“您的输入有误,请重新查询”。最后遍历字典,输出所有人的信息
输入样例:小明
输出样例:

小明:123456788
小赵 123456789)
小明 123456788)
小花 123456787)

以下是Python实现该简易通讯录的代码:

address_book = {
    '小赵': '123456789',
    '小明': '123456788',
    '小花': '123456787'
}

while True:
    name = input("请输入姓名:")
    if name in address_book:
        print(name + ":" + address_book[name])
    else:
        print("您的输入有误,请重新查询")

    flag = input("是否继续查询(Y/N):")
    if flag.upper() != 'Y':
        break

print("所有人的信息如下:")
for name, number in address_book.items():
    print(name, number)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年湖北省建设厅特种作业操作证报名条件是什么?

建筑施工特种作业人员是指在房屋建筑和市政工程施工活动中,从事可能对本人、他人及周围设备设施的安全造成重大危害作业的人员。建筑施工特种作业人员必须经建设主管部门考核合格,取得建筑施工特种作业人员操作资格证书(以下简称“资格证书”…

常用数据处理方式

文章目录 缺失值处理删除法填充法基于统计学变量填充基于插值填充基于模型填充基于预测填充 不处理 异常值处理基于统计分析的方法基于聚类的方法基于树的方法基于预测的方法 数据重采样标准化min-max标准化(归一化)z-score标准化(规范化&…

CSS var()的使用

最近在做流量对比的功能,有如下的效果图,当某个节点失败的时候,点击能够弹出对应的提示信息。 这个库使用的是jenkins-pipeline 的库, 但是由于它原本的提示框比较糟糕,所以我们想结合antd的tooltip进行展示&#xff0…

WhatsApp 营销:获得更多潜在客户和销售(一)

你需要了解客户的世界观才能进行有效的营销,你应该投入时间和精力来学习和实施你的业务WhatsApp营销 -因为你的客户出现在WhatsApp上,他们希望在那里联系,而不是在他们讨厌被打断的电子邮件或电话中。 SaleSmartly(ss客服&#x…

商户查询的缓存——添加redis缓存

1.什么是缓存 缓存就是数据交换的缓冲区(Cache),是存储数据的临时地方,一般读写性能较高 2.添加redis缓存 Autowired private StringRedisTemplate stringRedisTemplate; /*** 通过id查询商户信息* param id* return*/ Override public Resu…

首发 | 人工智能赋能的未来作战构想(上): 海上作战篇

源自:中国指挥与控制学会 ▲图1:报告封面和封底 一、人工智能赋能改变战争形态 ▲图2:以AI赋能万物互联 二、人工智能赋能的海上作战 ▲图3:海上作战要保持持续有效的火力输出 (一)海上防御作战构想 ▲图4&…

通过Modbus实现TTS语音全彩声光告警-博灵语音通知终端-网络语音报警灯

背景 目前PLC在工业领域应用广泛,在运行过程中可能会涉及到各种告警。 为了简单快速的实现语音声光告警,本文以大连英仕博科技出品的博灵语音通知终端为例,演示如何通过Modbus TCP协议实现声光告警推送。 播报效果演示 Modbus-博灵语音通知…

自学黑客(网络安全)看这篇就够了

写了这么多编程环境和软件安装的文章,还有很多小伙伴在后台私信说看不懂。我都有点头疼了,但是小伙伴们求学的心情我还是能理解,竟然这么多人给我反馈了,那我就再写一篇网络安全自学的教程吧!大家耐心看完,…

音频信号处理库librosa

参考: 1. librosa官网 2. librosa语音信号处理 3. 语音信号处理库 ——Librosa 4. librosa音频处理教程 5. Python音频信号处理库函数librosa介绍 0 谱分析函数 1. librosa 读取信号 librosa.load(path, sr22050, monoTrue, offset0.0, durationNone)读取音频文件…

2023年5月DAMA-CDGA/CDGP数据治理认证开班啦,我要报名学习

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中! 考试开放地区:北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中,报名从速! DAMA认证为数据…

06-HTML-列表标签

1、 <ul> 标签定义无序列表。 2、<ol> 标签定义有序列表。 属性值描述compactcompact HTML5 中不支持。HTML 4.01 中不赞成使用。 规定列表呈现的效果比正常情况更小巧。 reversedreversed规定列表顺序为降序。(9,8,7...)startnumber规定有序列表的起始值。type 1A…

QUIC在京东直播的应用与实践 | 京东云技术团队

作者&#xff1a;京东零售 周凯 一. 前言与背景 国内的互联网直播技术从2005年前后兴起&#xff0c;彼时最具代表性的直播产品是由PPLive创始人姚欣在华中科技大学就读期间发起的校园直播项目PPLive。当时的直播技术用的还是基于windows系统自带的mediaplayer内置的COM组件开…

《Linux 内核设计与实现》08. 下半部和推后执行的工作

文章目录 下半部软中断软中断的实现使用软中断 tasklettasklet 的实现使用 tasklet 工作队列工作队列的实现使用工作队列 下半部 中断处理程序的局限性&#xff1a; 中断处理程序以异步方式执行&#xff0c;并且可能打断其它代码&#xff0c;因此为了避免被打断的代码停止时间…

如何实现PLC为主站的开关量自组网无线通信?

本方案是基于Modbus RTU协议下实现的1主多从自组网无线通信形式&#xff0c;主站为S7-1200 PLC&#xff0c;DTD433H作为从站。DTD433H具备输入和输出开关量信号功能&#xff0c;信号传输方向由用户原系统主从设备所实现的功能决定。方案中采用无线开关量信号测控终端DTD433H与欧…

Java实现杨辉三角

1 问题 实现杨辉三角。 2 方法 public class textttt01 { public static void main(String[] args) { //定义了一个长度为10&#xff0c;高度为10的二维数组&#xff0c;数组中的值都为0&#xff1b; int[][] arrnew int[10][10]; for (int i0;i<ar…

TCP四次挥手

TCP四次挥手详解 文章目录 TCP四次挥手详解1. TCP四次挥手过程和状态变迁2. 为什么挥手需要四次&#xff1f;3. 为什么中间的ACK和FIN不可以像三次握手那样合为一个报文段呢&#xff1f;4. 为什么TIME_WAIT等待的时间是2MSL&#xff1f;5. 等待2MSL的意义5.1 保证客户端最后发送…

Linux环境安装iperf3(网络性能测试工具)

[rootlocalhost ]# yum search iperf 已加载插件&#xff1a;fastestmirror Loading mirror speeds from cached hostfile* base: mirrors.tuna.tsinghua.edu.cn* extras: mirrors.huaweicloud.com* updates: mirrors.tuna.tsinghua.edu.cnN/S matched: iperf iperf3-devel.i6…

Otter CTF--Network(web网络1-3)

目录 一.题目 1.Birdmans Data 2.Look At Me 3.Otter Leak 一.题目 网址 OtterCTF 1.Birdmans Data 下载文件&#xff1a; .pcap文件 Wireshark打开&#xff1a; 既然是web 我们就从http分析&#xff1a; 追踪流 HTTP流&#xff1a; 发现两个密钥key&#xff1a; {"…

nas各种共享访问协议的使用(smb,nfs,ftp,ftps,sftp,afp,webdav)

使用群晖、UNRAID、FREENAS等NAS系统的小伙伴肯定会有传输文件的需求&#xff0c;无论是在本地局域网还是远端设备&#xff0c;这种情况下当然可以使用群晖的WEB管理界面中File Station&#xff0c;但是这种方式便捷性不够&#xff0c;于是nas与本地设备文件的传输最好的方式是…

ABAP 好用的事务码工具记录(持续更新)

性能优化类 SM50-某个程序RUNNING时间过长的时候&#xff0c;可以直接跳转到对应程序位置。 使用说明&#xff1a;一般选择仅活动进程&#xff0c;过滤列表中的活动程序和用户名&#xff0c;这样可以快速的定位到进程。 通过管理>>程序>>调试直接跳转到程序运行的…