列表和字典的赋值
 dict1 = {}
 dict1['k1'] = 'v1'

 list1 = []
 list1.append('v1')

集合系列
1,计数器
 Python 2.7.6 (default, Mar 22 2014, 22:59:56)
 [GCC 4.8.2] on linux2
 Type "help", "copyright", "credits" or "license" for more information.
 >>> import collections
 >>> c1 = collections.Counter()
 >>> str1 = 'fujafksabfaskfjaslfl jshjfkk fhsfj hfajsjfsk fj'
 >>> c1 = collections.Counter(str1)
 >>> c1  # 对于字符串操作的结果是:为每个出现的字符计数
 Counter({'f': 11, 'j': 8, 's': 7, 'a': 5, 'k': 5, ' ': 4, 'h': 3, 'l': 2, 'b': 1, 'u': 1})
 >>> list1 = [11,22,22,33,33,33,44,44,44,44]
 >>> c1 = collections.Counter(list1)
 >>> c1  # 对于列表操作的结果是:为每个出现的元素计数
 Counter({44: 4, 33: 3, 22: 2, 11: 1})
 >>> 

2,有序字典 orderedDict

     有序字典在使用上跟普通字典是一样的,只是在内部实现的数据结构上有所区别。
     有序字典在内部实现了一个列表,用来存储字典的key;由于列表是有序的,所以字典也就变为有序了。
     因此有序字典可以通过key的下标进行取值。
     orderedDict也可以做嵌套。

3,默认字典 defaultdict
     为字典里的value设置默认的类型
# 1,普通字典的方式
 dic ={}
 dic = {'k1':[]}      # → 这两行等同于下例中的一行(#←)
 dic['k1'].append(1)  # → 这两行等同于下例中的一行(#←)

# 2,默认字典的方式
 from collections import defaultdict
 dic = collections.defaultdict(list)   # ←
 dic['k1'].append(1)

默认字典操作样例:
 >>> from collections import defaultdict  # 使用默认字典,需要先导入defaultdict
 >>> dic = {}
 >>> dic = collections.defaultdict(list)  # 创建一个默认字典对象,把字典的value的默认类型置为列表
 >>> dic['k1'].append(1) # 向字典中添加一个key k1<list类型>,并向k1中append一个元素1
 >>> dic
 defaultdict(<type 'list'>, {'k1': [1]})
 >>>
 >>> dic1 = {'k1':1}
 >>> dic1
 {'k1': 1}
 >>>
 >>> dic1 = collections.defaultdict(list)
 >>> dic1
 defaultdict(<type 'list'>, {})
 >>>
 >>> dic1.append(22)  # 直接对dict1做append操作会报错,因为字典不能通过append进行赋值
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 AttributeError: 'collections.defaultdict' object has no attribute 'append'
 >>> dic1['k2'].append(22)  # 可以对默认字典中的列表元素做append操作
 >>> dic1
 defaultdict(<type 'list'>, {'k2': [22]})
 >>> 

可命名的元组
使用步骤:
     1,创建类
     2,使用类创建对象
     3,使用对象

 >>> Mytuple = collections.namedtuple('Mytuple',['x','y'])
 >>>
 >>> n = Mytuple(x=1,y=2)
 >>> n.x
 1
 >>> n.y
 2
 >>>

