Python基础小记

来源:互联网 发布:怎么获取股票实时数据 编辑:程序博客网 时间:2024/06/18 10:18

运算:

  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 Templates = 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 sqrtscope = {}exec 'sqrt = 1' in scopesqrt(4) >>> 2.0scope['sqrt'] >>> 1
  2. eval:用于求值。

    eval( 6+18*2 )  >>> 42scope = {'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 shelves = 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()  //把查询结果集中下一行保存为序列,或者Nonefetchmany([size])  //获取查询结果集中的多行,默认arraysizefetchall()  //将所有(剩余)的行作为序列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  //charBINARY  //描述二进制列NUMBER  //描述数字列DATETIME  //描述日期/时间列ROWID     //描述行ID列
  5. 使用示例:

    import sqllite3conn = 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 sockets = socket.socket()host = socket.gethostname()port = 1234s.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 = 1234s.connect((host, port))print s.recv(1024)
  2. urllib 和 urllib2 模块。lib2可以提供HTTP验证,cookie或者为自己的协议写扩展程序。

    from urllib import urlopenwebpage = 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 logginglogging.basicConfig(level=logging.INFO, filename='mylog.log')logging.info('Starting program')logging.info('Trying to divide 1 by 0')print 1/0logging.info('The division succeeded')logging.info('Ending program')

画幅画

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

XML

  1. SAX语法分析器:

    form xml.sax import make_parserparser = 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        <html></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。
0 0