
python_cookbook
ab_xue
这个作者很懒,什么都没留下…
展开
-
[00404]使用生成器创建新的迭代模式
使用生成器创建新的迭代模式一、 解决问题 你想实现一个自定义迭代模式,跟普通的内置函数比如 range() , reversed() 不一样。二、解决方案 生成器函数三、代码说明#!/usr/bin/env pythondef frange(stop, start = 0, increment = 1): x = start while x < stop:原创 2017-01-23 17:02:42 · 247 阅读 · 0 评论 -
[00307]无穷大与NaN
无穷大与NaN一、 解决问题 创建或测试正无穷、负无穷或NaN(非数字)的浮点数二、解决方案 float()来创建 inf/-inf/nan三、代码说明#!/usr/bin/env pythona = float("inf") #->infb = float("-inf") #->-infc = float("nan") #->nanprint (a)print (b)pri原创 2017-01-16 13:58:11 · 343 阅读 · 0 评论 -
[00800]类与对象
第八章 类与对象·原创 2017-01-14 17:19:25 · 192 阅读 · 0 评论 -
[00308]复数的数学运算
复数的数学运算一、 解决问题 使用复数来执行一些计算操作二、解决方案 complex(real, imag), 带有后缀j的浮点数三、代码说明#!/usr/bin/env pythona = complex(2, 4)b = 3 -5jprint (a) #->(2+4j)print (b) #->(3-5j) #属性print (a.real) #->2.0print (a原创 2017-01-16 13:38:19 · 286 阅读 · 0 评论 -
[00000] 模板
序列中出现次数最多的元素一、 解决问题>二、解决方案 类: 方法: 三、代码说明四、关联知识五、总结六、代码地址github地址 目录/文件:first_selection/learn_collections_counter.py七、参考 Python官网:原创 2017-01-04 19:43:58 · 303 阅读 · 0 评论 -
[00305]字节到大整数的打包与解包
字节到大整数的打包与解包一、 解决问题 你有一个字节字符串并想将它解压成一个整数。或者,你需要将一个大整数转换为一个字节字符串二、解决方案 int.from_bytes() / int.to_bytes()三、代码说明#!/usr/bin/env python"""使用场景: 密码管理,文件加密中,网络"""data = b'\x00\x124V\x00x\x90\xab\x原创 2017-01-16 12:01:38 · 322 阅读 · 0 评论 -
[00304]二八十六进制整数
二八十六进制整数一、 解决问题 需要转换或者输出使用二进制,八进制或十六进制表示的整数。二、解决方案 bin(), oct(), hex(),int()三、代码说明#!/usr/bin/env pythonx = 1234print(bin(x))#->0b10011010010print(oct(x))#->0o2322print(hex(x))#->0x4d2"""不想输入0原创 2017-01-16 11:42:03 · 298 阅读 · 0 评论 -
[00303]数字的格式化输出
数字的格式化输出一、 解决问题 将数字格式化后输出,并控制数字的位数、对齐、千位分隔符和其他的细节。二、解决方案 format()三、代码说明#!/usr/bin/env pythonx = 1234.56789# two decimal places of accuracyprint (format(x, "0.2f")) #->1234.57# 右对齐10个字符,一位精度prin原创 2017-01-16 11:30:19 · 350 阅读 · 0 评论 -
[00302]执行精确的浮点数运算
执行精确的浮点数运算一、 解决问题 需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现二、解决方案 decimal 模块三、代码说明#!/usr/bin/env pthonfrom decimal import Decimal"""Decimal 接受字符串来表示数字, 一般用于金融领域"""a = Decimal("4.2")b = Decimal("2.1")c原创 2017-01-16 11:03:04 · 252 阅读 · 0 评论 -
[00301]数字的四舍五入
数字的四舍五入一、 解决问题 对浮点数执行指定精度的舍入运算。二、解决方案 使用内置函数 round(value, ndigits)三、代码说明"""当一个值刚好在两边边界的中间时,round() 函数返回离它最近的偶数round(1.5) == round(2.5) == 2"""print (round(1.23, 1)) #->1.2print (round(1.27,原创 2017-01-16 10:53:02 · 403 阅读 · 0 评论 -
[00300]数字日期和时间
关于数字日期和时间原创 2017-01-16 10:28:53 · 373 阅读 · 0 评论 -
[00309]大型数组运算
大型数组运算一、 解决问题 在大数据集(比如数组或网格)上面执行计算二、解决方案 NumPy 库 提供了一个数组对象三、代码说明#!/usr/bin/env pythonx = [1, 2, 3, 4]y = [5, 6, 7, 8]print(x * 2)#print(x + 10) 报错print (x + y)import numpy as npax = np.array(原创 2017-01-16 19:10:02 · 261 阅读 · 0 评论 -
[00310]矩阵与线性代数运算
矩阵与线性代数运算一、 解决问题 执行矩阵和线性代数运算,比如矩阵乘法、寻找行列式、求解线性方程组二、解决方案 NumPy 库三、代码说明#!/usr/bin/env pythonimport numpy as np#创建矩阵m = np.matrix([[1, -2, 3],[0, 4, 5],[7, 8, -9]])print (m)print (m.T)print (m原创 2017-01-17 17:04:20 · 274 阅读 · 0 评论 -
[00402]代理迭代
代理迭代一、 解决问题 你构建了一个自定义容器对象,里面包含有列表、元组或其他可迭代对象。 你想直接在你的这个新容器对象上执行迭代操作。二、解决方案> __iter__() 重写这个方法 三、代码说明#!/usr/bin/env pythonclass Node: def __init__(self, value): self._value = value原创 2017-01-23 16:24:21 · 288 阅读 · 0 评论 -
[00401]手动遍历迭代器
手动遍历迭代器一、 解决问题 你想遍历一个可迭代对象中的所有元素,但是却不想使用for循环。二、解决方案 next() 函数, 捕获 StopIteration异常三、代码说明#!/usr/bin/env python#coding= utf-8def manual_iter(): with open("info.txt", 'rb') as f: try:原创 2017-01-23 10:57:54 · 233 阅读 · 0 评论 -
[00400]迭代器与生成器
迭代器与生成器原创 2017-01-23 10:44:36 · 204 阅读 · 0 评论 -
[00316]结合时区的日期操作
结合时区的日期操作一、 解决问题 你有一个安排在2012年12月21日早上9:30的电话会议,地点在芝加哥。 而你的朋友在印度的班加罗尔,那么他应该在当地时间几点参加这个会议呢?二、解决方案 pytz 模块(已被废弃), datetime 模块三、代码说明#!/usr/bin/env pythonfrom datetime import datetimefrom pytz import原创 2017-01-23 10:37:19 · 279 阅读 · 0 评论 -
[00315]字符串转换为日期
字符串转换为日期一、 解决问题 应用程序接受字符串格式的输入,但是你想将它们转换为 datetime 对象以便在上面 执行非字符串操作。二、解决方案 datetime 模块三、代码说明#!/usr/bin/env pythonfrom datetime import datetime"""格式说明: %Y: 4位年 %m: 月份strptime: 使用纯粹的Pyt原创 2017-01-23 10:13:10 · 412 阅读 · 0 评论 -
[003008]分数运算
分数运算一、 解决问题 分数计算问题二、解决方案 fractions 模块三、代码说明#!/usr/bin/env pythonfrom fractions import Fractiona = Fraction(5, 4)b = Fraction(7, 16)print (a + b)print (a * b)# 分母print (a.numerator)#分子print原创 2017-01-16 18:58:35 · 385 阅读 · 0 评论 -
[00314]计算当前月份的日期范围
计算当前月份的日期范围一、 解决问题 需要在当前月份中循环每一天,想找到一个计算这个日期范围的高效方法二、解决方案 datetime 模块 calendar 模块三、代码说明from datetime import datetime, date, timedeltaimport calendardef get_month_range(start_date=None): i原创 2017-01-17 18:01:46 · 338 阅读 · 0 评论 -
[00313]计算最后一个周五的日期
计算最后一个周五的日期一、 解决问题 查找星期中某一天最后出现的日期,比如星期五二、解决方案 datetime模块三、代码说明#!/usr/bin/env pythonfrom datetime import timedeltaa = timedelta(days=2, hours=6)b = timedelta(hours=4.5)c = a + bprint (c) #->2原创 2017-01-17 17:48:09 · 956 阅读 · 0 评论 -
[00312]基本的日期与时间转换
基本的日期与时间转换一、 解决问题 执行简单的时间转换,比如天到秒,小时到分钟等的转换二、解决方案 datetime 模块三、代码说明from datetime import timedeltaa = timedelta(days=2, hours=6)b = timedelta(hours=4.5)c = a + bprint (c) #->2 days, 10:30:00pr原创 2017-01-17 17:37:20 · 284 阅读 · 0 评论 -
[00311]随机选择
随机选择一、 解决问题 从一个序列中随机抽取若干元素,或者想生成几个随机数。二、解决方案 random 模块三、代码说明#!/usr/bin/env python# random 模块import randomvalues = [1, 2, 3, 4, 5, 6]#取一个值print (random.choice(values))print (random.choice(values原创 2017-01-17 17:15:25 · 263 阅读 · 0 评论 -
[00802]自定义字符串输出格式
自定义字符串输出格式一、 解决问题 通过 format() 函数和字符串方法使得一个对象能支持自定义的格式化二、解决方案 重新–format–()钩子函数三、代码说明#!/usr/bin/env python_formats = { 'ymd' : '{d.year}-{d.month}-{d.day}', 'mdy' : '{d.month}/{d.day}/{d.ye原创 2017-01-14 18:04:55 · 329 阅读 · 0 评论 -
[00803]让对象支持上下文管理协议
让对象支持上下文管理协议一、 解决问题 想让对象支持上下文管理协议(with语句)。二、解决方案 重新–enter–(), –exit–() 让对象能够兼容with语句,比如:获取资源和释放资源的类三、代码说明#!/usr/bin/env pythonfrom socket import socket, AF_INET, SOCK_STREAMclass LazyConnecti原创 2017-01-14 18:31:17 · 279 阅读 · 0 评论 -
[00804]创建大量对象时节省内存方法
创建大量对象时节省内存方法一、 解决问题 程序要创建大量(可能上百万)的对象,导致占用很大的内存。二、解决方案 重新–slots–属性三、代码说明#!/usr/bin/env pythonclass Date: """ 当定义了__slots__属性时, ython就会针对实例采用一种更加紧凑的内部表示, 不在让每个实例都创建一个_原创 2017-01-14 18:46:27 · 353 阅读 · 0 评论 -
[00105]字符串搜索和替换
字符串搜索和替换一、 解决问题 字符串中搜索和匹配指定的文本模式二、解决方案 str.replace() re.sub()/subn()三、代码说明text = 'yeah, but no, but yeah, but no, but yeah'#全部替换text = text.replace('yeah', 'yep')print(text) #->yep, but no原创 2017-01-13 15:18:02 · 216 阅读 · 0 评论 -
[00106]字符串忽略大小写的搜索替换
字符串忽略大小写的搜索替换一、 解决问题 忽略大小写的方式搜索与替换文本字符串二、解决方案 re.IGNORECASE三、代码说明#!/usr/bin/env pythonimport retext = 'UPPER PYTHON, lower python, Mixed Python'resval = re.findall('python', text, flags=re.IGNOR原创 2017-01-13 15:31:03 · 497 阅读 · 0 评论 -
[00100] 字符串和文本
100-200为字符串和文本处理的相关方法说明原创 2017-01-13 13:30:24 · 376 阅读 · 0 评论 -
[00019]转换并同时计算数据
转换并同时计算数据一、 解决问题 在数据序列上执行聚集函数(比如 sum() , min() , max() ), 但是首先你需要先转 换或者过滤数据二、解决方案 生成器表达式三、代码说明nums = [1, 2, 3, 4, 5]print (x * x for x in nums) #-><generator object <genexpr> at 0x00000000006原创 2017-01-06 11:15:42 · 230 阅读 · 0 评论 -
[00017]从字典中提取子集
从字典中提取子集一、 解决问题 构造一个字典,它是另外一个字典的子集二、解决方案 字典推导三、代码说明prices = { 'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20, 'FB': 10.75}p1 = {key : value for key, value in pri原创 2017-01-05 17:42:39 · 426 阅读 · 0 评论 -
[00018]映射名称到序列元素
映射名称到序列元素一、 解决问题 通过下标访问列表或者元组中元素的代码,有时候会使得你的代码难以 阅读,于是你想通过名称来访问元素。二、解决方案 collections.namedtuple() 传递一个类型名和你需要的字段给它,然后它就会返回一个类; 你可以初始化这个类,为你定义的字段传递值三、代码说明# 支持所有普通元组的操作,比如索引和解压from collec原创 2017-01-06 10:55:31 · 275 阅读 · 0 评论 -
[00016]过滤序列元素
过滤序列元素一、 解决问题 有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列二、解决方案 列表推导 生成器表达式 filter() itertools.compress()三、代码说明mylist = [1, 4, -5, 10, -7, 2, 3, -1]newList = [i for i in mylist if i > 0]print(type原创 2017-01-05 17:24:38 · 281 阅读 · 0 评论 -
[00015]通过某个字段将记录分组
通过某个字段将记录分组一、 解决问题 字典或者实例的序列, 想根据某个特定的字段比如 date 来分组迭代访问,类似SQL的 group by语句二、解决方案 模块:itertools | collections 函数: groupby | defaultdict三、代码说明#!/user/bin/env python# coding= utf-8from operator i原创 2017-01-05 14:51:21 · 299 阅读 · 0 评论 -
[00014]排序不支持原生比较的对象
排序不支持原生比较的对象一、 解决问题>排序类型相同的对象, 但是他们不是原生的数据类型二、解决方案 函数: sorted() 说明:内置的 sorted() 函数有一个关键字参数 key ,可以传入一个 callable 对象给它, 这个callable 对象对每个传入的对象返回一个值,这个值会被 sorted 用来排序这些对象。三、代码说明#!/usr/bin/env pyt原创 2017-01-05 13:53:17 · 323 阅读 · 0 评论 -
[00013] 通过某个关键字,排序一个字典列表
通过某个关键字,排序一个字典列表一、 解决问题 根据某个或某几个字典字段来排序字典列表。二、解决方案 模块: operator 函数: itemgetter三、代码说明#!/usr/bin/env/python#cofing=utf-8"""operator.itemgetter(item)operator.itemgetter(*items) 这个函数会调用所传入原创 2017-01-04 20:14:41 · 288 阅读 · 0 评论 -
[00104]字符串匹配和搜索
字符串匹配和搜索一、 解决问题 匹配或者搜索特定模式的文本二、解决方案 str.find(), str.endswith(), str.startswith() re 模块三、代码说明#!/usr/bin/env pythontext = 'yeah, but no, but yeah, but no, but yeah'#完全匹配resval = text == 'yeah'原创 2017-01-13 15:01:42 · 267 阅读 · 0 评论 -
[00103]用Shell通配符匹配字符串
用Shell通配符匹配字符串一、 解决问题 你想使用 Unix Shell 中常用的通配符(比如 .py , Dat[0-9].csv 等)去匹配文本字符串二、解决方案 fnmatch 模块 fnmatch(), fnmatchcase()三、代码说明from fnmatch import fnmatch, fnmatchcase"""fnmatch() 函数使用底层操作系统的大小写敏原创 2017-01-13 14:29:20 · 696 阅读 · 0 评论 -
[00805]将名称封装到类中
序列中出现次数最多的元素一、 解决问题 想封装类的实例上面的“私有”数据,但是Python语言并没有访问控制。二、解决方案 单下划线(_)开始的名字应该总被认为只属于内部的三、代码说明#!/usr/bin/env pythonclass A: def __init__(self): self._internal = 0 self.public =原创 2017-01-14 19:19:41 · 280 阅读 · 0 评论 -
[00807]调用父类方法
调用父类方法一、 解决问题 在子类中调用父类的某个已经被覆盖的方法。二、解决方案 super()三、代码说明#!/usr/bin/env pythonclass A: def __init__(self): self.x = 0 def spam(self): print ("A.spam")class B(A): def __init_原创 2017-01-15 21:21:24 · 361 阅读 · 0 评论