help(Mytuple)
  Help on class Mytuple in module __main__:

  class Mytuple(__builtin__.tuple)
   |  Mytuple(x, y)
   |
   |  Method resolution order:
   |      Mytuple
   |      __builtin__.tuple
   |      __builtin__.object
   |
   |  Methods defined here:
   |
   |  __getnewargs__(self)
   |      Return self as a plain tuple.  Used by copy and pickle.
   |
   |  __getstate__(self)
   |      Exclude the OrderedDict from pickling
   |
   |  __repr__(self)
   |      Return a nicely formatted representation string
   |
   |  _asdict(self)
   |      Return a new OrderedDict which maps field names to their values
   |
   |  _replace(_self, **kwds)
   |      Return a new Mytuple object replacing specified fields with new values
   |
   |  ----------------------------------------------------------------------
   |  Class methods defined here:
   |
   |  _make(cls, iterable, new=<built-in method __new__ of type object>, len=<built-in function len>) from __builtin__.type
   |      Make a new Mytuple object from a sequence or iterable
   |
   |  ----------------------------------------------------------------------
   |  Static methods defined here:
   |
   |  __new__(_cls, x, y)
   |      Create new instance of Mytuple(x, y)
   |
   |  ----------------------------------------------------------------------
   |  Data descriptors defined here:
   |
   |  __dict__
   |      Return a new OrderedDict which maps field names to their values
   |
   |  x
   |      Alias for field number 0
   |
   |  y
   |      Alias for field number 1
   |
   |  ----------------------------------------------------------------------
   |  Data and other attributes defined here:
   |
   |  _fields = ('x', 'y')
   |
   |  ----------------------------------------------------------------------
   |  Methods inherited from __builtin__.tuple:
   |
   |  __add__(...)
   |      x.__add__(y) <==> x+y
   |
   |  __contains__(...)
   |      x.__contains__(y) <==> y in x
   |
   |  __eq__(...)
   |      x.__eq__(y) <==> x==y
   |
   |  __ge__(...)
   |      x.__ge__(y) <==> x>=y
   |
   |  __getattribute__(...)
   |      x.__getattribute__('name') <==> x.name
   |
   |  __getitem__(...)
   |      x.__getitem__(y) <==> x[y]
   |
   |  __getslice__(...)
   |      x.__getslice__(i, j) <==> x[i:j]
   |
   |      Use of negative indices is not supported.
   |
   |  __gt__(...)
   |      x.__gt__(y) <==> x>y
   |
   |  __hash__(...)
   |      x.__hash__() <==> hash(x)
   |
   |  __iter__(...)
   |      x.__iter__() <==> iter(x)
   |
   |  __le__(...)
   |      x.__le__(y) <==> x<=y
   |
   |  __len__(...)
   |      x.__len__() <==> len(x)
   |
   |  __lt__(...)
   |      x.__lt__(y) <==> x<y
   |
   |  __mul__(...)
   |      x.__mul__(n) <==> x*n
   |
   |  __ne__(...)
   |      x.__ne__(y) <==> x!=y
   |
   |  __rmul__(...)
   |      x.__rmul__(n) <==> n*x
   |
   |  __sizeof__(...)
   |      T.__sizeof__() -- size of T in memory, in bytes
   |
   |  count(...)
   |      T.count(value) -> integer -- return number of occurrences of value
   |
   |  index(...)
   |      T.index(value, [start, [stop]]) -> integer -- return first index of value.
   |      Raises ValueError if the value is not present.
  (END)

双向队列:deque
     双向队列可以在队列的两端进行读取和插入
     是线程安全的

 >>> import collections
 >>> q = collections.deque()
 >>> q.append(1)
 >>> q.append(2)
 >>> q.append(3)
 >>> q.append(4)
 >>>
 >>> q
 deque([1, 2, 3, 4])
 >>> q.pop()
 4
 >>> q
 deque([1, 2, 3])
 >>> q.popleft()    # 此处要注意,是popleft而非leftpop
 1
 >>> q
 deque([2, 3])
 >>>
 >>> q.appendleft(5)
 >>> q
 deque([5, 2, 3])
 >>>

单向队列(不是collections系列的模块,属于Queue系列):
也是一个线程安全的数据结构
 >>> import Queue
 >>>
 >>> q = Queue.Queue(10)
 >>>
 >>> q.put(1)
 >>> q.put(2)
 >>> q.put(3)
 >>> q
 <Queue.Queue instance at 0x7f3975f505a8>
 # 此处返回的是这个对象实例的内存地址
 # 之所以没有返回队列中所有的元素是因为
 # 在Queue的类的定义中没有实现__str__的方法。
 >>> q.get()
 1
 >>> q.get()
 2
 >>> q.get()
 3
 >>> q.get() # 此时队列里已经没有元素了,再get则会hang住。

 ^C^C

