当前位置:首页 > 科技  > 软件

十个提高Python水平的高级知识点

来源: 责编: 时间:2023-12-22 17:13:14 177观看
导读本文,我们将分享一些有助于我们掌握 Python 的高级概念。如迭代器、生成器、装饰器等!一、异常处理异常处理是一个很重要的概念,它可以帮助我们更好地解决程序中的各种问题。异常是在程序执行过程中发生并中断的情况。它

本文,我们将分享一些有助于我们掌握 Python 的高级概念。如迭代器、生成器、装饰器等!cQW28资讯网——每日最新资讯28at.com

cQW28资讯网——每日最新资讯28at.com

一、异常处理

异常处理是一个很重要的概念,它可以帮助我们更好地解决程序中的各种问题。cQW28资讯网——每日最新资讯28at.com

异常是在程序执行过程中发生并中断的情况。它可能由于多种原因而发生。比如:除法运算中分母为0的情况,会抛出:ZeroDivisionError;导入不存在的包时,会抛出:ImportError;列表越界时,会抛出:IndexError。python 中大约有30个内置异常。cQW28资讯网——每日最新资讯28at.com

我们使用 try 和 except 来处理 Python 中的异常。语法如下:cQW28资讯网——每日最新资讯28at.com

try:    pass # 可能发生异常的代码except ValueError:    pass # 发生异常时执行的代码except ZeroDivisionError:    pass # 发生异常时执行的代码else:    pass # 其他情况时执行的代码finally:    pass # 最终执行的执行的代码

二、collections模块

collections 模块被称为用于存储数据的容器。例如列表、元组、集合、字典。Python 中有许多库是为了提供额外的数据结构而开发的, collections就是其中之一,旨在改进内置容器的功能。该模块中最常用的五种数据结构:cQW28资讯网——每日最新资讯28at.com

1. Counter

对可迭代对象的计数。cQW28资讯网——每日最新资讯28at.com

from collections import Counterdata = [1,1,1,2,3,4,3,3,5,6,7,7,1]count = Counter(data)print(count) # Counter({1: 4, 2: 1, 3: 4, 4: 1, 5: 1, 6: 1, 7: 2})## ⚠️ Counter有几个惊艳的方法:# 返回出现次数最多的前3个元素print(count.most_common(3)) # [('1', 4), ('3', 4), ('2', 1)]# 返回生成Counter对象的数据,迭代器格式。for i in count.elements():    print(i) # 1 1 1 2 3 4 3 3 5 6 7 7 1

2. namedtuple

给元组元素命名,并且可以通过名字访问元素。cQW28资讯网——每日最新资讯28at.com

from collections import namedtupleUser = namedtuple('User', ['name', 'sex', 'age'])user = User(name='Runoob', sex='male', age=12)print(user) # User(name='Runoob', sex='male', age=12)user = User._make(['RunoX', 'Male', 13])print(user) # User(name='RunoX', sex='Male', age=13)print(user.name, user.sex, user.age) # RunoX Male 13user = user._replace(age=22)print(user) # User(name='RunoX', sex='Male', age=22)print(user._asdict()) # {'name': 'RunoX', 'sex': 'Male', 'age': 22}

3. OrderedDict

OrderedDict 是一种可以记住它们插入顺序的字典。当然,在最新版本的 Python 中,内置的 dict 也可以记住它。cQW28资讯网——每日最新资讯28at.com

from collections import OrderedDictdictt = OrderedDict()dictt['a'] = 5dictt['d'] = 2dictt['c'] = 1dictt['b'] = 3print(dictt) # OrderedDict([('a', 5), ('d', 2), ('c', 1), ('b', 3)])

4. defaultdict

defaultdict 将返回字典中不存在的键的默认值,而不是显示键错误。当然新版的dict.get()方法也可以返回默认值。cQW28资讯网——每日最新资讯28at.com

# 创建一个默认值为0的字典from collections import defaultdictdictt = defaultdict(int)dictt['a'] = 2print(dictt['a']) # 2print(dictt['b']) # 0# 新版本的 `dict.get()` 方法dict = {'a': 1, 'b': 2}print(dict.get('a', 0)) # 1print(dict.get('c', 0)) # 0print(dict.get('c')) # None

5. deque

