Python基础小记

运算:

  1. 整除: // 如: 1 // 2 = 0。
  2. 取余运算对浮点数同样适用。
  3. 幂运算:2 * 3 , -3 * 2 等同 -(3**2)
  4. input(‘please’), raw_input(),窗口输入。

字符串

  1. 字符串拼接,”let say”‘“hello world”’,只能两个字符串,常用加法运算。
  2. 原始字符串: print r’c:\n文件夹’,注意:不能以’\’结尾

列表和元组

  1. 区别:列表可以修改,元组不能。
  2. 分片:[-3,-1]倒数第三个 - 倒数第一个
    分片左边的索引比右边的晚出现在序列中就会为null,如[-3,0]
    [-3:]:表示倒数第三个到结尾。
    [:3]:表示从头到第三个。
  3. [0:10:2]:2表示步长,会跳过某些元素。[0:10:-2]:表示从右到左分片。
  4. 序列相加: [1,2,3] + [4,5] = [1,2,3,4,5]
  5. 序列乘法: [1] * 2 = [1,1], [None] * 4
  6. 插入新元素:numbers = [1,5] , number[1:1]=[2,3,4], number = [1,2,3,4,5]
  7. number[1:4] = [] 等同 del number[1:4]
  8. count:统计元素出现的次数。
  9. extend:追加,会修改原始序列。相加会返回新的列表。
  10. a.extend(b) == a[len(a):] = b。
  11. index:返回第一个匹配项的位置。
  12. insert:在前方插入。
  13. reverse:反向存放。方向迭代:reversed(x)->返回一个迭代器。
  14. sort() 和 sorted()

元组

  1. (42,) : 元组必须有逗号,即使只有一个元素。
  2. tuple函数: tuple([1,2,3]), tuple(‘abc’), tuple((1,2,3))。
  3. cmp(x,y) 比较 两个值。
  4. 模板字符串:

    from string import Template
    s = Template('$x, glorious${x}')
    s.substitute(x='slurm')
    s.substitute(s='slurm')
    
    s = Template('A $thing must never $action')
    d = {'ting':'gentleman','action':'show his socks'}
    s.substitute(d) 
    

字典

  1. d = dict(name=’chenqi’,age=42).
  2. del d[k] 删除项
  3. k in d : 检查d中是否含有键为k的项。
  4. phonebook = {‘book’:’权威指南’} ‘love book is %(book)s 。’ % phonebook
  5. fromkeys使用给定的键建立新字典,{}.fromkeys([‘name’,’age’],’test’) = {‘age’:’tets’,…}
  6. get方法,d[‘name’] keyError , d.get(‘name’,None) = None
  7. has_key, items, iteritems, values, itervalues
  8. update: 更新另一个字典, d.update(x)

迭代

  1. 并行迭代:zip可以应付不等长序列,最短序列用完就停止。

    names=['anne','beth','george']
    ages=[12,45,32]
    zip(names, ages)
    >>> [('anne',12),('beth',45), ('george',32)]
    
  2. rang 和 xrang, xrange就是迭代器类型的。

列表推倒式

  1. [(x,y) for x in range(3) for y in range(3)]

执行代码

  1. exec: exec “print ‘hello world’”

    from math import sqrt
    scope = {}
    exec 'sqrt = 1' in scope
    sqrt(4) >>> 2.0
    scope['sqrt'] >>> 1
    
  2. eval:用于求值。

    eval( 6+18*2 )  >>> 42
    scope = {'x':2,'y':4}
    eval('x * y', scope) >>> 6
    

方法

  1. def store(*params): params接收所有的参数,元组
  2. def print_param(title, *params):星号收集其余参数
  3. def print_param(**params):收集a=2参数,字典
  4. x=1, vars()[x]:内建的vars函数可以返回作用域字典。
  5. globals函数返回全局变量字典,locals函数返回局部变量字典。

