Python内置工具(tools)总结
Python提供了以下几个内置tools模块,简化开发
operator collections itertools functools
除此之外,还有一些其他工具,比如mimetools、unittest等,上述四个tools作用于内建类型和函数、类等,比较通用,也较为常用。
-operator : 内置的操作符模块
-collections : 简化容器类型的一些操作和使用
-itertools : 可迭代类型工具
-functools : 函数工具,尤其是装饰器
operator
operator提供了一个函数与符号的相互转换,方便我们在编程时选择:
examples
(1)符号转函数:
比如在一些需要某些符号功能,却需要提供该符号的函数表示时,尤其是在map reduce filter等的key 和cmp里面
from operator import add
print reduce(add,range(10))
(2)函数转符号:
这个例子有点特别,但是在类定义中常见,add->__add__这种方式差别跟python的变量有关。
附:python变量命名方式(来自网络):
python变量命名规范
下面是python符号函数映射表
class A():def __init__(self,num):self.num=numdef __add__(self,other):return self.num+other.num
Operation | Syntax | Function |
---|---|---|
Addition | a + b | add(a, b) |
Concatenation | seq1 + seq2 | concat(seq1, seq2) |
Containment | Test obj in seq | contains(seq, obj) |
Division | a / b | div(a, b) (without future.division) |
Division | a / b | truediv(a, b) (with future.division) |
Division | a // b | floordiv(a, b) |
Bitwise And | a & b | and_(a, b) |
Bitwise Exclusive Or | a ^ b | xor(a, b) |
Bitwise Inversion | ~ a | invert(a) |
Bitwise Or | a | b | or_(a, b) |
Exponentiation | a ** b | pow(a, b) |
Identity | a is b | is_(a, b) |
Identity | a is not b | is_not(a, b) |
Indexed Assignment | obj[k] = v | setitem(obj, k, v) |
Indexed Deletion | del obj[k] | delitem(obj, k) |
Indexing | obj[k] | getitem(obj, k) |
Left Shift | a << b | lshift(a, b) |
Modulo | a % b | mod(a, b) |
Multiplication | a * b | mul(a, b) |
Negation (Arithmetic) | - a | neg(a) |
Negation (Logical) | not a | not_(a) |
Positive | + a | pos(a) |
Right Shift | a >> b | rshift(a, b) |
Sequence Repetition | seq * i | repeat(seq, i) |
Slice Assignment | seq[i:j] = values | setitem(seq, slice(i, j), values) |
Slice Deletion | del seq[i:j] | delitem(seq, slice(i, j)) |
Slicing | seq[i:j] | getitem(seq, slice(i, j)) |
String Formatting | s % obj | mod(s, obj) |
Subtraction | a - b | sub(a, b) |
Truth Test | obj | truth(obj) |
Ordering | a < b | lt(a, b) |
Ordering | a <= b | le(a, b) |
Equality | a == b | eq(a, b) |
Difference | a != b | ne(a, b) |
Ordering | a >= b | ge(a, b) |
Ordering | a > b | gt(a, b) |
关于细节内容可以参考
python library - operator
collections
主要是为容器类型: list, set, and tuple提供了一些便利
有以下几个类型
type | describe |
---|---|
namedtuple | factory function for creating tuple subclasses with named fields |
deque | list-like container with fast appends and pops on either end |
Counter | dict subclass for counting hashable objects |
OrderedDict | dict subclass that remembers the order entries were added |
defaultdict | dict subclass that calls a factory function to supply missing values |
namedtuple
主要用于对tuple里面的分量进行命名,生成一个tuple的子类,这个子类继承了原来的tuple类,有相同的属性方法。
from collections import namedtuple
mytuple=namedtuple('mytuple',('name','age')])
first=mytuple('tom',19)
print first.name,first.age
这种namedtuple可以用来对获取的的数据库数据进行命名,我们从数据库获取的每条记录都是用一个tuple,不方便我们取属性,如果换成我们自定义的namedtuple类型,更便于操作和理解。
deque
这是一种队列类型,有队列类型的相关操作,可以弥补list这种广义表类型的某些不足,比如在前面插入较慢(这里你可以查找一些python的资料,对于python的list前段吧插入时会整个后移list,效率较低)
关于这种类型相应的方法支持可以参考后面附上的python library链接
Counter
可以理解为一个计数字典
from collections import *
d = Counter("hello world hello BJ".split())
print d
# OUT : Counter({'hello': 2, 'world': 1, 'BJ': 1})
print d['SH']
# OUT : 0
返回一个字典的子类,键值为可迭代对象里的对象和相应数量。
对于这个字典里没有的键,返回0,类似于普通字典的 d.get(‘SH’,0)
关于这种类型的其他方法也可参考官方文档,讲得很清楚。
OrderedDict
有序字典,字典中的键按序排放,加入了一些与顺序有关的操作,比如popitem()等
defaultdict
对于一个defaultdict类型,当你去访问它的键值时,如果没有这个键,它会调用一个可调用对象,将返回值赋给这个键。
call1 = int
call2 = list
call3 = lambda :4
from colletions import defaultdict
mydict1 = defaultdict(call1)
mydict2 = defaultdict(call2)
mydict3 = defaultdict(call3)
print mydict1['not'],mydict2['not'],mydict3['not']
# OUT : 0 [] 4
# 执行过程是,去取这个键的值,如果没有,调用call1(None),...
# 如果你想知道我说的对不对,可以把call3 = lambda x:4 ,试试,看他的报错就知道了。
colletions后面还列出了一些类,用于继承和isinstance判断
本节参考:
python library - collections
itertools
可以参考:
python library - itertools
前面的都比较好理解
主要想解释下tee,感觉tee像是对原迭代对象的n份deepcopy,不知道他说的那个split是不是这个意思
Combinatoric generators部分:
对于s=’ABCD’
Iterator | Arguments | Results |
---|---|---|
product() | p, q, … [repeat=1] | cartesian product, equivalent to a nested for-loop |
permutations() | p[, r] | r-length tuples, all possible orderings, no repeated elements |
combinations() | p, r | r-length tuples, in sorted order, no repeated elements |
combinations_with_replacement() | p, r | r-length tuples, in sorted order, with repeated elements |
product(‘ABCD’, repeat=2) | 类似 Ann A_n^n | AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD |
permutations(‘ABCD’, 2) | 类似 A2n A_n^2 | AB AC AD BA BC BD CA CB CD DA DB DC |
combinations(‘ABCD’, 2) | 类似 C2n C_n^2 | AB AC AD BC BD CD |
combinations_with_replacement(‘ABCD’, 2) | C2n C_n^2+AA…DD | AA AB AC AD BB BC BD CC CD DD |
functools
这里面前面几个工具是用来衔接的old-new,这点感觉跟那个__future__模块很像
后面的跟函数闭包里面的装饰器有关,一共有三个函数(类)
update_wrapper wraps partial
wraps是简化了的update_wrapper
关于这三个:
update_wrapper:Update a wrapper function to look like the wrapped function.
wraps:This is a convenience function for invoking update_wrapper() as a function decorator when defining a wrapper function.
partial是一个类,有多个属性。
前面俩个可以参考官方例子,partial可以用于固定函数参数
from functools import partial
def basefunc(a,b):return a+b
newfunc = partial(basefunc,b=1)
print newfunc(5)
# OUT : 6
#这里要考虑函数默认参数的问题,如果newfunc = partial(basefunc,a=1),print 时会报错,必须print newfunc(b=5),关于函数默认参数赋值问题,基本上原则是默认赋值的放后面,否则要在调用函数时使用形参
Python内置工具(tools)总结相关推荐
- 使用python内置2to3工具将python2代码转换为python3代码
我们都知道python有一个一直被诟病的毛病,python2与python3代码不兼容问题,而网上的一些教学大部分都是python2的,如果需要将其在python3环境下运行,有两个方法,一是:一个一 ...
- python提高办公效率-几个可以提高工作效率的Python内置小工具
在这篇文章里,我们将会介绍4个Python解释器自身提供的小工具.这些小工具在笔者的日常工作中经常用到,减少了各种时间的浪费,然而,却很容易被大家忽略.每当有新来的同事看到我这么使用时,都忍不住感叹, ...
- python对工作效率的提升_使用了这个几个Python内置小工具,可以让你的工作效率提升一倍...
使用了这个几个Python内置小工具,可以让你的工作效率提升一倍 我们将会详情4个Python解释器自身提供的小工具. 这些小工具在笔者的日常工作中经常使用到, 减少了各种时间的白费, 然而,却很容易 ...
- python内置的集成开发工具是什么_python内置的集成开发工具是什么_后端开发
go语言之goroute协程_后端开发 协程(coroutine)是Go语言中的轻量级线程实现,由Go运行时(runtime)管理.下面就来由go入门教程栏目介绍一下go语言中的goroute协程. ...
- 几个可以提高工作效率的Python内置小工具
在这篇文章里,我们将会介绍4个Python解释器自身提供的小工具.这些小工具在笔者的日常工作中经常用到,减少了各种时间的浪费,然而,却很容易被大家忽略.每当有新来的同事看到我这么使用时,都忍不住感叹, ...
- python内置库有哪些_python 内置库
广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! version: 0. 2.0, configurations: }, de ...
- random输出1到10之间_第43P,随机数,Python内置库之random
大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第43篇文章,第二阶段的课程:Python基础知识:Python内置库之random随机库. 学习本课程,建议先看一遍:[计算机基础 ...
- python内置函数用来返回列表、元组、字典_python程序设计第一章基础知识 题库及选解...
由于学校的python是笔试,所以找了份感觉比较好的题库刷了下其中前八章的填空和判断,附上选解.各章链接如下 填空 1. Python安装扩展库常用的是()工具.(pip) 2. Python标准库m ...
- python内置标准库不可以处理的文件是_精华 | 140种Python标准库、第三方库和外部工具都有了...
原标题:精华 | 140种Python标准库.第三方库和外部工具都有了 作者 | 宋天龙 来源 | 大数据(ID:hzdashuju) [导读]Python数据工具箱涵盖从数据源到数据可视化的完整流程 ...
最新文章
- c语言 swap交换函数_C语言经典100题(14)
- java创建node类型数据类型_[Java教程]js DOM Node类型
- .net 匹配html图片url_后端程序员不得不会的 Nginx 转发匹配规则
- android打包工具多渠道批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案...
- matlab读取图片的频率,获得时域图之后,也获得了频域图,但是如何查看频率呢......
- 去哪儿-16-detail-banner
- 42 可写成成三个整数的立方和
- Java 并发编程阅读笔记
- oracle设为归档模式,设置oracle归档模式
- IOS:游戏存档修改,替换
- 中国全国行政代码、邮政编码、区号、名称、简称、经纬度 数据库
- WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容
- golang单线程对比map与bigCache小对象存取性能差别
- 周末阴雨 在家无事 观《孔子》
- Latex角标 左侧角标 左上角角标 左下角角标
- 企业网站建设教程:自己怎么建网站,做网站的步骤有哪些
- python 使用 python-socketio 400 错误
- 大数据人才如此稀缺,学什么专业才能从事大数据?
- pycharm安装mysql驱动包
- c#大批量Exce数据l导入数据库