deque 是一个双端队列,可以从两侧添加和删除元素。cQW28资讯网——每日最新资讯28at.com

from collections import dequequeue = deque(['a', 'b', 'c'])queue.append('d')print(queue) # deque(['a', 'b', 'c', 'd'])queue.appendleft('e')print(queue) # deque(['e', 'a', 'b', 'c', 'd'])queue.pop()print(queue) # deque(['e', 'a', 'b', 'c'])queue.popleft()print(queue) # deque(['a', 'b', 'c'])

三、itertools 模块

Python itertools 模块提供了各种适用于组合计算的函数。cQW28资讯网——每日最新资讯28at.com

  1. product(iterable,iterable):两个iterables的笛卡尔积
  2. permutation(iterable):所有可能的排序,没有重复元素
  3. combinations(iterable,n):指定长度的所有可能组合,不重复。这里 n 是组合元组的大小。
  4. combinations_with_replacement(iterable,n):指定长度的所有可能的组合,重复。
  5. accumlate(iterable) :返回累积iterable元素的总和。
  6. groupby(iterable,key=FUNC) :返回一个迭代器,其中包含来自可迭代对象的连续键和组。
from itertools import product, permutations, combinations, combinations_with_replacement, accumulate, groupbya = [1,2,3]print(list(product(a,a))) # [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]print(list(permutations(a))) # [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]print(list(combinations(a,2))) # [(1, 2), (1, 3), (2, 3)]print(list(combinations_with_replacement(a,2))) # [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]print(list(accumulate(a))) # [1, 3, 6]print(list(groupby(a))) # [(1, <itertools._grouper object at 0x7f8b8b8b9d10>), (2, <itertools._grouper object at 0x7f8b8b8b9d20>), (3, <itertools._grouper object at 0x7f8b8b8b9d30>)]

四、lambda 函数

lambda 函数是一种匿名函数,它的语法只包含一个语句,即:lambda [arg1 [,arg2,.....argn]]:expression。cQW28资讯网——每日最新资讯28at.com

even_or_odd = lambda a: a%2==0numbers = [1,2,3,4,5]even = list(map(even_or_odd,numbers))print(even) # [False, True, False, True, False]

五、装饰器

装饰器是 Python 的一个特性,它可以在不显式修改现有代码的情况下向现有代码添加一些新功能。cQW28资讯网——每日最新资讯28at.com

有两种类型的装饰器——函数装饰器和类装饰器。装饰器函数在函数名前有一个@。cQW28资讯网——每日最新资讯28at.com

要理解装饰器的概念,我们首先需要了解一件事——python 中的函数是类对象。与其他对象不同,它们可以在函数内部定义,在其他函数中作为参数传递,甚至作为函数返回。cQW28资讯网——每日最新资讯28at.com

import functoolsdef decorator(func):    @functools.wraps(func)    def wrapper(*args, **kwargs):        a,b = args        print(a*b)        result = func(*args,**kwargs)        print(a/b)        return result    return wrapper@decoratordef add(x,y):    return x+yresult = add(5,6)print(result) ##

让我们理解上面装饰器的例子:cQW28资讯网——每日最新资讯28at.com

首先,我们有一个函数名 add,它的工作是获取两个变量并返回它们的总和。现在经过一段时间的工作后,我们意识到需要为同一个函数添加乘法和除法功能。现在我们有两个选择,第一个是在同一个 add 函数中添加乘法和除法代码。或者我们可以使用装饰器来添加功能而无需显式更改函数。cQW28资讯网——每日最新资讯28at.com

为了使用装饰器,我们首先在第 2 行定义了一个装饰器函数。此函数将 func 作为输入。在第二行中,我们有另一个函数,因为我们知道我们可以在函数内部定义函数。它是一个具有 *args、**kwargs 函数参数的包装函数。有了这些,两者都定义为参数,现在我们可以在函数内部传递任意数量的参数。在包装函数的主体中,我们有乘法逻辑,然后仅使用加法逻辑调用实际的加法函数,最后我们有除法逻辑。当我们使用一些参数 add(5,6) 调用 add 函数时,输出将是:cQW28资讯网——每日最新资讯28at.com

300.833333333333333411