注意:在get时,如果过队列里面没有数据的时候,线程会hang住。


迭代器
     ① 创建一个类
     ② 类中需要实现next方法,用来判断是否有下一条数据。

 >>> dir(list)
 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
 >>>
 >>> help(list.__iter__)

 Help on wrapper_descriptor:

 __iter__(...)
     x.__iter__() <==> iter(x)
 (END)

打印列表的2种方法:

 # 方法1
 >>> li = [11,22,33,44,55,66]
 >>> for i in li:
 ...     print i
 ...
 11
 22
 33
 44
 55
 66
 >>>
 # 方法2
 >>> li = [11,22,33,44,55,66]
 >>> for i in range(len(li)):
 ...     print li[i]
 ...
 11
 22
 33
 44
 55
 66
 >>>

生成器:
例子:
 >>>
 >>> range(10)
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 >>>
 >>> xrange(10)
 xrange(10)
 >>> 

辅助理解的类比:

数据库的连接池的概念,连接池就可以使用生成器来做。
生成器的思想:先返回对象,不会直接在内存中创建。
 
上例中的range会直接在内存中创建对象,xrange不会立刻创建。

冒泡排序算法:
 # 基于range的冒泡排序算法
 li = [13, 22, 6, 99, 11]

 for m in range(len(li)-1):

     for n in range(m+1, len(li)):
         if li[m]> li[n]:
             temp = li[n]
             li[n] = li[m]
             li[m] = temp

 print li

函数(代码块)
     按功能划分的代码块
函数的分类:
     内置函数
     自定义函数
     导入函数

内置函数

help()
dir()
vars() # 当前模块的所有变量
    __file__
    __doc__
               文件顶部用三引号做的注释就是程序的__doc__
    __name__
 
     被执行的脚本文件的__name__的值为__main__
type() # 类型
id() #显示内存地址 
is # 比较内存地址


在vars里面inportvar01
var01里面的代码会直接执行,因此在后面写代码的时候都要写成函数,不允许有可以被直接执行的代码。

cmp(2,3)
divmod(10,3) # 商和余数,用户页面分页
max()
min()
sum()
power(2,11)

len()
all() # 接受一个序列,判断,所有值都是真,返回真,否则为假。
        # eg:可以用来判断用户输入值的判定
any() #接受一个序列,判断,所有值都是假,返回假;只要有一个值为真,返回真。

all,any的简单样例:
 >>> li = ['stephen','',25]
 >>> all(li)
 False
 >>> any(li)
 True
 >>>
 >>> li = ['stephen','password',25]
 >>> all(li)
 True
 >>> any(li)
 True
 >>>
 >>> li = ['']
 >>> all(li)
 False
 >>> any(li)
 False
 >>>
 >>> 

ASCII码数字对照表
     ord # 字符到数字
     chr # 数字到字符

进制转换
     hex()
     oct()
     bin()

枚举类型:enumbrare

 >>> li =  [11,22,33,44,55,66]
 >>> for k,v in enumerate(li):
 ...     print k,v
 ...
 0 11
 1 22
 2 33
 3 44
 4 55
 5 66
 >>>
 >>> for k,v in enumerate(li,1):
 ...     print k,v
 ...
 1 11
 2 22
 3 33
 4 44
 5 55
 6 66
 >>>
 >>> 

map等内置函数。。。

函数
第一个函数(简易报警程序):
 #!/usr/bin/env python
 # -*- coding:utf-8 -*-
 __author__ = 'Stephen'

 def email(arg):
 #print arg

 if __name__ == '__main__':
 cpu = 99
 ram = 50
 disk = 95

 for i in range(1):
     if cpu > 90:
         alert = 'cpu is ERROR'
         email(alert)
     if ram > 90:
         alert = 'memory is ERROR'
         email(alert)
     if disk > 90:
         alert = 'disk is ERROR'
         email(alert)

