自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 收藏
  • 关注

原创 python 标准库中的生成器函数

这一节的示例多次把不同的生成器函数组合在一起使用。这是这些函数的优秀特 性:这些函数的参数都是生成器,而返回的结果也是生成器,因此能以很多不同的方式结 合在一起使用。,产出选中的,计算出的或重新排列的项。在下述几个表格中,我会概述其中的 24个,有些是内置的,有些在。可迭代的对象)中的各个元素上做计算,然后返回结果。标准库提供了很多生成器,有用于逐行迭代纯文本文件的对象,还有出色的。,每个生成器都可以产出输入的各个元素。,会应用到输入中的每个元素上,用于判断元素是否包含在输出中。处理输入的各个可迭代对象。

2019-08-31 08:49:42 320

原创 python __getattr__动态属性访问

中,可以实现一个近似字典的类(网上有大量实现),达到同样的效果。一行揭露了这个实现的一个小问题:理论上,尝试读取不存在的属性应该抛出。数据链式访问,来说明动态属性的访问。在普通的字典中访问属性中,不能使用。协议,构建一个类,实现简单版本的。FrozenJSON 类的关键是。运算符链式调用下去,现在实现。类,比大多数实现都简单,因为。),解释器才会调用特殊的。使用,没有去做复杂的实现。常规的方式获取属性(即在。异常,但这里只是说了。处理嵌套的映射和列表。

2024-01-26 11:53:10 511

原创 python 函数内省

参见“The Django admin site”文档(下面重点说明函数专有而用户定义的一般对象没有的属性。这相当于一种基本形式的注解。一般来说,为函数随意赋予属性。本节讨论与把函数视作对象相关的几个属性,先从。中函数也是对象, 除了。文档中举了下述示例,把。

2024-01-22 14:29:20 364

原创 python定义可调用的类型

不仅Python函数是真正的对象,任何Python对象都可以表现得像函数。为此,只需实现实例方法__call__。# __init__ 接受任何可迭代对象;在本地构建一个副本,防止列表参数的意外副作用。# shuffle 定能完成工作,因为 self._items 是列表。def pick(self): # 起主要作用的方法。try:except IndexError: # 如果 self._items 为空,抛出异常,并设定错误消息。

2024-01-21 19:19:18 372

原创 python 一等函数基础

在Python中,函数是一等对象。编程语言理论家把“一等对象定义在Python中,整数字符串和字典都是一等对象——没什么特别的。人们经常将“把函数视作一等对象”简称为“一等函数这样说并不完美,似乎表明这是函数中的特殊群体。在Python中,所有函数都是一等对象。

2024-01-19 15:05:17 365

原创 python 字典集合散列表原理

这意味着在最理想的状况下,越是相似但不相等的对象,它们散列值的差别应该越大。这个示例用同样的数据创建了 3 个字典,唯一的区别就是数据出现的顺序不一样。可以看到,虽然键的次序是乱的,这 3 个字典仍然被视作相等的。要注意的是,上面提到的这些变化是否会发生以及如何发生,都依赖于字典背后的具体实现,因此你。,但在它们的散列表里存放的只有元素的引用(就像在字典里只存放键而没有相应的值)。最好不要根据 JSON 的风格,用由字典组成的列表来存放这些记录。对于后者,在找到相对应的表元后,原表里的值对象会被。

2024-01-18 16:06:08 835

原创 python 集合详细

集”这个概念在Python中算是比较年轻的,同时它的使用率也比较低。set和它的不可变的姊妹类型frozenset直到Python 2.3才首次以模块的形式出现,然后在Python 2.6中它们升级成为内置类型。集合的本质是许多唯一对象的聚集。集合中的元素必须是可散列的,set类型本身是不可散列的,但是frozenset可以。因此可以创建一个包含不同frozenset的set。除了保证唯一性,集合还实现了很多基础的中缀运算符。给定两个集合a和ba | b返回的是它们的合集,a & b。

2024-01-18 11:54:30 873

原创 python 字典 MappingProxyType(不可变映射类型)

我们通过这个视图可以观察到,但是无法通过这个视图对原映射做出修改。下面简短地对这个类的用法做了个演示。如果给这个类一个映射,它会返回一个。,但有时候你会有这样的需求,比如。模块中引入了一个封装类名叫。这意味着如果对原映射做出了。标准库里所有的映射类型都是。让用户错误地修改某个映射。

2024-01-18 11:09:17 397

原创 python 字典的变种

不同的映射对象,然后在进行键查找操作的时候,这些对象会被当作一个整体被。这个类型在添加键的时候会保持顺序,因此键的迭代次序。),但它却提供了好几个实用的方法。)里有一些具体的使用示例,其中包含了下面这个。来添加新值的,所以它其实是在使用我们的。的实现上走一些捷径,导致我们不得不在它的。这样做的好处是,比起示例 ➊,方 法, 好 让 它 的 表 现 跟。这些超类继承而来的。的语言做解释器的时候很有用,可以用。的通用性更强,也更复杂,因为它把。方法默认删除并返回的是字典里的。把所有的键都以字符串的形式存储,

