- 博客(52)
- 收藏
- 关注
原创 第一篇置顶
哥们不是程序猿学习编程,只是兴趣,也不是唯一兴趣。算是新兴的兴趣吧。作为一个七零后,已过不惑之年,能有这个兴趣,我自己也觉得我是个奇葩。学习笔记纯自己手打,但是基本上是书上代码自己照着再撸一遍,算是做个记号。既然是学习笔记,为了尊重原作者的劳动,每篇笔记都发表为转载。...
2018-11-24 00:16:15 132
转载 python cookbook 学习笔记 第四章 迭代器和生成器(16) 迭代器代替while 无限循环
迭代器代替 while 无限循环问题:在代码中使用 while 循环来迭代处理数据,因为它需要某个函数或者一般迭代模式中不同的测试条件。能不能用迭代 器来重写这个循环呢?解决方案:一个常见的 IO 操作程序可能会像下面这样:CHUNKSIZE = 8192def reader(s): while True: data = s.recv(CHUN...
2018-11-30 22:32:14 217
转载 python cookbook 学习笔记 第四章 迭代器和生成器(15) 顺序迭代合并后的排序迭代对象
顺序迭代合并后的排序迭代对象问题:有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。解决方案:heapq.merge()函数可以解决这个问题:import heapqa = [1, 4, 7, 10]b = [2, 5, 6, 11]for c in heapq.merge(a, b): print(c, end= " ") # 1 2 ...
2018-11-30 22:29:13 118
转载 python cookbook 学习笔记 第四章 迭代器和生成器(14) 展开嵌套的序列
展开嵌套的序列问题:将一个多层嵌套的序列展开成一个单层序列解决方案:可以写一个包含 yield from 语句的递归生成器来轻松解决这个问题。比如:from collections import Iterabledef flatten(items, ignore_types= (str, bytes)): for x in items: if...
2018-11-30 22:26:41 153
转载 python cookbook 学习笔记 第四章 迭代器和生成器(13) 创建数据处理管道
创建数据处理管道问题:想以数据管道(类似Unix管道,但是Unix管道又是什么鬼)的方式迭代处理数据。比如,有大量的数据需要处理,但是不 能将他们一次性放入内存中。解决方案:生成器函数是一个实现管道机制的好办法。假定要处理一个非常大的日志文件:"""foo/access-log-012007.gzaccess-log-022007.gzaccess-log-032...
2018-11-30 22:23:07 148
转载 python cookbook 学习笔记 第四章 迭代器和生成器(12) 不同集合上元素的迭代
不同集合上元素的迭代问题:想在多个对象上执行相同的操作,但是这些对象在不同的容器中,在不失代码可读性的前提下,避免写重复的代码。解决方案:itertools.chain() 方法可以简化这个任务。它接受一个(书上原文是一个,但是一个没什么意思。。)做为 输入,并返回一个迭代器,有效的屏蔽掉在多个容器中迭代细节。例子:from itertools import chain...
2018-11-30 22:18:25 99
转载 python cookbook 学习笔记 第四章 迭代器和生成器(11) 同时迭代多个序列
同时迭代多个序列问题:想同时迭代多个序列,每次分别从一个序列中取一个元素解决方案:为了同时迭代多个序列,可以使用zip()函数,比如:xpta = [1, 5, 4, 2, 10, 7]ypta = [101, 78, 37, 15, 62, 99]for x, y in zip(xpta, ypta): print(x, y)zip(a, b) 会生...
2018-11-30 22:15:10 124
转载 python cookbook 学习笔记 第四章 迭代器和生成器(10) 序列上索引值迭代
序列上索引值迭代问题:想在迭代一个序列的同时跟踪正在被处理的元素索引解决方案:内置的enumerate()函数可以很好的解决这个问题:my_list = ["a", "b","c"]for idx, val in enumerate(my_list, 1): print(idx, val)"""1 a2 b3 c"""为了按传统行号输出
2018-11-30 22:12:29 100
转载 python cookbook 学习笔记 第四章 迭代器和生成器(9) 排列组合的迭代
排列组合的迭代问题:想迭代遍历一个集合中元素的所有可能排列或组合解决方案:itertools 模块提供了三个函数来解决这个问题,其中一个是 itertools.permutations(),它接收一个集合,并 产生一个元组序列,每个元组由集合中所有元素的一个可能排列组成。也就是通过打乱集合中元素排列顺序生成一个元组。 比如:from itertools import pe...
2018-11-30 22:08:59 146
转载 python cookbook 学习笔记 第四章 迭代器和生成器(8) 跳过可迭代对象的开始部分
跳过可迭代对象的开始部分问题:想遍历一个可迭代对象,但是它开始的某些元素并不感兴趣,想跳过它们。解决方案:itertools 模块中有一些函数可以完成这个任务。itertools.dropwhile()函数接收一个函数对象和一个可迭代 对象,丢弃原有序列中直到函数返回 True 之前的所有元素(说的真绕。。。),然后返回后面所有的元素。假定读取一个开始部分是几行注释的文件:...
2018-11-30 22:04:43 214
转载 python cookbook 学习笔记 第四章 迭代器和生成器(7) 迭代器切片
迭代器切片问题:想得到一个有迭代器生成的切片对象,但标准切片操作不能做到解决方案:itertools.islice()使用于在迭代器和生成器上做切片操作。比如:def count(n): while True: yield n n += 1c = count(0)#print(c[10:20])# TypeError: 'g...
2018-11-30 22:00:59 116
转载 python cookbook 学习笔记 第四章 迭代器和生成器(6) 带有外部状态的生成器函数
带有外部状态的生成器函数问题:想定义一个生成器函数,但是他会调用某个你想暴露给用户使用的外部状态值解决方案:如果像让生成器暴露外部状态给用户,可以简单的将它实现为一个类,然后把生成器函数放到__iter__()方法中 去,比如:from collections import dequeclass Linehistory(object): def __init_...
2018-11-30 21:57:31 133
转载 python cookbook 学习笔记 第四章 迭代器和生成器(5) 反向迭代
反向迭代问题:反向迭代一个序列解决方案:使用内置的 reversed() 函数,比如:a = [1, 2, 3, 4]for x in reversed(a): print(x)反向迭代仅仅当对象的大小可预先确定或者对象实现了__reversed__() 的特殊方法才能生效。如果两者都不符合, 必须先将一个对象转换为一个列表才行,比如:f = open...
2018-11-30 20:48:46 133
转载 python cookbook 学习笔记 第四章 迭代器和生成器(4) 实现迭代器协议
实现迭代器协议问题:想构建一个能支持迭代操作的自定义对象,并希望找到一个能实现迭代协议的简单方法。解决方案:在一个对象上实现迭代,最简单的方式是使用一个生成器函数。在第(2)节中,使用 Node 类来表示树形数据结构。如果想实现一个深度优先方式遍历树形节点的生成器。(这种深度方式遍历在本例中依靠了 depth_first() 函数来 实现)下面是代码示例:class N...
2018-11-30 20:45:13 96
转载 python cookbook 学习笔记 第四章 迭代器和生成器(3) 使用生成器创建新的迭代模式
使用生成器创建新的迭代模式问题:实现一个自定义的迭代模式,跟普通的内置函数,如 range() reversed() 不一样。解决方案:下面是一个产生某个范围内浮点数的生成器:def frange(start, stop, increment): x = start while x < stop: yield x x ...
2018-11-30 20:40:19 123
转载 python cookbook 学习笔记 第四章 迭代器和生成器(2) 代理迭代
代理迭代问题:构建了一个自定义容器对象,里面包含有列表,元组或其他可迭代对象。想直接在这个新容器上执行迭代操作。解决方案:实际上只需要定义一个__init__()方法,将迭代操作代理到容器内部的对象上去。比如:class Node(object): def __init__(self, value): self.value = value ...
2018-11-26 00:05:10 121
转载 python cookbook 学习笔记 第四章 迭代器和生成器(1) 手动遍历迭代器
手动遍历迭代器问题:想遍历一个对象中所有元素,但是却不想使用 for 循环解决方案:为了手动遍历迭代对象,使用 next() 函数并在代码中捕获 StopIteration 异常。比如:下面一个例子读取 一个文件中的所有行:def manual_iter(): with open("password.txt") as f: try: ...
2018-11-25 00:51:22 104
转载 python cookbook 学习笔记 第三章 数字日期和时间(16) 结合时区的日期操作
结合时区的日期操作问题:想知道某个时区的当地时间是几点解决方案:对几乎所有涉及到时区的问题,都应该使用 pytz 模块,这个包提供了Olson 时区数据库,它 是时区信息的标准,很多语言和朝族系统里都可以找到。pytz 模块一个主要用途是将 datetime 库创建的简单日期对象本地化。比如:from datetime import datetime, timedelt...
2018-11-24 23:26:29 122
转载 python cookbook 学习笔记 第三章 数字日期和时间(15) 字符串转换为日期
字符串转换为日期问题:将字符串格式的输入,转换为 datetime 对象,以便执行非字符串操作。解决方案:使用 Python 的标准模块 datetime 可以很容易解决这个问题:from datetime import datetimetext = "2018-11-24"z = datetime.now()print(z)y = datetime.str...
2018-11-24 23:22:33 127
转载 python cookbook 学习笔记 第三章 数字日期和时间(14) 计算当前月份的日期范围
计算当前月份的日期范围问题:代码需要在当前月份中循环每一天,找到一个计算日期范围的高效方法解决方案:在这样的日期循环需要事先构建一个包含有日期的列表。可以先计算出开始日期和结束日期,然 后在步进的时候使用 datetime.timedelta() 对象递增这个变量即可。下面是一个接受任意 datetime 对象并返回一个由当前月份开始日和下个月开始日期组成的元 组对象。...
2018-11-24 23:18:36 114
转载 python cookbook 学习笔记 第三章 数字日期和时间(13) 计算最后一个周五的日期
计算最后一个周五的日期问题:需要查找星期中某一天出现的日期,比如星期五。解决方案:Python 的datetime 模块中有工具函数和类可以执行这样的计算,下面是一个通用的解决 方案:from datetime import datetime, timedeltaweekdays = ["Monday", "Tuesday", "Wednesday", ..
2018-11-24 23:12:50 216
转载 python cookbook 学习笔记 第三章 数字日期和时间(12)基本的日期和时间转换
基本的日期与时间转换问题:需要执行简单的时间转换,比如天到秒,小时到分钟等的转换。解决方案:执行不同时间单位的转换和计算,使用 datetime 模块。比如,为了表示一个时间段,可以创 建一个 timedelta 实例:from datetime import timedeltaa = timedelta(days= 2, hours= 6)b = timedelt...
2018-11-24 00:03:16 115
转载 python cookbook 学习笔记 第三章 数字日期和时间(11)随机选择
随机选择问题:想从一个序列中随机抽取若干元素,或者想生成几个随机数。解决方案:random 模块有大量的函数用来产生随机数和随机选择元素。比如,想从改一个序列中随机的抽 取一个元素,可以使用 random.choice():import randomvalues = [1, 2, 3, 4, 5, 6]x = random.choice(values)print...
2018-11-23 23:58:21 98
转载 python cookbook 学习笔记 第三章 数字日期和时间(10) 矩阵与线性代数运算
矩阵与线性代数运算问题:需要执行矩阵和线性代数运算,比如矩阵乘法、寻找行列式、求解线性方程组等。解决方案:Numpy 库有一个矩阵对象可以用来解决这个问题。矩阵类似于数组对象,但是遵循线性代数的计算规则。下面的例子展示了矩阵的一些基本特性:import numpy as npm = np.matrix([[1, -2, 3], [0, ...
2018-11-23 23:52:47 100
转载 python cookbook 学习笔记 第三章 数字日期和时间(9) 大型数据运算
大型数据运算-问题:需要在大数据集(比如数组或网络)上面执行计算。解决方案:涉及到数组的重量级运算,可以使用 Numpy 库。Numpy 的一个主要特征是他会给 Python 提 供一个数组对象,相比标准的 Python 列表更适合用来做数学运算。下面展示标准列表和 Numpy 数组之间的差别:x = [1, 2, 3, 4]y = [5, 6, 7, 8]prin...
2018-11-22 20:53:49 150
转载 python cookbook 学习笔记 第三章 数字日期和时间(8) 分数运算
分数运算问题:涉及到分数计算的问题解决方案:fractions 模块可以用来执行包含分数的数学运算。比如:from fractions import Fractiona = Fraction(5, 4)b = Fraction(7, 16)print(a + b) # 27/16print(a*b) # 35/64c = a*bprint(c.nu...
2018-11-22 20:47:28 152
转载 python cookbook 学习笔记 第三章 数字日期和时间(7) 无穷大和NaN
无穷大和NaN问题:创建或测试正无穷、负无穷或NaN(非数字)的浮点数。解决方案:Python 并没有特殊的语法来表示这些特殊的浮点值,但是可以用 float() 来创建它们。比 如:a = float("inf")b = float("-inf")c = float("nan")print(a) # infprint(b) # -infprint(c) ...
2018-11-22 20:41:41 130
转载 python cookbook 学习笔记 第三章 数字日期和时间(6) 复数的数学运算
复数的数学运算问题:需要使用复数空间,或者需要使用复数来执行计算解决方案:复数可以使用函数 complex(real, imag) 或者带有 j 的浮点数来指定。比如:a = complex(2, 4) # (2+4j)b = 3 - 5jprint(a) # (2+4j)print(b) # (3-5j)对应的实部、虚部和共轭复数可以忍容易的获取。像...
2018-11-22 20:37:09 205
转载 python cookbook 学习笔记 第三章 数字日期和时间(5) 字节到大整数的打包和解包
字节到大整数的打包和解包问题有一个字节字符串,需要将他解压成一个整数,或者将一个大整数转换为一个字节字符串。解决方案:假设需要处理一个128位长的16个元素的字节字符串。比如:data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'为了将 bytes 解析为整数,使用int.from_bytes() 方法...
2018-11-21 22:29:19 138
转载 python cookbook 学习笔记 第三章 数字日期和时间(4) 二八十六进制整数
二八十六进制整数问题:转换或者输出二进制、八进制、十六进制表示的整数解决方案:将整数转换为二进制、八进制、十六进制的字符串,可以使用 bin() oct() hex() 函数:x = 1234print(bin(x)) # 0b10011010010print(oct(x)) # 0o2322print(hex(x)) # 0x4d2如果不想输出0...
2018-11-21 22:22:43 112
转载 python cookbook 学习笔记 第三章 数字日期和时间(3) 数字的格式化输出
数字的格式化输出问题:需要降数字格式化后输出,并控制数字的位数、对齐、千位分隔符和其他的细节。解决方案:格式化输出单个数字的时候,可以使用内置的 format() 函数,比如:x = 1234.56789print(format(x, "0.2f")) # 1234.57实现10个字符位置上的左、右、居中对齐print(format(x, ">10....
2018-11-20 22:52:27 140
转载 python cookbook 学习笔记 第三章 数字日期和时间(2) 执行精确的浮点数运算
执行精确的浮点数运算问题:需要对浮点数进行精确的计算,不希望有任何小误差的出现。解决方案:浮点数的一个普遍问题是不能精确的表示十进制数。并且即使是最简单的数学运算也会产生小 的误差,比如:a = 4.2b = 2.1print(a + b) #6.300000000000001print(a + b == 6.3) # False这些错误是由于底层 CPU 和...
2018-11-20 22:48:33 111
转载 python cookbook 学习笔记 第三章 数字日期和时间(1) 数字的四舍五入
数字的四舍五入问题:对浮点数执行指定精度的舍入运算解决方案:对于简单的舍入运算,使用内置的round(value, ndigits)函数即可。比如:round(1.23, 1) # 1.2round(1.27, 1) # 1.3传给round()函数的 ndigits 参数可以是负数,这种情况下,舍入运算会作用在十位、百位、千 位等上面。比如:a = 16...
2018-11-20 22:43:12 126
转载 python cookbook 学习笔记 第一章 数据结构和算法(19)合并多个字典或映射
合并多个字典或映射问题:现在有多个字典,想从逻辑上合并为一个单一的映射后执行某些操作,比如查找值或者检查某些键是否存在解决方案:假如有如下两个字典:a = {"x": 1, "z": 3}b ={"y": 2, "z": 4}现在假设必须在两个字典中执行查找操作(比如先从a中找,如果找不到,再去b中找)。一个非常简单的解 决方案就是使用 collections 模...
2018-11-19 00:18:09 94
转载 python cookbook 学习笔记 第一章 数据结构和算法(18)转换并同时计算数据
转换并同时计算数据问题:需要在数据序列上执行聚集函数(比如 sum(),min(),max()),但首先需要转换或过滤数据。解决方案:一个非常优雅的凡是去结合数据计算与转换就是使用生成器表达式参数。比如:nums = [1, 2, 3, 4, 5]s = sum(x*x for x in nums)print(s) # 55下面是更多的例子:import o...
2018-11-19 00:13:02 93
转载 python cookbook 学习笔记 第一章 数据结构和算法(17)映射名称到序列元素
映射名称到序列元素问题:有一段通过下标访问列表或者元组中元素的代码,但是这样有时候会使代码难以阅读,于是想通过名称来访问 元素。解决方案:collections.namedtuple() 函数通过使用一个普通的元组对象来解决这个问题。这个函数实际上是返回 Python中标准元组类型子类的一个工厂方法。需要传递一个类型名和需要的字段给它,他就会返回一个类。 可以初始化这个类,为定义...
2018-11-17 21:27:29 102
转载 python cookbook 学习笔记 第一章 数据结构和算法(16)从字典中提取子集
从字典中提取子集问题想要构造一个字典,它是另外一个字典的子集解决方案:最简单的方式是字典推导。比如:prices = { "ACME": 45.23, "AAPL": 612.78, "IBM": 205.55, "HPQ": 37.20, "FB": 10.75}p1 = {key: value for key, value...
2018-11-17 21:19:54 111
转载 python cookbook 学习笔记 第一章 数据结构和算法(15)过滤序列元素
过滤序列元素-** 问题**有一个数据序列,想利用以些规则从中提取出来需要的值或者是缩短序列。解决方案:最简单的过滤序列元素的方法就是使用列表推导。比如:mylist = [1, 4, -5, 10, -7, 2, 3, -1][n for n in mylist if n > 0] # [1, 4, 10, 2, 3][n for n in mylist ...
2018-11-17 18:29:59 155
转载 python cookbook 学习笔记 第一章 数据结构和算法(14)通过某个字段将几率分组
通过某个字段将记录分组问题:有一个字典火实例的序列,然后像根据某个特定的字段比如date来分组迭代访问。解决方案:itertools.groupby() 函数对于这样的数据分组操作非常实用。假设有下列的字典列表:rows = [{'address': '5412 N CLARK', 'date': '07/01/2012'}, {'address': '5...
2018-11-17 18:23:49 93
转载 python cookbook 学习笔记 第一章 数据结构和算法(13)排序不支持原生比较的对象
问题想要排序类型相同的对象,但他们不支持原生的比较操作。解决方案内置的函数 sorted() 函数有一个关键字参数key,可以传入一个callable对象给它,这个callable对象 对每个传入的对象返回一个值,这个值会被sorted用来排序这些对象。比如,如果在应用程序里面有一个User 实例序列,并且希望通过他们的User_id属性来进行排序,可以提高一个以User实例作为输...
2018-11-17 03:54:28 107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人