Python标准库中的10个强大的内置函数

Python标准库中的10个强大的内置函数,第1张

概述Python生态系统中有很多很棒的软件包,但是有时您所需要的只是一个内置函数。如果没有令人兴奋的新软件包的烙印,它可能不会那么迷人,但是您可以在标准库上走很长一段路。如果没有其他问题,了解以下Python内置功能可以帮助您加快开发速度并提高代码可读性。注意:本教程使用一些Pytho

Python生态系统中有很多很棒的软件包,但是有时您所需要的只是一个内置函数。如果没有令人兴奋的新软件包的烙印,它可能不会那么迷人,但是您可以在标准库上走很长一段路。如果没有其他问题,了解以下Python内置功能可以帮助您加快开发速度并提高代码可读性。

注意:本教程使用一些Python 3.7+语法

全球可用的功能#1-enumerate

enumerate当您要遍历可迭代对象时要跟踪索引时,该函数非常方便。如果从其他语言进入Python,这可以删除您可能一直在使用的计数器变量。

abcs = List('ABCDEF')# Without enumeratek = 0for letter in abcs:    print(k, letter.lower())  # => 0 a, 1 b ...    k += 1# With enumeratefor k, letter in enumerate(abcs):     print(k, letter.lower())  # => 0 a, 1 b ...

enumerate工作方式是通过返回一个枚举对象和一个__next__返回一个元组的方法(count, value)。您甚至可以使用解构来枚举更复杂的值。

abcs = [('a', 'A'), ('b', 'B'), ('c', 'C')]for k, (lower, upper) in enumerate(abcs):    print(k, lower, upper)  # => 0 a A, 1 b B ...
#2- zip

zip当您要将多个可迭代对象组合在一起时,此功能很有用。一个常见的用例是在没有直接索引的情况下同时循环两个列表。

ABCs = List('ABCDEF')abcs = List('abcdef')# Without zipfor upper in ABCs:    IDx = ABCs.index(upper)    print(upper, abcs[IDx])  # => A a, B b ...# With zipfor upper, lower in zip(ABCs, abcs):    print(upper, lower)  # => A a, B b ...

删除手动索引使代码更易于理解,因为它消除了思考索引对应的步骤。如果您喜欢花哨的东西,可以将其enumerate与之结合,zip因为enumerate它不在乎它会收到什么样的可迭代项。

for k, (upper, lower) in enumerate(zip(ABCs, abcs)):    print(k, upper, lower)  # => 0 A a, 1 B b ...
#3-map

map函数具有强大的通用性,并且了解它可以帮助您加快计算速度multiprocessing。从概念上讲,map将给定函数应用于可迭代的每个元素,然后按顺序返回结果。我们可以lambda用来快速创建函数f(x) = abs(x ** 2 - 4 * x)并将其映射到的某些值x

func = lambda x: abs(x ** 2 - 4 * x)xs = range(10)# Without mapresults = [func(x) for x in xs]print(results)  # => [0, 3, 4, 3, ...]# With mapresults = List(map(func, xs))print(results)  # => [0, 3, 4, 3, ...]

有了map,很明显,我们正在尝试将其应用于func所有应用,xs但没有确切说明如何做。例如,如果xs向量很大,我们可以mapmultiprocessing.Pool对象上使用类似方法来加快计算速度。

from multiprocessing import Pool, cpu_countdef func(x):     return abs(x ** 2 - 4 * x)xs = range(1_000_000)with Pool(cpu_count()) as pool:    results = pool.map(func, xs)print(len(results))  # => 1000000

请注意,我们使用with关键字来创建用于管理处理池资源的上下文。该cpu_count函数将返回机器上可用的内核数,并将并行pool.map应用于多个func项目xs。这证明这map也为表达单个程序,多个数据(SPMD)样式的计算提供了有用的语法。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:721195303

 

#4-dir

dir函数有助于对Python对象进行自省(以查看它们具有哪些属性)。例如,我们可以dir用来查看os模块中定义的内容。

import osprint(dir(os))  # => ['CLD_CONTINUED', 'CLD_DUMPED', ...]

我们还可以dir用来观察Python数据模型基础上的特殊方法

print(dir(List('ABCDEF')))  # => ['__add__', '__class__', ...]

我们不仅可以看到类似的方法appendsort我们的名单上,但是我们也可以看到该__iter__方法,involked时返回迭代。

