我的编程空间,编程开发者的网络收藏夹
学习永远不晚

分享9个好用的Python技巧

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

分享9个好用的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 product
l1 = [1, 2, 3]
l2 = [4, 5, 6]
combinatios = product(l1, l2)

4.Trick3

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


from itertools import tee
from typing import Iterable

def 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
@dataclass
class 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 NamedTuple
class 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
@dataclass
class Person:
  name: str
  age: int
  address: str

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

8.Trick7

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


from collections import Counter
l = [1, 1, 2, 3, 4, 4]
frequencys = Counter(l)
print(frequencys[1])    // Ouput: 2
print(frequencys[2])    // Ouput: 1
print(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 choice
l = [1, 2, 3]
random = choice(l)

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


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

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

11.总结

本文重点介绍了在python中9个和迭代相关的使用技巧,可以方便提升大家的工作效率。

到此这篇关于分享9个好用的Python技巧的文章就介绍到这了,更多相关Python技巧内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

分享9个好用的Python技巧

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

分享9个实用的Python技巧

本篇内容介绍了“分享9个实用的Python技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!清理字符串输入对用户输入进行清理的问题几乎适用于
2023-06-16

20个Python常用技巧分享

Python的可读性和简单性是其广受欢迎的两大原因,本文介绍20个常用的Python技巧来提高代码的可读性,并能帮助你节省大量时间,下面的技巧将在你的日常编码练习中非常实用
2023-05-14

分享Python 的十个小技巧

一. 列表、字典、集合、元组的使用  from random import randint, sample  # 列表解析  data = [randint(-10, 10) for _ in xrange(10)]  filter(lam
2023-01-31

让你更好使用Typescript的11个技巧分享

学习Typescript通常是一个重新发现的过程。本文将总结几个技巧,帮助你充分发挥语言的潜力,感兴趣的小伙伴可以跟随小编一起学习一下
2023-01-05

十三个写好shell脚本的技巧分享

前言产品的最终用户通常不懂技术,所以不管你怎么折腾产品代码都无所谓。但脚本代码不一样,它们是开发人员写给开发人员的。有多少次,你运行./script.sh,然后输出一些东西,但却不知道它刚刚都做了些什么。这是一种很糟糕的脚本用户体验。我将在
2022-06-04

Python语言的10个小技巧分享

这篇文章主要讲解了“Python语言的10个小技巧分享”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python语言的10个小技巧分享”吧!10个Python小技巧1. 用ZIP处理列表假设
2023-06-16

python property的使用技巧分享

property属性一种用起来像是使用实例属性一样的特殊属性,可以对应于某个方法既要保护类的封装特性,又要让开发者可以使用 对象.属性 的方式操作方法,@property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对 (
2022-06-02

7个Python中的隐藏小技巧分享

Python是每个程序员都喜欢的语言,因为它易于编码和易于阅读的语法。但是,你知道python有一些很酷的技巧可以用来让事情变得更简单吗?在今天的内容中,我将与你分享7个你可能从未使用过的Python技巧
2023-03-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录