Python学习 day5
创始人
2024-09-25 22:50:26
0

资料链接:https://pan.quark.cn/s/b0304e419fa9 提取码:dwk4

一.闭包-Closure

  • 闭包(Closure)是编程中的一个重要概念,通常指的是一个函数和其相关的环境(变量等)组合在一起的结构。具体来说,闭包允许函数访问其外部作用域中的变量,即使这个函数是在其外部作用域之外被调用的。

在许多编程语言中,闭包的概念非常重要,特别是在处理异步编程和回调函数时。

闭包的特性

  1. 封闭性:闭包能够“记住”创建它的上下文环境。
  2. 私有变量:通过闭包,可以隐藏变量的状态,不让外部访问。
  3. 延迟执行:可以在外部函数返回后,依然保持对外部状态的引用。

闭包的应用场景

  1. 数据封装:可以创建私有变量,隐藏实现细节。
  2. 函数计数器:可以用闭包实现计数器功能。
  3. 创建工厂函数:通过闭包生成相关的对象或函数。
  • 闭包是一个强大的工具,但过度使用或不恰当使用可能会导致内存泄漏或性能问题,因此在编写代码时需要小心使用

  • 闭包的优缺点:

      1. 逻辑连续,当闭包作为另一个函数调用参数时,避免脱离当前逻辑而单独编写额外逻辑。
      1. 方便调用上下文的局部变量。
      1. 加强封装性,是第2点的延伸,可以达到对变量的保护作用。
  • 使用闭包的注意点(缺点)

      1. 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包
      1. 闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法,把内部变量当作它的私有属性,这时一定要小心,不要随便改变父函数内部变量的值。
实例1 def give_yasuiqian(money): 	def child_buy(obj, m): 		nonlocal money 		if money > m: 			money -= m 			print('买', obj, '花了', m, '元, 剩余', money, '元') 		else: 			print("买", obj, '失败') 	return child_buy 	 cb = give_yashuqian(1000) cb('变形金刚', 200) cb('漫画三国', 100) cb('手机', 1300) 

二.装饰器

  • 装饰器(decorators) 是一种用于修改或增强函数或方法行为的设计模式。它们是高阶函数,接受一个函数作为参数,并返回一个新的函数。通过使用装饰器,您可以在不修改原始函数代码的情况下添加功能。

  • 装饰器的基本语法

装饰器的基本语法使用 @decorator_name。这行语句应放在需要应用装饰器的函数定义之前。

  • 创建一个简单的装饰器

下面是一个简单的装饰器示例,它会在调用目标函数之前打印一条消息:

def mydeco(fn): 	fn() 	print("装饰器函数被调用了,并返回了fx") 	def fx(): 		print("fx被调用了") 		# return fn() 	return fx 	 @mydeco def myfun(): 	print("函数myfun被调用") 	 myfun()  #函数myfun被调用 #装饰器函数被调用了,并返回了fx #fx被调用了 myfun() #fx被调用了  
  • 使用 functools.wraps

    • 当您使用装饰器时,原始函数的元数据(如名称和文档字符串)可能会丢失。为了解决这个问题,您可以使用 functools.wraps 来帮助保留这些信息
  • 带参数的装饰器

    • repeat 是一个接受参数的装饰器工厂函数,它返回一个装饰器。
      decorator 是真正的装饰器,它接受一个函数 func 作为参数。
      wrapper 函数重复执行被装饰的函数 num 次。
      使用 @repeat(3) 应用装饰器,使 greet 函数被执行3次。
      注意:带参数的装饰器需要三层函数,def wrapper(args, kwargs) 传入的是被修饰的函数的参数。
  • 装饰器链

    • uppercase 和 exclamation 是两个装饰器,分别将文本转换为大写并添加感叹号。
      使用 @exclamation 和 @uppercase 创建装饰器链,它们按照声明的顺序倒着依次应用。
      say_hello 函数在执行前被链中的装饰器处理,最终输出 “HELLO, BOB!”。
  • 类装饰器

    • MyDecorator 是一个类装饰器,它接受一个函数 func 作为参数并在 call 方法中执行额外操作。
      使用 @MyDecorator 应用类装饰器,它将包装 say_hello 方法,使其在调用前后执行额外操作。与基本装饰器类似