程序运行结果:

C:\Python27\python.exe G:/python/day03/def_function.py
cpu is ERROR
disk is ERROR

Process finished with exit code 0

修改为smtp的方式


 #!/usr/bin/env python
 # -*- coding:utf-8 -*-
 __author__ = 'Stephen'

 import smtplib
 from email.mime.text import MIMEText
 from email.utils import formataddr

 def email(arg): # 此处的arg为形式参数,简称形参。不赋值的时候没有实际意义。
     msg = MIMEText('邮件内容', 'plain', 'utf-8')
     msg['From'] = formataddr(["Stephen",'xxx@126.com'])
     msg['To'] = formataddr(["thatsit",'xxx@qq.com'])
     msg['Subject'] = "监控报警邮件"

     server = smtplib.SMTP("smtp.126.com", 25)
     server.login("mail-address@126.com", "PASSWORD")
     server.sendmail('xxx@126.com', ['xxx@qq.com',], msg.as_string())
     server.quit()

 if __name__ == '__main__':
     cpu = 99
     ram = 50
     disk = 95

     for i  in  range(10):
         if cpu > 90:
             alert = 'cpu is ERROR 第%d次' %i
             email(alert) # 此处的alert在赋值之后就是实际参数。
         if ram > 90:
             alert = 'memory is ERROR 第%d次' %i
             email(alert)
         if disk > 90:
             alert = 'disk is ERROR 第%d次' %i
             email(alert)

函数小结:
     1,def关键字定义函数
     2,函数名,日后调用函数使用
     3,函数声明,不自动执行;调用后才执行
     4,函数的参数
          ① 普通参数
          ② 默认参数
          ③ 动态参数
 
     5,函数的返回值
          ① 如果一个函数不定义明确的返回值(return),返回值为None。
          ② 返回值可以赋值给某个变量

动态参数详解:     
               # 参数可以有N个,传入指定个数的参数。
               # 默认参数可以有多个,但是需要放到参数列表的最后。
               # def func(*args)
               # 内部自动构造元组
               # 传序列时,可以使用*号防止内部构造元组
 

动态参数2:
 def func(**kwargs):
      print kwargs

 func (k1=123,k2='sss')

 dic = {k1:123,k2:234}
 func (**dic)


