一、collection系列
1、计数器(counter)
collection是对字典中重复字符出现的次数,其具备字典的所有功能加自己的功能相对与包含字典。
举例:
 #!/usr/bin/env  python
 # --*--coding:utf-8 --*--
 import collections
 c = collections.Counter("sdsasdsa") 
 print c

输出结果是:

 Counter({'s': 4, 'a': 2, 'd': 2})

如果说提取里面的值就需要用到

 b = collections.Counter('aswedswedswedswed')
 print b
 b.update(c) #把c添加到b里面
 print b

输出结果是:

 Counter({'s': 4, 'a': 2, 'd': 2})
 Counter({'s': 4, 'e': 4, 'd': 4, 'w': 4, 'a': 1})
 Counter({'s': 8, 'd': 6, 'e': 4, 'w': 4, 'a': 3})
 import collections
 c = collections.Counter("sdsasdsa") #打印出后面重复的字符串
 print c
 print c.most_common(3) #显示前几个

输出结果是:

 Counter({'s': 4, 'a': 2, 'd': 2})
 [('s', 4), ('a', 2), ('d', 2)]
 print sorted(b) #按顺序打印元素
 print b

输出结果是:

 Counter({'s': 4, 'e': 4, 'd': 4, 'w': 4, 'a': 1})
 ['a', 'd', 'e', 's', 'w']
2、默认字典(defaultdict) 
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}
 from collections import defaultdict
 values = [11, 22, 33,44,55,66,77,88,99,90]
 my_dict = defaultdict(list)
 for value in  values:
     if value>66:
          my_dict['k1'].append(value)
     else:
          my_dict['k2'].append(value)
 print my_dict

输出结果是:

defaultdict(<type 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})

3、有序字典(orderedDict )

记住了字典元素的添加顺序,进行排序
 from collections import OrderedDict
 a = {'a':1 , 'b':2 , 'c': 3}
 print OrderedDict(sorted(a.items(), key=lambda t: t[1]))
 print OrderedDict(sorted(a.items(), key=lambda t: len(t[0])))
 print OrderedDict(sorted(a.items(), key=lambda t: t[1]))

输出结果是:

 OrderedDict([('a', 1), ('b', 2), ('c', 3)])
 OrderedDict([('a', 1), ('c', 3), ('b', 2)])
 OrderedDict([('a', 1), ('b', 2), ('c', 3)])

4、可命名元组(namedtuple)

根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型,可命名元组
 Mytuple = collections.namedtuple('Mytuple',['x', 'y'])    #新建元组
 old = Mytuple(1, 2)
 print old
 new = Mytuple(1,2)
 print new

输出结果是:

 Mytuple(x=1, y=2)
 Mytuple(x=1, y=2)

5、双向队列(deque)

#线程安全的双向队列
 q = collections.deque() #加双向队列
 q.append(11)    #添加队列
 q.append(12)
 q.append(13)
 print q
 print q.popleft() #左边取值
 print q.pop() #右边取值
#单向队列,队列FIFO ,栈,弹夹
 import Queue    #模块
 q = Queue.Queue()
 q.put(1) #价值
 q.put(2)
 q.put(3)
 print q.get(1)    #取值

#vars() = 当前模块的所有变量

 # print vars()
 # {'__builtins__': <module '__builtin__' (built-in)>, '__file__': 'D:/s11day2/s11day2/coll.py', '__package__': None, 'collections': <module 'collections' from 'D:\Python27\Lib\collections.pyc'>, '__name__': '__main__', '__doc__': None}
二、内置函数

内置函数就是,python内部已经定义好的函数

all(值) #当值都是真的时候,返回真,否则返回假
any()   #只要有一个真,全为真,否则为假
 1 >>> li = ['as', 'aa', '']
 2 >>> any(li)
 3 True
 4 >>> all(li)
 5 False
 6 >>> li = ['as', 'aa', 'as']
 7 >>> all(li)
 8 True
 9 >>> any(li)
 True
 >>> li = ['', '', '']
 >>> any(li)
 False
 for k,v in enumerate(li, 起始值)
     print k,v
三、自定义函数

自己写好的函数,在用的时候调用,不用的时候不执行

#邮件报警
 1 import smtplib
 2 from email.mime.text import MIMEText
 3 from email.utils import formataddr
 4 def email(message): #收件人可以是一个列表多个参数receiver
 5     msg = MIMEText(message, 'plain', 'utf-8')
 6     msg['From'] = formataddr(["发件者姓名",'发件邮箱'])
 7     msg['To'] = formataddr(["收件者姓名",'收件箱'])
 8     msg['Subject'] = "主题"
 9     server = smtplib.SMTP("smtp.qq.com", 25)
     server.login("发件邮箱", "密码")
     server.sendmail('发件邮箱', ['收件箱',], msg.as_string())
     server.quit()
#收件人可以是一个列表多个参数receiver

#在加一个for循环

 1 if __name__ == '__main__':
 2     cpu = 90
 3     disk = 100
 4     ram = 50
 5     for i in range(1):
 6         if cpu > 80:
 7             alert = u"CPU报警"
 8             email(alert)
 9         if disk > 120:
             alert = u"disk报警"
             emial(alert)
         if ram > 20:
             alert = u"内存报警"
             email(alert)
四、动态参数

