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系统和安卓图文,iOS与... 你有没有想过,为什么你的手机屏幕上总是出现那么多的图标和菜单?其实,这一切都离不开那个默默无闻的“灵...
win系统下切换安卓,双系统体... 亲爱的电脑迷们,你是否曾想过,在Windows系统的世界里,也能轻松穿梭到安卓的海洋?没错,今天我要...
电脑安卓国产双系统,一机多能新... 你有没有想过,你的电脑也能变身成安卓手机呢?没错,就是那种可以下载应用、玩游戏、看视频的安卓手机!今...
安卓系统u盘目录,轻松管理文件... 你有没有想过,你的安卓手机里那个小小的U盘,竟然能藏下那么多的秘密?今天,就让我带你一探究竟,揭开安...
安卓系统面容账单识别,安全便捷... 你有没有发现,现在手机里的新功能越来越神奇了?比如说,安卓系统里的面容账单识别,简直就像是个贴心的私...
CARLIFE安卓系统手机下载... 亲爱的车主朋友们,你们是不是也和我一样,对车载系统有着超乎寻常的热爱呢?想象在驾驶的过程中,一边享受...
安卓导航系统语言,智能导航体验... 你有没有发现,现在手机导航系统越来越智能了?尤其是安卓手机,导航功能强大到让人惊叹。今天,就让我带你...
蓝光机带安卓系统,创新科技引领... 你有没有想过,家里的电视是不是也能像手机一样,随时随地下载各种应用,畅游网络世界呢?现在,蓝光机带安...
安卓系统跑步音乐app,运动与... 你有没有发现,现在跑步已经不仅仅是一项运动了,它还成了一种潮流,一种生活态度。想象一边挥洒汗水,一边...
安卓推送系统默认通道,揭秘默认... 你有没有发现,现在手机上的App推送消息真是无处不在啊!有时候,你甚至还没来得及看一眼,手机就“叮咚...
安卓系统老杀进程,lmkd进程... 你有没有发现,你的安卓手机有时候就像个调皮的小孩子,总是时不时地“杀”掉一些后台运行的进程。这可真是...
远程温控系统安卓界面,远程温控... 你有没有想过,在寒冷的冬日里,不用离开温暖的被窝,就能轻松调节家里的暖气温度?或者是在炎炎夏日,你在...
安卓手机申请鸿蒙系统,详细步骤... 你有没有想过,你的安卓手机也能变身成为超级英雄?没错,就是那个传说中的鸿蒙系统!听说这个系统能让你的...
诺基亚怎么变安卓系统,转换之路... 你有没有想过,把你的诺基亚手机变成安卓系统,让它焕发第二春呢?想象原本只认识Windows系统的诺基...
安卓系统手表京东自营,安卓系统... 你有没有想过,手腕上戴一块智能手表,就像是给你的生活添了一抹科技的色彩呢?想象在忙碌的都市生活中,你...
安卓系统语言设置选项,个性化您... 亲爱的手机控们,你们有没有遇到过这种情况:看着手机上的英文菜单,一脸懵逼,心里默默念叨:“这啥玩意儿...
修改安卓系统内存位置,释放手机... 手机内存不够用,是不是让你头疼得要命?别急,今天就来教你一招,轻松修改安卓系统内存位置,让你的手机瞬...