三.Python异常

作用

用作信号通知,通知上层调用者有错误产生需要处理

1. try 语句

  • 语法
try:     可能发生异常的语句块 except 错误类型1 [as 变量名1]:     异常处理语句块1 except 错误类型2 [as 变量名2]:     异常处理语句块2 ... except 错误类型n [as 变量名n]:     异常处理语句块n except:     异常处理语句块other else:     未发生异常的语句 finally:     最终的处理语句  
  • 作用

    尝试捕获异常,得到异常通知,将程序由异常状态变为正常状态

  • 说明

    except 子句可以有 1个或多个

    except: 不给错误类型,可以匹配全部的错误类型

    else 子句里的语句会在 没有错误发生时执行,当处于异常时不执行

    finally 子句里的语句,无论何时都执行

  • 示例

try:     x = int(input("请输入一个整数:"))     print('x=', x) except ValueError:     print('您的输入不能转成整数')  print("程序结束") 

2. raise 语句

  • 问题

    # 写一个函数, get_score 函数,读取用户输入的整数成绩,  # 成绩的正常值是0~100 之间, 要求, 如果不在0~100 之间 # 报 ValueError类型的错误 def get_score():     x = int(input('请输入成绩:'))     if 0 <= x <= 100:         return x     raise ValueError      
  • 语法

    raise 异常类型 或 raise 异常对象 
  • 作用

    • 抛出一个错误,让程序进入异常状态
    • 发送错误通知给调用者
  • 示例:

## 写一个函数, get_score 函数,读取用户输入的整数成绩, ## 成绩的正常值是0~100 之间, 要求, 如果不在0~100 之间 ## 报 ValueError类型的错误 def get_score():     x = int(input('请输入成绩:'))     if 0 <= x <= 100:         return x     # raise ValueError     raise ValueError('用户输入的成绩不在 0~100 之间')  try:     score = get_score()     print(score) except ValueError as err:     print("成绩输入有误 err=", err) 

3.Python全部的错误类型

错误类型说明
ZeroDivisionError除(或取模)零 (所有数据类型)
ValueError传入无效的参数
AssertionError断言语句失败
StopIteration迭代器没有更多的值
IndexError序列中没有此索引(index)
IndentationError缩进错误
OSError输入/输出操作失败
ImportError导入模块/对象失败
NameError未声明/初始化对象 (没有属性)
AttributeError对象没有这个属性
GeneratorExit生成器(generator)发生异常来通知退出
TypeError对类型无效的操作
KeyboardInterrupt用户中断执行(通常是输入^C)
OverflowError数值运算超出最大限制
FloatingPointError浮点计算错误
BaseException所有异常的基类
SystemExit解释器请求退出
Exception常规错误的基类
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
EOFError没有内建输入,到达EOF 标记
EnvironmentError操作系统错误的基类
WindowsError系统调用失败
LookupError无效数据查询的基类
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python 解释器不是致命的)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxError Python语法错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
以下为警告类型
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告

四.Python正则表达式

  • 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re模块使 Python 语言拥有全部的正则表达式功能。正则表达式在网络爬虫、数据分析中有着广泛使用,掌握正则表达式能够达到事半功倍的效果。

1.字符匹配

方法和功能

方法功能
match()判断一个正则表达式是否从开始处匹配一个字符串
search()遍历字符串,找到正则表达式匹配的第一个位置,返回匹配对象
findall()遍历字符串,找到正则表达式匹配的所有位置,并以列表的形式返回。如果给出的正则表达式中包含子组,就会把子组的内容单独返回,如果有多个子组就会以元组的形式返回。
finditer()遍历字符串,找到正则表达式匹配的所有位置,并以迭代器的形式返回

2.特殊字符

特殊字符含义
\d匹配任何十进制数字;相当于类 [0-9]
\D与 \d 相反,匹配任何非十进制数字的字符;相当于类 [^0-9]
\s匹配任何空白字符(包含空格、换行符、制表符等);相当于类 [ \t\n\r\f\v]
\S与 \s 相反,匹配任何非空白字符;相当于类 [^ \t\n\r\f\v]
\w匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式[a-zA-Z0-9_]
\W于 \w 相反 (注:re.ASCII 标志使得 \w 只能匹配 ASCII 字符)
\b匹配单词的开始或结束
\B与 \b 相反