文件操作:
文件操作(分为两个步骤:打开文件,操作文件)
      文件打开方式:(#涉及到python升级的原因,推荐使用open的方式打开文件)
          ① obj = file('文件路径','打开模式')
          ② obj = open('文件路径','打开模式')       
 r,只读
 w,清空原文件写
 a,可读,可写,只能以追加的方式写

 r+,可读可写
 w+ <==> w
 a+ <==> a

文件指针操作样例

1 obj = open('log.txt','r') # 打开文件
2 obj.seek(5)       # 指定文件的指针
3 print obj.tell()  # 显示文件指针
4 obj.read()        # 将文件全部加载到内存,此时的文件指针已经到了文件的尾部
5 print obj.tell()  # 显示文件指针

执行结果:

C:\Python27\python.exe G:/python/day03/func.py
5
24

Process finished with exit code 0

文件其他操作
 truncate() # 根据当前指针的位置截断数据,截断位置也可以使用参数指定。
            # eg:truncate(5)

 b   # 二进制,在linux没有什么卵用,在跨平台的时候要用。
 rU  # U参数只能跟r结合。写法有rU和r+U两种。
     # 用来处理不同平台的换行符的问题:处理不同平台的换行符的问题:(\n,\r,\r\n)。

 托管资源:手动进行释放,在python中才有,用于同时打开同一个文件。
 非托管资源:

 closed() #关闭文件
 flush()  # 会把应用缓存写到系统缓存中,但是不一定会直接写到磁盘,依赖于系统机制

 open()         #打开文件:
 next()         # 取下一行,不存在会报错。
 write()        # 写文件
 writelines()   # 参数可以是一个列表
 xreadlines()   # 逐行读取文件
 for line in f: # 用来替换for line in f.xreadlines()

with关键字,用来做上下文管理。并且with在python2.7之后支持同时打开多个配置文件。

 obj = open('log','r')
 with open('log','r') as obj:

My way to Python - Day03的更多相关文章

  1. Python Day03

    set Collections系列: Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几 ...

  2. python———day03

    一.字符串格式化输出: 占位符    %s(字符串) %d(整数) %f(浮点数,约等于小数) name = input("Name:") age = input("Ag ...

  3. python day03笔记总结

    2019.3.29 S21 day03笔记总结 昨日回顾及补充 1.运算符补充 in not in 2.优先级 运算符与运算符之间也有优先级之分 今日内容 一.整型(int) py2 与 py3 的区 ...

  4. python day03作业

  5. 我的Python之旅第三天

    一 编码操作 1 编码 enconde() 英文字符编码为"utf-8"时,一个字符占一个字节. s1='abcdef' b1=s1.encode('utf-8') print(b ...

  6. 【转】Python 内置函数 locals() 和globals()

    Python 内置函数 locals() 和globals() 转自: https://blog.csdn.net/sxingming/article/details/52061630 1>这两 ...

  7. python操作haproxy.cfg文件

    需求 1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: arg = { 'bakend': 'www.oldboy.org', 'record':{ ' ...

  8. Python基础-day03

    写在前面 上课第三天,打卡:  不要让干净的灵魂染上尘埃,永远年轻.永远热泪盈眶 一.再谈编码 - 文件的概念 '文件' 是一个抽象的概念,是操作系统提供的外部存储设备的抽象,对应底层的硬盘:它是程序 ...

  9. python开发学习-day03(set集合、collection系列 、深浅拷贝、函数)

    s12-20160116-day03 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

随机推荐

  1. 自定义VS的ItemTemplates 实现任意文件结构

    上一篇说到重写IHttpHandler实现前后端分离,这次说一下如何建立一个如下文件结构. VS建立webform时是根据模板来的.C#的模板目录如下: F:\Program Files (x86)\ ...

  2. 实施双工通信框架:SignalR

    SignalR:基于Asp.net平台构建,利用JavaScript或者Websockets,实现在客户端与服务端异步通信的框架. Html5新规范:WebSocket

  3. Android -------- 使手机状态栏背景颜色和activity的一致

    Activity类中: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInsta ...

  4. 《第一行代码》学习笔记13-UI(2)

    1.EditText:程序和用户进行交互的重要控件,允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理. 2.Android控件使用的一般规律:给控件定义一个id->指定下控件的宽 ...

  5. Python代码一定要对齐

    不然会出现错误: IndentationError: unindent does not match any outer indentation level PS:新的Python语法,是不支持的代码 ...

  6. 关于jquery-easyUI中主键属性data-options的了解

    data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我们可以对easyui组件的实例化可以完全写入到html中,例如: <div class=& ...

  7. 了不起的分支和循环03 - 零基础入门学习Python009

    了不起的分支和循环03 让编程改变世界 Change the world by program while循环 说完了分支我们来说说循环,标准的while循环语法我们已经可以熟悉掌握了. 这里我们就简 ...

  8. NPAPI开发常识

    其实,就在几天前,我根本不知道什么是NPAPI插件.因为最近的项目中用到需要在非IE下检测客户端是否安装,最终找到浏览器插件NPAPI. 以下资料来源于网络收集,以此给那些和我一样迷茫的人.本文的目的 ...

  9. [POJ] 1511 Invitation Cards

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 18198   Accepted: 596 ...

  10. scons构建自己的一个简单的程序

    我在我的D盘下,新建一个文件夹,命名为try.在这个文件夹下新建两个文件,一个文件是test.c .里面的程序很简单: #include<stdio.h>#include<stdli ...