文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

好用Python技巧有哪些

2023-06-22 02:12

关注

这篇文章主要介绍“好用Python技巧有哪些”,在日常操作中,相信很多人在好用Python技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”好用Python技巧有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.引言

本文是Python生态系统中一些有用技巧的分享。大多数技巧只是使用标准库中的包,但其他一些技巧会涉及一些第三方包。
在开始阅读本文内容之前,我们首先来回顾一下Python中的Iterables的概念。

根据Python标准文档,Iterable的概念如下:

一种能够一次返回一个成员的对象。

iterables的示例包括:

所有序列类型(如list、str和tuple)一些非序列类型,如dict、文件对象以及类的实现中定义了__iter__()方法

Iterables是一个需要我们牢记的概念,因为接下来我们展示的许多技巧都使用itertools包。

itertools模块提供了一些函数,用于接收Iterable对象,而不仅仅是打印逐个对象。

2.Trick 1

在工作学习中,我们经常会需要使用一个简单的函数来实现从一个list来生成新的list,set或dict.此时我们就会用到iterables概念。

举例来说:
生成List:

names = ['John', 'Bard', 'Jessica' 'Andres']lower_names = [name.lower() for name in names]

生成Set:

names = ['John', 'Bard', 'Jessica' 'Andres']lower_names = {name.lower() for name in names}

生成Dict:

names = ['John', 'Bard', 'Jessica' 'Andres']lower_names = {name:name.lower() for name in names}

个人建议:

仅当for语句、函数调用和方法调用的数量较少时使用。

3.Trick 2

有时,我们需要获得两个列表对象之间的所有可能组合。
我们首先想到的实现可能如下:

l1 = [1, 2, 3]l2 = [4, 5, 6]combinations = []for e1 in l1:  for e2 in l2:    combinations.append((e1, e2))

或者简化一下,如下:

combinations = [(e1, e2) for e1 in l1 for e2 in l1]

上述实现已经很简洁了,但标准库itertools提供product函数,从而提供了相同的结果。如下所示:

from itertools import productl1 = [1, 2, 3]l2 = [4, 5, 6]combinatios = product(l1, l2)

4.Trick3

假设有一个元素列表,我们需要在每对相邻元素之间比较或应用一些操作,这有时称为2个元素的滑动窗口。我们可以采用以下方式:

from itertools import teefrom typing import Iterabledef window2(iterable: Iterable):  it, offset = tee(iter(iterable))  next(offset)  return zip(it, offset)l = [1, 2, 3, 4, 5, 6]dd = window2(l)for a in dd:    print(a)

运行结果如下:

(1, 2)(2, 3)(3, 4)(4, 5)(5, 6)

5.Trick4

有时,我们会需要一个类来存储信息,但是如果我们觉得创建一个类并定义其__init__()函数太麻烦时,我们不妨选择使用dataclass。如下所示:

from dataclasses import dataclass@dataclassclass Person:  name: str  age: int  address: str

上述代码创建了一个具有默认构造函数的类,该类以与声明相同的顺序接收相应字段的赋值。

person = Person(name='John', age=12, address='nanjing street')

dataclass的另一个优点是,默认情况下,会生成特殊方法,如__str__、repr、__eq__等。关于dataclass的更多用法,可以参考官网。

值得一提的是我们在类中声明的成员变量的类型注释(str、int等)并不强制在构造函数中传递的值属于这种类型。也就是说dataclasses构造对象时并不执行数据类型的检查。

6.Trick5

我们有时希望将一个对象上的操作视为tuple上的操作,一种选择是使用collections.namedtuple,但也存在更类似于dataclass的实现。如下:

from typing import NamedTupleclass Coordinate(NamedTuple):  x: int  y: int

上述定义了一个标准的类可以被当做tuple来使用,如下:

coordinate = Coordinate(10, 15)coordinate.x == coordinate[0] // True coordinate.y == coordinate[1] // True

7.Trick6

假如我们有一个dataclass,需要验证输入数据是否符合类型注释。在这种情况下,安装第三方软件包pydantic并将
from dataclasses import dataclass 替换为 from pydantic.dataclasses import dataclass 即可,如下:

from pydantic.dataclasses import dataclass@dataclassclass Person:  name: str  age: int  address: str

这将生成一个类,该类具有根据成员变量声明的类型进行输入数据的解析和类型验证。Pydantic在运行时强制执行类型提示,并在数据无效时提供友好的错误提醒。

8.Trick7

在某些情况下,我们需要生成一些容器中元素频率的基本统计信息。在这种情况下,您可以使用标准结构Counter来接收iterable并根据元素的频率生成相应的统计信息。

from collections import Counterl = [1, 1, 2, 3, 4, 4]frequencys = Counter(l)print(frequencys[1])    // Ouput: 2print(frequencys[2])    // Ouput: 1print(frequencys[2323]) // Ouput: 0

Counter也提供了一些其他方法,比如如most_common,用于检索最常见的元素。

9.Trick8

如果我们相对两个list中的元素对做相应的函数处理,我们最容易想到的方法如下:

l1 = [1, 2, 3]l2 = [4, 5, 6]for (e1, e2) in zip(l1, l2):  f(e1, e2)

但是使用函数map可以让代码更加简洁一些。

l1 = [1, 2, 3]l2 = [4, 5, 6]map(f, l1, l2)

10.Trick9

有时候我们需要从一个list中随机选择一个元素,此时我们使用random.choice.如下所示:

from random import choicel = [1, 2, 3]random = choice(l)

如果我们需要随机选择多个元素呢?当然是使用random.choices.

from random import choicesl = [1, 2, 3, 4, 5]random_elements = choices(l, k=3)

上述代码中的参数k为我们随机选择元素的个数。

到此,关于“好用Python技巧有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