相关内容

热门资讯

笔记本xp系统安装安卓系统,轻... 你有没有想过,在你的老式笔记本上安装一个全新的操作系统呢?想象那台陪伴你多年的老笔记本,突然焕发出青...
安卓操作系统吃内存,安卓操作系... 手机里的安卓操作系统是不是让你感觉内存越来越不够用了?别急,今天就来给你好好分析分析这个让人头疼的问...
王者号ios系统怎么转安卓系统... 你是不是也和我一样,对王者荣耀这款游戏爱得深沉呢?尤其是当你发现某个英雄在安卓系统上玩起来更加得心应...
战神遗迹安卓苹果系统,探索神秘... 亲爱的玩家们,你是否曾在游戏中追寻那些传说中的神秘遗迹?今天,我要带你走进一个充满传奇色彩的领域——...
几何a安卓系统升级,畅享智能出... 你有没有发现,你的几何A最近变得聪明多了?没错,就是那个陪伴你上下班的几何A,它悄悄地升级了安卓系统...
系统最清爽的安卓手机,探索系统... 你有没有想过,拥有一部系统最清爽的安卓手机,就像是拥有了夏日里的一阵清风,让人心情舒畅,操作顺畅?今...
安卓10系统严重有问题,揭秘严... 最近你的安卓手机是不是也遇到了一些让人头疼的问题呢?别急,让我来给你一探究竟,看看安卓10系统到底有...
安卓系统闽政通打不开,“闽政通... 最近是不是有不少小伙伴在使用安卓手机时遇到了一个让人头疼的问题——闽政通打不开?别急,今天就来给你详...
安卓系统有指纹忘了图案,解锁攻... 手机解锁方式千千万,指纹解锁和图案解锁可谓是其中的佼佼者。但有时候,指纹解锁用得太多,导致忘记了图案...
QQ飞车安卓系统怎么换苹果系统... 你是不是也和我一样,对QQ飞车这款游戏爱得深沉呢?不过,最近我发现了一个超级有趣的问题:怎么把QQ飞...
安卓可冻结的系统文件,那些不可... 你知道吗?在安卓的世界里,有一些神秘的文件,它们就像隐藏在深宫中的宝贝,让人既好奇又敬畏。这些文件,...
安卓系统安装需要备份吗,关键指... 你最近是不是在准备给安卓手机升级系统或者安装新应用呢?别急,别急,在这之前,有个小细节你得注意一下—...
高仿ios的安卓系统,带你领略... 你有没有想过,为什么安卓手机那么受欢迎,却还是有人对iOS系统念念不忘呢?其实,现在市面上就有一种神...
安卓系统全能播放器,尽享视听盛... 你有没有发现,手机里总是装满了各种音乐、电影、电视剧,但是找到一个能让你一次性搞定所有播放需求的软件...
在哪里安装安卓系统好,安卓系统... 你有没有想过,为什么安卓系统这么受欢迎呢?它那强大的兼容性和丰富的应用生态,简直让人爱不释手。但是,...
如何自己提升安卓系统,自我提升... 你有没有发现,随着智能手机的普及,安卓系统已经成为了我们生活中不可或缺的一部分呢?但是,你是否想过,...
安卓子系统内存不足,应对策略与... 手机突然卡顿,是不是安卓子系统内存不足在作怪?别急,让我带你一探究竟,揭开这个问题的神秘面纱!一、安...
一鸣安卓系统如何安装,轻松上手... 你有没有想过,给你的安卓手机换换口味?别看它现在运行得风生水起,偶尔来点新鲜玩意儿,岂不是更带劲?今...
安卓操作系统的归属,源自谷歌的... 你有没有想过,那个陪伴你每天刷抖音、玩游戏、处理工作的安卓操作系统,它究竟是谁的孩子呢?今天,就让我...
安卓启动系统设置界面,揭秘安卓... 你有没有发现,每次打开安卓手机,那启动系统设置界面就像是个神秘的宝箱,里面藏着无数的小秘密?今天,就...