图解:

 1 >>> def func(*arg):
 2 ...     print arg
 3 ...
 4 >>> func()
 5 ()
 6 >>> func(1)
 7 (1,)
 8 >>> func(1,2)
 9 (1, 2)
 >>> func(1,2,3)
 (1, 2, 3)
 >>> li = (11,22,33,44,55,66)
 >>> func(li)
 ((11, 22, 33, 44, 55, 66),)
 >>> func(*li)
 (11, 22, 33, 44, 55, 66)

1、接受多个参数

2、内部自动构造元组
3、序列,*,避免内部构造元组
加一个*内部构造是元组,两个**kwargs是构造字典,传入的时候要func(k1=123,k2=124),传入字典
 1 func(**dic)
 2 >>> def func(**kwargs):
 3 ...     print kwargs
 4 ...
 5 >>> func()
 6 {}
 7 >>> func(123)
 8 Traceback (most recent call last):
 9   File "<stdin>", line 1, in <module>
 TypeError: func() takes exactly 0 arguments (1 given)
 >>> func(k1=123,k2=234)
 {'k2': 234, 'k1': 123}
 >>> ls = {'k1':233, 'k2':345}
 >>> func(**ls)
 {'k2': 345, 'k1': 233}

两个动态函数结合

python之路:进阶 二的更多相关文章

  1. 第十三章:Python の 网络编程进阶(二)

    本課主題 SQLAlchemy - Core SQLAlchemy - ORM Paramiko 介紹和操作 上下文操作应用 初探堡垒机 SQLAlchemy - Core 连接 URL 通过 cre ...

  2. Python之路Day19-Django(二)

    本节内容概要: 一.路由系统URL 二.视图 三.模板 四.ORM操作 问题1:Django请求生命周期 -> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串 -> ...

  3. Python之路Day16--JavaScript(二)

    本节内容: 1.上节内容回顾 2.JavaScript补充 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 一.上节内容回顾 1.作业问题: a.页面布局不好 ...

  4. Python编程-函数进阶二

    一.生成器补充 1.什么是生成器? 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象. 2.生成器分类 (1) ...

  5. 百万年薪python之路 -- 模块二

    1. 序列化模块 什么是序列化呢? 序列化的本质就是将一种数据结构(如字典.列表)等转换成一个特殊的序列(字符串或者bytes)的过程就叫做序列化. 为什么要有序列化模块? 如果你写入文件中的字符串是 ...

  6. python之路十二

    本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sql ...

  7. Python之路(二)

    (1)python的内置函数(BIF) python3中内置了70多个BIF,常用的几个有: list():创建一个新的空列表. range():输入次数参数,返回一个迭代固定次数的迭代器. enum ...

  8. python之路----进程二

    守护进程 会随着主进程的结束而结束. 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic ...

  9. 小白学习python之路(二):安装开发工具

    引言 上一章我们安装配置了python3.7,这一章我们安装python的开发工具,我用的pycharm2019 安装 工具连接:https://u20538204.ctfile.com/fs/205 ...

  10. Python之路【第十七篇】:Django【进阶篇 】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

随机推荐

  1. js中冒泡事件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. px和sp什么区别

    都表示像素,只不过sp通常表示文字大小: <TextView android:layout_width="wrap_content" android:layout_heigh ...

  3. 近十年one-to-one最短路算法研究整理【转】

    前言:针对单源最短路算法,目前最经典的思路即标号算法,以Dijkstra算法和Bellman-Ford算法为根本演进了各种优化技术和算法.针对复杂网络,传统的优化思路是在数据结构和双向搜索上做文章,或 ...

  4. word project 2010破解

    1.用这个工具提示失败: failed to inject memory Failed to inject memory!解决方法 浏览:6545 | 更新:2013-07-15 15:52 在激活o ...

  5. 404、500、502等HTTP状态码介绍

    基本涵盖了所有问题HTTP 400 – 请求无效HTTP 401.1 – 未授权:登录失败HTTP 401.2 – 未授权:服务器配置问题导致登录失败HTTP 401.3 – ACL 禁止访问资源HT ...

  6. POJ1734/Floyd求最小环

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6647   Accepted: 2538 ...

  7. HDU 2579/BFS/ Dating with girls(2)

    题目链接 /* 题意是是传统的迷宫加上一个条件,墙壁在k的整倍数时刻会消失,那么求到达出口的最短时间. 关键点在于某个点最多被走k次,标记vis[x][y][time%k]即可. */ #includ ...

  8. UVALive 2324 Human Gene Functions(动态规划)

    题意:求出将两个字符串改成一样长度所能形成最大的相似度. 思路:这个可以说是编辑距离的一个变形,编辑距离最终状态时要两个字符串完全一致,这个就是要求长度一样,而且这个只允许插入“—”这一个字符.模仿编 ...

  9. ZOJ Problem - 2588 Burning Bridges tarjan算法求割边

    题意:求无向图的割边. 思路:tarjan算法求割边,访问到一个点,如果这个点的low值比它的dfn值大,它就是割边,直接ans++(之所以可以直接ans++,是因为他与割点不同,每条边只访问了一遍) ...

  10. elasticsearch 手动控制分片分布

    elasticsearch可以通过reroute api来手动进行索引分片的分配.  不过要想完全手动,必须先把cluster.routing.allocation.disable_allocatio ...