标准库

  1. 标准库的bisect模块可以非常有效的实现二元查找。
  2. map.filter和reduce函数3.0中迁移至functools模块中。

  1. Python私有属性方法:名字前面加双下划线,def __inaccessible(sefl)。__inaccessible外界无法访问,只能内部访问,

    class Person:
        def __getName(self):
            print 'chenqi'
    //实际上__getName会被翻译成,Person._Person__getName; p._Person__getName();
    
  2. 前面带一个下划线的,不能被 from module import * 导入。
  3. 类可以有静态变量。
  4. bases: 获取基类。
  5. isinstance(s, SPAMFilter),是否是一个类的实例。issubclass(SPAMFilter,Filter):是否是另一个的子类。
  6. 查看哪个类,class
  7. hasattr(tc, ‘talk’); callable(getattr(tc,’talk’,None))
  8. setattr(tc, ‘name’, ‘Mr,chenqi’)
  9. dict:查看对象内所有存储的值。或者inspect模块。
  10. property函数:

    class Rectangle(object):
        def __init__(self):
            self.width = 0
            self.height = 0
        def setSize(self, size):
            self.width, self.height = size
        def getSize(self):
            return self.width, self.height
        size = property(getSize, setSize)
    
        r = Rectangle()
        r.width = 10
        r.height = 5
        r.size >>> (10,5)
        r.size = 150,100
        r.width >>> 150
    
  11. 类方法,类函数:

    class Person:
        print 'Person init'
        member = 1
        name = ''
    
        def __init__(self, name):
            self.member += 1
            self.name = name
    
        @staticmethod
        def first():
            print 'first'
    
        @classmethod
        def second(cls):
            print 'second', cls
    
  12. __getattr__, __setattr__ 等:

    1. __getattribute__(self, name):当name被访问的时候自动被调用(只能在新式类中使用)。
    2. __getattr__(self, name):当name被访问,且对象没有相应的特性时被自动调用。
    3. __setattr__(self, name, value):当给name赋值时自动调用。
    4. __delattr__(self, name):当删除name时被自动调用。
    

迭代器:

  1. __iter__方法返回一个迭代器,就是具有next方法。调用next方法时,迭代器会返回下一个值,如果没有返回会引发一个StopIteration异常。python3.0实现__netxt__方法,next(it) == it.next()

    class Fibs:
        def __init__(self):
            self.a = 0
            self.b = 1
        def next(self):
            self.a, self.b = self.b, self.a + self.b
            return self.a
        def __iter__(self):
            return self
        //使用
        1. for f in fibs:
        2. it = iter([1,2,3])
            it.next() ==> 1
        3. list(fibs) ==> 得到序列
    

生成器:

  1. yield:

模块:

  1. reload函数:强制重新加载。Python3去掉了reload(exec)。
  2. 模块在第一次导入程序时被执行。
  3. 模块可以保持自己的作用域,所有的类的函数及赋值后都成为模块属性。
  4. __name__可以获取模块名称。

包:

  1. 包的布局:

    ~/python/                    // PYTHONPATH中的目录
    ~/python/drawing/            //包目录
    ~/python/drawing/__init_.py  //包代码
    ~/python/drawing/colors.py   //colors模块
    ~/python/drawing/shapes.py   //shapes模块
    
    //使用
    import drawing              //这里只有__init__可用
    import drawing.colors       //引入colors模块
    from drawing import shapes  //引入shapes模块
    
  2. help(copy.copy) : 显示帮助。

  3. print copy.copy.doc : 只显示方法信息。
  4. 如查看range的描述信息: print range.doc
  5. 查看源文件: __file__

