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 相反

相关内容

热门资讯

安卓下载系统在哪里,文件生成与... 你有没有想过,手机里那些好玩的应用都是从哪里来的呢?没错,就是安卓下载系统!今天,我就要带你一探究竟...
安卓系统没有封口吗,揭秘无封口... 你有没有发现,安卓系统好像总是那么自由自在,没有像iOS那样严格的封口呢?这可真是让人又爱又恨啊!今...
安卓系统10电池优化,深度解析... 你有没有发现,自从升级到了安卓系统10,你的手机电池续航能力好像有了不小的提升呢?这不,今天就来和你...
读书郎安卓系统更新,解锁智能学... 你有没有发现,最近你的读书郎安卓系统好像变得不一样了?没错,就是那个陪伴你阅读时光的小助手,它悄悄地...
安卓系统文件目录build,A... 你有没有好奇过,你的安卓手机里那些神秘的文件目录里藏着什么秘密?今天,就让我带你一探究竟,揭开安卓系...
车载导航安卓系统大全,全面解析... 你有没有想过,开车出门的时候,如果没有了导航,那可真是寸步难行啊!现在,车载导航安卓系统可是越来越流...
安卓系统自己扣流量,揭秘背后的... 手机里的流量怎么就“飞”得那么快呢?你是不是也和我一样,时不时地发现安卓系统的手机流量消耗得特别快,...
基于安卓的订票系统,一键掌握 你有没有想过,订票这件事儿,竟然也能变得如此轻松愉快?没错,就是那个基于安卓的订票系统,它就像一位贴...
安卓系统也能升级,畅享智能生活... 你知道吗?在这个科技飞速发展的时代,手机更新换代的速度简直让人眼花缭乱。而作为手机灵魂的安卓系统,自...
腾讯天御系统安卓,安卓安全防护... 你知道吗?在互联网的世界里,安全可是个大问题。不过别担心,今天我要给你介绍一个超级厉害的守护神——腾...
安卓系统怎么关闭动态,实际应用... 你有没有发现,安卓手机的动态功能有时候还挺烦人的?比如,你刚刚看完一条朋友圈,结果它又跳出来,让你不...
诺基亚925刷安卓系统,深度解... 你手中的诺基亚925是不是已经有点儿老气横秋了?别急,今天就来给你来点新鲜的!咱们聊聊如何给这款经典...
安卓系统测试需要技能,从入门到... 你有没有想过,为什么你的安卓手机总是时不时地给你带来惊喜,有时候是流畅得像风一样,有时候却又卡得像老...
天敏刷 安卓系统,深度解析与全... 你有没有想过,手机刷机竟然也能成为一种乐趣?没错,今天就要来和你聊聊这个话题——天敏刷与安卓系统。想...
安卓手机系统应用降级,轻松恢复... 你有没有发现,你的安卓手机最近有点“老态龙钟”了呢?运行速度慢了下来,应用卡顿成了家常便饭。别急,今...
苹果相对安卓系统优势,五大优势... 你有没有发现,手机圈里最近可是热闹非凡呢!苹果和安卓两大阵营,就像武侠小说里的两大门派,各有各的绝技...
安卓aex系统官网,安卓生态新... 你有没有听说过安卓AEX系统?这个系统在手机圈里可是小有名气的呢!今天,我就要带你深入了解一下安卓A...
安卓系统提示手机病毒,警惕恶意... 最近你的安卓手机是不是也时不时地跳出一些奇怪的提示,告诉你手机里可能存在病毒呢?别慌,今天就来给你好...
为老版安卓系统文件,探寻系统核... 你有没有发现,手机里的那些老版安卓系统文件,就像是一段段珍贵的回忆,它们承载着我们的青春岁月。今天,...
鲜花预订系统安卓开发,打造便捷... 你有没有想过,在这个快节奏的生活里,送上一束鲜花,给亲朋好友带来一份惊喜,是多么温馨的一件事呢?而现...