因为它首先执行乘法逻辑并打印值,然后加法逻辑并保存值,然后除法逻辑并打印值,最后返回相加的值并打印值。cQW28资讯网——每日最新资讯28at.com

六、迭代器

生成器是一种返回可迭代对象的函数。它至少包含一个 yield 语句。yield 是 Python 中的一个关键字,用于从函数返回值而不破坏其当前状态或对局部变量的引用。带有 yield 关键字的函数称为生成器。相对于 return 你可以把 yield 理解为不中断函数的暂停,并且返回一个值。cQW28资讯网——每日最新资讯28at.com

生成器仅在需要时生成一次项目。它们的内存效率很高,占用的内存空间更少。cQW28资讯网——每日最新资讯28at.com

def fibonacci(n):    a,b = 0,1    for i in range(n):        a,b = b,a+b        yield afor i in fibonacci(5):    print(i) ## 1 1 2 3 5

七、进程和线程

线程和多处理都用于同时运行多个脚本。进程是程序的一个实例,线程是进程中的一个实体。cQW28资讯网——每日最新资讯28at.com

线程化是多个线程同时运行以执行不同任务的技术,而多处理是多个进程同时运行在不同CPU上的技术。下图对进程和线程的区别进行了说明,更多的信息请参考:这儿cQW28资讯网——每日最新资讯28at.com

cQW28资讯网——每日最新资讯28at.com

八、双下划线方法

Dunder 是 Double 和 Under 的缩写,称为双下划线方法,是python中的一种特殊方法。cQW28资讯网——每日最新资讯28at.com

num =5print(num*6) ## 30print(num.__mul__(6)) ## 30

这些方法主要用于重载预定义的运算符。例如,+、-、*、/ 是必须在数字对象周围使用的数字运算符,但 + 也用作两个字符串之间的连接运算符。所以我们可以说 + 运算符被重载来执行多个任务。cQW28资讯网——每日最新资讯28at.com

a =5b =6print(a+b) ## 11print(a.__add__(b)) ## 11c = 'hello'd = 'world'print(c+d) ## helloworldprint(c.__add__(d)) ## helloworld

九、日志

日志记录是在代码执行时捕获代码流的过程。日志记录有助于轻松调试代码。它通常在文件中完成,以便我们以后可以检索它。在 python 中,我们有一个库日志记录,可以帮助我们将日志写入文件。有五个级别的日志记录:cQW28资讯网——每日最新资讯28at.com

  1. Debug 调试:用于诊断问题的详细信息。
  2. Info 信息:成功确认。
  3. Warning 警告:发生意外情况时。
  4. Error 错误:由于比警告更严重的问题。
  5. Critical 严重:严重错误后程序无法自行运行。

这儿作者推荐大家一个简单的日志记录工具:loguru。cQW28资讯网——每日最新资讯28at.com

十、上下文管理器

上下文管理器是 Python 中的一个很好的工具,可以帮助进行资源管理。它们允许您在需要时分配和释放资源。上下文管理器最常用和最受认可的例子是 with 语句。with 主要用于打开和关闭文件。cQW28资讯网——每日最新资讯28at.com

with open('./test.txt', 'w') as f:    f.write('Hello World!')

小节

上面分享的10个提供python水平的高级知识点,希望在你工作或面试中有所帮助。cQW28资讯网——每日最新资讯28at.com

在编程的路上,挑战与精进同在,尝试学习使用装饰器 、yield、itertool 之类的高级功能,可以让你的编程生活变得更加有趣!cQW28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-52167-0.html十个提高Python水平的高级知识点

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 17个提升Python的编码技巧,从此键盘飞起

下一篇: Hypothesis, 一个很少人会用的Python测试库

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 小米官宣:2023年上半年出货量中国第一!

    小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 使用AIGC工具提升安全工作效率

    使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 阿里大调整

    阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的&ldquo;征求意见版&rdquo;:1、取消P序列
  • 网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    7月7日消息,近日有微博网友@长三角行健者爆料称,据经销商集团反馈,小米汽车目前已经开始了交付中心的筛选工作,要求候选场地至少有120个车位,建筑不能低
  • iQOO 11S新品发布会

    iQOO 11S新品发布会

    iQOO将在7月4日19:00举行新品发布会,推出杭州亚运会电竞赛事官方用机iQOO 11S。
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top