2024-01-18 10:56:38 370

原创 python 字典 d[k]中key不存在的解决方案

有时候为了方便起见,就算某个键在映射里不存在,我们也希望在通过这个键读取值的时候能得到一个默认值。有两个途径能帮我们达到这个目的,一个是通过这个类型而不是普通的dict,另一个是给自己定义一个dict的子类,然后在子类中实现方法。下面将介绍这两种方法。

2024-01-18 10:15:07 1196

原创 python 字典get、__getitem__、setdefault 对比

二者的效果是一样的,只不过后者至少要进行两次键查询——如果键不存在的话,就是三次,用 setdefault 只需要一次就可以完成整个操作。可能是比较微妙的一个。我们虽然并不会每次都用它,但是一旦它发挥作用,就可以节省不少次键查询,从而让程序更高效。所信奉的“快速失败”哲学。不能找到正确的键的时候,Python 会抛出异常,这个行为符合。但是要更新某个键对应的值的时候,不管使用。,给找不到的键一个默认的返回值(这比处理。都会不自然,而且效率低。示例处理单词出现情况的三行,通过。在映射对象的方法里,

2024-01-18 09:26:08 390

原创 python 字典和集合 简介

反过来说,想要进一步理解集合和字典,就得先理解散列表的原理。否则,函数会退一步,转而把。里大多数映射类型的构造方法都采用了类似的逻辑,因此你。(只有键有这个要求,值并不需要是可散列的数据类型)程序的背后,即便你的源码里并没有直接用到它。来实现的,因此它们有个共同的限制,即只有。类型不但在各种程序里广泛使用,它也是。元素的可迭代对象来初始化一个映射对象。除了这些字面句法和灵活的构造方法之外,用一个映射对象来新建一个映射对象,则是字典类型性能出众的根本原因。,而是一个比较另类的映射类型。正是因为字典至关重要,

2024-01-17 17:00:13 866

原创 python 双向队列和其他形式的队列

这是因为在新建一个双向队列的时候,你可以指定这个队列的大小,如果这个队列满员了,还可以从反向端删除过期的元素,然后在尾端添加新的元素。但是删除列表的第一个元素(抑或是在第一个元素之前添加一个元素)之类的操作是很耗时的,因为这些操作会牵扯到移动列表里的所有元素。双向队列实现了大部分列表所拥有的方法,也有一些额外的符合自身设计的方法,比如说。上面总结了列表和双向队列这两个类型的方法(object 类包含的方法除外)。模块的影响,但是为异步编程里的任务管理提供了专门的便利。类似,是设计给进程间通信用的。

2024-01-17 16:12:25 341

原创 python NumPy和SciPy 简单介绍

数据分析库就以它们为基础,提供了高效的且能存储非数值类数据的数组类型,和读写常见数据文件格式(例如。下面示例 是一个很简短的演示,从中可以窥见一些 NumPy 二维数组的基本操作。)和矩阵,这些数据结构不但能处理数字,还能存放其他由用户定义的记录。的另一个库,它提供了很多跟科学计算有关的算法,专为。都是异常强大的库,也是其他一些很有用的工具的基石。,用户能对这些数据结构里的元素进行高效的操作。的工业级数学计算功能用交互式且高度抽象的。的高效和可靠性归功于其背后的。提供的高阶数组和矩阵操作,

2024-01-17 15:50:12 378

原创 python 内存视图memoryview

questions/4845418/when-should-a-memoryview-be-used/)这个问题时是这样说的: 内存视图其实是泛化和去数学化的。它让你在不需要复制内容的前提下,在数据结构之间共享内存。的概念跟数组模块类似,能用不同的方式读写同一块内存数据,而且内容字节不会随意移动。是一个内置类,它能让用户在不复制内容的情况下操作同一个数组的不同切片。精准地修改了一个数组的某个字节,这个数组的元素是 16 位二进制整数。会把同一块内存里的内容打包成一个全新的。的主要作者,他在回答。