标准库:

  1. sys库:
  2. os库
  3. fileinput
  4. heapq: 堆队列
  5. deque:双端队列 位于: collections模块
  6. time:可以获取当前时间、操作时间和日期、格式化字符串等。

    (2008,1,21,12,2,56,0,21,0) //6:周 7:儒日历 8:夏令时。
    秒的范围是0-61为了应付闰秒和双闰秒。夏令时的数字是布尔值。
    
    time.asctime()    //当前时间格式化为字符串
    asctime([tuple])     //将元组转换为字符串
    localtime([secs]) //将秒转换为日期元组,以本地时间为准
    mktime(tuple)     //将时间元组转换为本地时间
    sleep(secs)       //休眠秒
    strptime(string[, format)   //将字符串解析时间元组
    time()            //当前时间(新纪元开始后的秒)
    
  7. datetime(支持日期和时间的算法) 和 timeit(执行时间计时)
  8. random:伪随机数。 os.urandom()是真随机数 和 random模块的SystemRandom类。
  9. shelve.open 可以返回一个 Shelf对象,可以存储内容。

    import shelve
    s = shelve.open('test.dat')
    s['x'] = ['a','b','c']
    s['x'].append('d')  //并不会保存到磁盘中,s['x']只是一个副本
    s['x'] = [a,b,c,d]才会写入副本
    
    s = shelve.open('test.dat', writeback=true)
    //只有在关闭shelf的时候才写回磁盘
    

正则表达式re

  1. compile(pattern[,flags]) : 根据表达式创建模式对象。
  2. search(pattern,string[.flags]) : 在字符串中寻找模式
  3. match(pattern,string[,flags]) : 根据模式的匹配项来分割字符串。
  4. split(pattern,string[,maxsplit=0]) : 根据模式的匹配项来分割字符串。findall(pattern,string) : 列出字符串模式的所有匹配项。
  5. sub(pat, repl, string[,count=0]) : 将字符串中所有pat用repl替换。
  6. escape(string) : 将字符串中所有特殊表达式转义。
  7. 方法:

    group([group1,...])  //获取给定子模式的匹配项
    start([group])       //返回给定组的匹配项的开始位置
    end([group])             //返回给定匹配项的结束位置
    span([group])            //返回开始和结束位置
    

其他标准模块

  1. functools:python3中,fiter和reduce包含在该模块中。
  2. difflib:可以计算两个序列的相似度。可以找出序列最像的那个。或者简单的搜索程序。
  3. hashlib:可以通过字符串计算签名,可以应用于大文本文件,同时在加密和安全性方面有很多用途。
  4. csv:csv是逗号分隔值的简写,使用csv模块可以轻松读写CSV文件。
  5. timeit、profile和trace:timeit模块是衡量运行时间的工具(pstats)。trace可以提供总的分析。
  6. datetime:支持特殊的日期和时间对象。
  7. itertools:可以用来创建和联合迭代器。
  8. logging:写入日志文件。
  9. getopt和optparse。
  10. cmd模块可以编写命令行解释器。

文件:

open 是 file 的别名。
1. open(name, mode):打开文件,没有IOError。r是默认的。

    r //读模式     w //写模式     a //追加模式
    b //二进制模式       + //读写模式
    rb //可以读取二进制文件(音乐图像等)

2. 缓冲:第三个参数如果0(或者False)无缓冲,为1或True只有使用flush或者close时才会更新硬盘上的数据。大于1的数字代表缓冲区的大小,-1代表使用默认的缓冲区大小。
3. seek(5)方法把当前位置移动到offest定义的位置。
4. tell()方法返回当前的位置。
5. readline()返回单行,readline(5)返回5个字符。
6. readlines()可以读取一个文件所有行并作为列表返回。read()是把整个文件最为字符串。
7. writelines方法,把一个字符串的列表,它会把所有的字符串写入文件或流。
8. close()
9. python2.5后引入 with open() as file:语句,文件在语句结束后会自动关闭。
10. fileinput模块:

    import fileinput
    for line in fileinput.input(filename):
        process(line)

文件迭代器

  1. 从2.2版本开始,文件对象可迭代,所以for循环中使用。

    f = open(filename)
    for line in f (sys.stdin):
        process(line)
    f.close()
    
  2. list(open(file)) == readlines()

数据库支持

  1. 连接:connect():

    dsn // 数据源名称,给出该参数表示数据库依赖
    user //用户名
    password //用户名密码
    host  //主机名
    database  //数据库名
    
  2. 连接对象的方法:

    close()  //关闭连接后,连接对象和游标均不可用
    commit()  //如果支持的话就提交挂起的事务,否则不做任何事
    rollback()  //回滚挂起事务,可能不可用
    cursor()   //返回连接对象的游标对象
    
  3. cursor方法

    callproc(name)  
    close()   //关闭后,不可用
    execute(oper)  //执行sql操作,可能使用参数
    executemany(oper,pseq)  //对序列中的每个参数执行SQL操作
    fetchone()  //把查询结果集中下一行保存为序列,或者None
    fetchmany([size])  //获取查询结果集中的多行,默认arraysize
    fetchall()  //将所有(剩余)的行作为序列
    nextset()  //跳至下一个可用的结果集
    setinputsizes(sizes)  //为参数预先定义内存区域
    setoutputsize(size[,col])  //为获取的大数据值设定缓冲区
    //属性
    description 结果列描述,只读
    rowcount  结果中的行数,只读
    arraysize  fetchmany中返回的行数,默认1
    
  4. 类型:

    Date(year, month, day)  //日期
    Time(hour, minute, second) //时间值
    Timestamp(y, mon, d, h, min, s)  //时间戳
    DateFromTicks(ticks)  //自新纪元秒数
    TimeFromTicks(ticks)  //来自秒数的时间值
    TimestampFromTicks(ticks) //
    Binary(String)  //二进制字符串
    STRING  //char
    BINARY  //描述二进制列
    NUMBER  //描述数字列
    DATETIME  //描述日期/时间列
    ROWID     //描述行ID列
    
  5. 使用示例:

    import sqllite3
    conn = sqllite3.connect('somedatabase.db')
    curs = conn.cursor()
    query = 'INSERT INTO food VALUES(?,?,?)'
    vals = [1,2,3]
    curs.execute(query, vals)
    conn.commit()
    conn.close()
    

网络编程

网络编程

  1. 套接字。

    import socket
    s = socket.socket()
    host = socket.gethostname()
    port = 1234
    s.bind(host, port)
    s.listen(5)
    while True:
        c, addr = s.accept()
        c.send('Thank you for connection')
        c.close()
    
    s = socket.socket()
    host = socket.gethostname()
    port = 1234
    s.connect((host, port))
    print s.recv(1024)
    
  2. urllib 和 urllib2 模块。lib2可以提供HTTP验证,cookie或者为自己的协议写扩展程序。

    from urllib import urlopen
    webpage = urlopen('http://www.python.org')
    text = webpage.read()
    //close read readline readlines
    
  3. urlretrieve可以下载文件并在本地存储。如果没有指定文件,就会放在临时位置。

    urlretrieve('http://www.python.org', 'c:\\python.html')
    

SocketServer模块

  1. SocketServer模块是标准库中很多服务器框架的基础。还包括BaseHTTPServer,SimpleHTTPServer,CGIHTTPServer,SimpleXMLRPCServer和DocXMLRPCServer。
  2. SocketServer包含4个基本的类:TCPServer;UDPServer;UnixStreamServer和UnixDatagramServer。

Twisted服务器

测试

测试工具

  1. unitest:通用测试框架。
  2. doctest:检查文档。

程序打包

  1. Distutils模块:
  2. Py2exe创建可执行程序。

日志记录

  1. logging模块:

    import logging
    logging.basicConfig(level=logging.INFO, filename='mylog.log')
    logging.info('Starting program')
    logging.info('Trying to divide 1 by 0')
    print 1/0
    logging.info('The division succeeded')
    logging.info('Ending program')
    

画幅画

  1. ReportLab很容易使用并且为PDF中的图形和文档生成提供了丰富的功能。

XML

  1. SAX语法分析器:

    form xml.sax import make_parser
    parser = make_parser()
    
  2. PyXML框架,ElementTree;
  3. 标准库:xml.etree 中 ElementTree

Chat服务器

    from asyncore import dispatcher
    import socket, asyncore

    class ChatServer(dispatcher):

        def handle_accept(self):
            conn, addr = self.accept()
            print 'connection attempt from '.addr[0]

    s = ChatServer()
    s.create_socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind( ('', 5005) )
    s.listen(5)
    asyncore.loop()

CGI服务器

    #!/usr/bin/env python
    import cgi
    form = cgi.FieldStorage()

    text = form.getvalue('text', open('simple_edit.dat').read())
    f = open('simple_edit.dat','w')
    f.write(text)
    f.close()
    print """Content-Type:text/html
        """
    % text

2与3的区别:

  1. print 和 exec 等变为方法。
  2. map.filter和reduce函数3.0中迁移至functools模块中。
  3. Python3中不存在旧式类,(__metaclass__=type)。
  4. Python3 中 hasattr(x, ‘__call__’)
  5. python3.0实现__netxt__方法,next(it) == it.next().
  6. python3已经删掉了reload。
  7. python3生成器允许带return,而Python2只能通过raise StopIteration来终止yield。

你可能感兴趣的:(python)