字符串模块#5- string.ascii_uppercase

string模块包含有用的常量,可以节省一些键入时间。例如,如果您需要英文字母的所有字母,则可以使用string.ascii_lowercasestring.ascii_uppercase

import stringprint(string.ascii_lowercase)print(string.ascii_uppercase)

就个人而言,我使用的string.ascii_uppercase是384孔板,其孔名称从“ A1”到“ P24”

itertools模块

顾名思义,该itertools模块包含用于处理可迭代对象的实用程序。这些迭代器构建块不仅可以通过延迟执行来提高内存效率,而且还可以为几种常见的转换提供清晰的语法。

#6- itertools.cycle

itertools.cycle函数采用一个迭代器,并返回一个迭代器,该迭代器将无限循环遍历原始输入值。

import numpy as npimport matplotlib.pyplot as pltfrom itertools import cyclen_lines = 10n_pts = 10styles = [ 'k-', 'b--', 'r-', 'g--' ]plt.figure()for k, style in zip(range(n_lines), cycle(styles)):    x = np.arange(n_pts)    y = np.sqrt(x) + np.random.rand(n_pts)    plt.plot(x, y, style, label=f'line {k}: {style}')plt.legend()plt.show()

如您所见,这对于循环绘制样式很有用,因为要指定大量样式并且可以重复一些样式很麻烦。请注意,它cycle是在内部使用的zip,因此循环样式的迭代器不会耗尽len(styles) < n_lines

#7- itertools.product

itertools.product函数返回输入可迭代项的笛卡尔积,这只是说它构成网格的一种好方法。

import stringfrom itertools import productrow_names = string.ascii_uppercase[:16]col_names = range(1, 25)wells = List(product(row_names, col_names))print(wells)  # => [('A', 1), ('A', 2), ...]

在这里,我们获得了384个元组(16行* 24列)的列表,它们像里程表一样在输入可迭代项中循环。

functools模块

functools模块包含可作用于其他功能的功能。您可以在这里找到许多很棒的功能编程实用程序。

#8- functools.partial

functools.partial函数允许我们使用Curry函数,这意味着需要提前将某些参数指定为固定值。咖喱函数将返回一个新函数,该函数需要较少的参数。

from functools import partial# f takes 2 argumentsdef f(x, y):    return abs(x ** 2 - 4 * y)# g takes 1 argumentg = partial(f, y=0)print(g(4))  # => 16

这将打印,16因为g(x) = f(x, y=0) = abs(x ** 2)。当使用假定输入函数具有特定签名的高阶函数(即pool.map用于多处理)时,这特别有用。

有用的IO模块

包括这些内置模块可能会作弊,因为它们本身不是功能。但是,它们提供了用于读取和写入不同类型数据的简单接口,因此将这些功能一起考虑似乎更加合乎逻辑。

#9- JsON

Json模块提供了用于读取和写入JsON数据的内置接口。

import Jsondata = {    'name': 'Bia',    'color': 'Black',    'breed': 'Labrador mix'}with open('data.Json', 'w') as fd:    Json.dump(data, fd)  # => data.Json JsON file createdwith open('data.Json', 'r') as fd:    data_Json = Json.load(fd)print(data_Json)  # => {'name': 'Bia', ...}

在处理来自网络的数据,自己进行抓取或使用与JsON配合使用的其他语言时,这特别有用。

#10-pickle

pickle模块提供了用于读取和写入腌制对象的内置接口。酸洗是将Python对象序列化为可以写入磁盘的平面二进制结构的过程。pickle因此,该模块对于将对象保存为当前状态以供以后使用很有用。

import picklemodel = {    'method': 'logistic',    'weights': [-0.34, 0.45, 0.72, -1.21]}with open('model.pkl', 'wb') as fd:    pickle.dump(model, fd, pickle.HIGHEST_PROTOCol)  # => model.pkl createdwith open('model.pkl', 'rb') as fd:    model_pkl = pickle.load(fd)print(model_pkl)  # => {'method': 'logistic', ...}

这种用例在机器学习应用程序中很常见,其中模型是Python对象,权重是必须保存的内部状态。


在这里还是要推荐下我自己建的Python学习群:721195303,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

 

 

总结

以上是内存溢出为你收集整理的Python标准库中的10个强大的内置函数全部内容,希望文章能够帮你解决Python标准库中的10个强大的内置函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1189115.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存