2024-01-17 15:23:24 511

原创 python 数组和列表的对比

虽然列表既灵活又简单,但面对各类需求时,我们可能会有更好的选择。比如,要存放1000 万个浮点数的话,数组(array)的效率要高得多,因为数组在背后存的并不是 float对象,而是数字的机器翻译,也就是字节表述。这一点就跟 C 语言中的数组一样。再比如说,如果需要频繁对序列做先进先出的操作,deque(双端队列)的速度应该会更快。如果在你的代码里,包含操作(比如检查一个元素是否出现在一个集合中)的频率很高,用 set(集合)会更合适。set 专为检查元素是否存在做过优化。

2024-01-17 15:02:41 382

原创 python 用bisect来管理已排序的序列

已排序的序列可以用来进行快速搜索,而标准库的bisect模块给我们提供了二分查找算法。让已排序的序列保持有序bisect模块包含两个主要函数,bisect和insort,两个函数都利用算法来在有序序列中查找或插入元素。

2024-01-17 14:20:16 825

原创 python list.sort方法和内置函数sorted

一个只有一个参数的函数,这个函数会被用在序列里的每一个元素上,所产生的结果将是排序算法依赖的对比关键字。比如说,在对一些字符串排序时,可以用 key=str.lower 来实现忽略大小写的排序,或者是用 key=len 进行基于字符串长度的排序。这也是这个方法的返回值是 None 的原因,提醒你本方法不会新建一个列表。在这种情况下返回 None 其实是Python 的一个惯例:如果一个函数或者方法对对象进行的是就地改动,那它就应该返回None,好让调用者知道传入的参数发生了变动,而且并未产生新的对象。

2024-01-17 13:43:01 694

原创 python 元组和列表的比较

如果要把元组当作列表来用的话,最好先了解一下它们的相似度如何。在下图中可以清楚地看到,除了跟增减元素相关的方法之外,元组支持列表的其他所有方法。还有一个例外,元组没有。列表或元组的方法和属性(那些由object类支持的方法没有列出来)方法,但是这个方法只是个优化而已。

2024-01-17 11:32:40 335

原创 python 列表推导同filter和map的比较

在本书的代码仓库(https://github.com/fluentpython/examplecode)中有名为 02-array-seq/listcomp_speed.py(https://github.com/fluentpython/example-code/blob/master/02-array-seq/listcomp_speed.py)的脚本,代码中有这两个方法的效率的比较。

2024-01-17 11:15:06 333

原创 python 内置序列类型概览

虽然内置的序列类型并不是直接从 Sequence 和MutableSequence 这两个抽象基类(Abstract Base Class,ABC)继承而来的,但是了解这些基类可以帮助我们总结出那些完整的序列类型包含了哪些功能。通过记住这些类的共有特性,把可变与不可变序列或是容器与扁平序列的概念融会贯通,在探索并学习新的序列类型时,你会更加得心应手。容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是。换句话说,扁平序列其实是一段连续的内存空间。序列类型还能按照能否被修改来分类。

2024-01-17 11:05:14 401

原创 python 抽象接口和协议总结

通过实现特殊方法,自定义数据类型可以表现得跟内置类型一样,从而让我们写出更具表达力的代码——或者说,更具 Python 风格的代码。

2024-01-17 10:53:41 393

原创 求股票最大收益问题

求股票最大收益问题

2022-10-09 23:35:30 448 1

原创 分治策略-归并排序

python 归并排序

2022-10-09 23:33:39 145

原创 python 插入排序

python 插入排序

2022-10-09 23:29:30 215

原创 c++ 11 auto、decltype比较

c++ 11 auto、decltype比较

2022-09-09 23:26:14 389

原创 对象支持上下文管理协议 (with 语句)

这里稍微有点难理解,不过它能允许嵌套使用 with 语句创建多个连接,就如上面演示的那样。上下文管理器的主要原理是你的代码会放到。语句可以很容易的避免这些问题,因为。来确保程序的正确运行。方法可以让你无需担心这些了。方法,而只需实现有一个。块开始时(即解释器调用。还有一个细节问题就是。很显然,上面的定义中。这样修改下上面的实现来。语句的作用是把函数的。多个 with 语句。

2022-03-24 22:28:20 154

原创 python functools.partial 减少某个函数的参数个数

减少接下来被调用时的参数个数。为了演示清楚,假设你有下面这样的函数。接受未赋值的参数,然后跟之前已经赋值过的参数合并起来,最后。参数来自定义排序逻辑,但是它只能接受一个单个参数的函数 (通常被用来微调其他库函数所使用的回调函数的参数.很明显是不符合条件的)。现在我们可以通过使用。如果需要减少某个函数的参数个数,你可以使用。之间的距离来排序所有的这些点。现在假设你想以某个点为基点,根据。固定某些参数并返回一个新的。来解决这个问题, 更进一步,假设你有一个点的列表来表示。

2022-03-21 15:17:41 544

原创 python io简单总结

1、文件的读写操作默认使用系统编码,可以通过调用 sys.getdefaultencoding() 来得到。在大多数机器上面都是 utf-8 编码。如果你已经知道你要读写的文本是其他编码方式,那么可以通过传递一个可选的 encoding 参数给 open()with open('somefile.txt', 'rt', encoding='latin-1') as f: ...Python 支持非常多的文本编码。几个常见的编码是 ascii, latin-1, utf-8 和 utf-16。在 we

2022-03-15 16:24:22 738

原创 io.StringIO() 和 io.BytesIO() 类来创建类文件对象操作字符串数据

io.StringIO 类 只能用于文本, io.BytesIO 类 操作二进制数据当你想模拟一个普通的文件的时候 StringIO 和 BytesIO 类是很有用的。比如,在单元测试中,你可以使用 StringIO 来创建一个包含测试数据的类文件对象,这个对象可以被传给某个参数为普通文件对象的函数。需要注意的是, StringIO 和 BytesIO 实例并没有正确的整数类型的文件描述符。因此,它们不能在那些需要使用真实的系统级文件如文件,管道或者是套接字的程序中使用。下面是例子说明:# -*-

2022-03-15 10:58:04 998

原创 mac 下配置python 虚拟环境

保存运行这个命令 source ~/.bash_profile。环境,这样新项目下载的所有包,都会存放在虚拟环境下的。虚拟环境核心目的就是为了复制一个。(python2虚拟环境创建)(python3环境创建)

2022-01-20 21:18:47 1294

原创 linux 压缩包

tar 包tar <操作> [选项] 归档名文件列表操作:-c 创建一个新的归档文件-r 向归档文件末尾追加文件-u 更新归档文件-x 从归档文件中解出文件-t 列出归档文件中的文件–delete 从归档文件中删除一个文件-A 合并两个规档文件选项:-C 指定一个解档目录-f 指定一个归档文件/设备进行操作-z 调用gzip来压缩/解压缩文件注意归档文件的“.tar”后缀名不是必须的,但是一般我们都会加上这个后缀,

2021-11-20 19:11:44 404

原创 centos7 个人git服务搭建

1. 系统环境系统: Linux:CentOS 7.2 64位由于CentOS已经内置了OpenSSH,如果您的系统没有,请自行安装。查看ssh版本$ ssh -V# 输出以下表示没问题,可以继续。 版本可能不一致,能用即可。OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013避免系统环境和其他的不一致,请核对您系统的版本,其他发行版请对应修改。2. 安装git建议以下操作都切换到root# 请确保您切换到了root账户$ su root

2021-07-16 15:15:18 146

原创 个人 shell总结

$0 Shell本身的文件名$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…$$ Shell本身的PID(ProcessID)$! Shell最后运行的后台Process的PID$? 最后运行的命令的结束代码(返回值)$- 使用Set命令设定的Flag一览$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有数。$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。$# 添加到

2021-05-17 21:51:49 189

原创 python unicodedata 处理Unicode 字符串

你正在处理 Unicode 字符串,需要确保所有字符串在底层有相同的表示。# -*- coding: utf-8 -*-# 你正在处理 Unicode 字符串,需要确保所有字符串在底层有相同的表示。# 在 Unicode 中,某些字符能够用多个合法的编码表示。为了说明,考虑下面的这个例子:s1 = 'Spicy Jalape\u00f1o's2 = 'Spicy Jalapen\u0303o'print(s1)print(s2)print(s1 == s2)# 这里的文本”Spi

2021-03-03 18:18:22 400 2

原创 python3 fnmatch和fnmatchcase

你想使用 Unix Shell 中常用的通配符 (比如 .py , Dat[0-9].csv 等) 去匹配文本字符串,fnmatch 模块提供了两个函数—— fnmatch() 和 fnmatchcase() ,可以用来实现这样的匹配。用法如下:# -*- coding: utf-8 -*-# 你想使用 Unix Shell 中常用的通配符 (比如 *.py , Dat[0-9]*.csv 等) 去匹配文# 本字符串# fnmatch 模块提供了两个函数—— fnmatch() 和 fnmatc

2021-03-03 17:33:58 684 1

原创 python 合并多个字典或映射

现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作,比如查找值或者检查某些键是否存在。a = {'x': 1, 'z': 3}b = {'y': 2, 'z': 4}现在假设你必须在两个字典中执行查找操作 (比如先从 a 中找,如果找不到再在 b中找)。一个非常简单扼解决方案就是使用 collections 模块中的 ChainMap 类。比如:from collections import ChainMapc = ChainMap(a, b)print(c)pr

2021-02-25 17:01:20 199

原创 python namedtuple

映射名称到序列元素, 你有一段通过下标访问列表或者元组中元素的代码,但是这样有时候会使得你的代码难以阅读,于是你想通过名称来访问元素。collections.namedtuple() 函数通过使用一个普通的元组对象来帮你解决这个问题。这个函数实际上是一个返回 Python 中标准元组类型子类的一个工厂方法。你需要传递一个类型名和你需要的字段给它,然后它就会返回一个类,你可以初始化这个类,为你定义的字段传递值等。代码示例:from collections import namedtupleSubsc

2021-02-25 16:04:32 142

原创 python 过滤序列元素

你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列。最简单的过滤序列元素的方法就是使用列表推导。比如mylist = [1, 4, -5, 10, -7, 2, 3, -1]print([n for n in mylist if n > 0])print([n for n in mylist if n < 0])# 使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果# 集,占用大量内存。如果你对内存比较敏感,那么你可以使用生成器表达式迭代产生#

2021-02-25 15:24:35 157

原创 python itertools.groupby() 分组排序

你有一个字典或者实例的序列,然后你想根据某个特定的字段比如 date 来分组迭代访问。itertools.groupby() 函数对于这样的数据分组操作非常实用。为了演示,假设你已经有了下列的字典列表:from operator import itemgetterfrom itertools import groupbyfrom collections import defaultdictrows = [ {'address': '5412 N CLARK', 'date': '07/0

2021-02-25 14:40:18 2071

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除