Python基础小记
来源:互联网 发布:怎么获取股票实时数据 编辑:程序博客网 时间:2024/06/18 10:18
运算:
- 整除: // 如: 1 // 2 = 0。
- 取余运算对浮点数同样适用。
- 幂运算:2 * 3 , -3 * 2 等同 -(3**2)
- input(‘please’), raw_input(),窗口输入。
字符串
- 字符串拼接,”let say”‘“hello world”’,只能两个字符串,常用加法运算。
- 原始字符串: print r’c:\n文件夹’,注意:不能以’\’结尾。
列表和元组
- 区别:列表可以修改,元组不能。
- 分片:[-3,-1]倒数第三个 - 倒数第一个
分片左边的索引比右边的晚出现在序列中就会为null,如[-3,0]
[-3:]:表示倒数第三个到结尾。
[:3]:表示从头到第三个。 - [0:10:2]:2表示步长,会跳过某些元素。[0:10:-2]:表示从右到左分片。
- 序列相加: [1,2,3] + [4,5] = [1,2,3,4,5]
- 序列乘法: [1] * 2 = [1,1], [None] * 4
- 插入新元素:numbers = [1,5] , number[1:1]=[2,3,4], number = [1,2,3,4,5]
- number[1:4] = [] 等同 del number[1:4]
- count:统计元素出现的次数。
- extend:追加,会修改原始序列。相加会返回新的列表。
- a.extend(b) == a[len(a):] = b。
- index:返回第一个匹配项的位置。
- insert:在前方插入。
- reverse:反向存放。方向迭代:reversed(x)->返回一个迭代器。
- sort() 和 sorted()
元组
- (42,) : 元组必须有逗号,即使只有一个元素。
- tuple函数: tuple([1,2,3]), tuple(‘abc’), tuple((1,2,3))。
- cmp(x,y) 比较 两个值。
模板字符串:
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)
字典
- d = dict(name=’chenqi’,age=42).
- del d[k] 删除项
- k in d : 检查d中是否含有键为k的项。
- phonebook = {‘book’:’权威指南’} ‘love book is %(book)s 。’ % phonebook
- fromkeys使用给定的键建立新字典,{}.fromkeys([‘name’,’age’],’test’) = {‘age’:’tets’,…}
- get方法,d[‘name’] keyError , d.get(‘name’,None) = None
- has_key, items, iteritems, values, itervalues
- update: 更新另一个字典, d.update(x)
迭代
并行迭代:zip可以应付不等长序列,最短序列用完就停止。
names=['anne','beth','george']ages=[12,45,32]zip(names, ages)>>> [('anne',12),('beth',45), ('george',32)]
rang 和 xrang, xrange就是迭代器类型的。
列表推倒式
- [(x,y) for x in range(3) for y in range(3)]
执行代码
exec: exec “print ‘hello world’”
from math import sqrtscope = {}exec 'sqrt = 1' in scopesqrt(4) >>> 2.0scope['sqrt'] >>> 1
eval:用于求值。
eval( 6+18*2 ) >>> 42scope = {'x':2,'y':4}eval('x * y', scope) >>> 6
方法
- def store(*params): params接收所有的参数,元组
- def print_param(title, *params):星号收集其余参数
- def print_param(**params):收集a=2参数,字典
- x=1, vars()[x]:内建的vars函数可以返回作用域字典。
- globals函数返回全局变量字典,locals函数返回局部变量字典。
标准库
- 标准库的bisect模块可以非常有效的实现二元查找。
- map.filter和reduce函数3.0中迁移至functools模块中。
类
Python私有属性方法:名字前面加双下划线,def __inaccessible(sefl)。__inaccessible外界无法访问,只能内部访问,
class Person: def __getName(self): print 'chenqi'//实际上__getName会被翻译成,Person._Person__getName; p._Person__getName();
- 前面带一个下划线的,不能被 from module import * 导入。
- 类可以有静态变量。
- bases: 获取基类。
- isinstance(s, SPAMFilter),是否是一个类的实例。issubclass(SPAMFilter,Filter):是否是另一个的子类。
- 查看哪个类,class
- hasattr(tc, ‘talk’); callable(getattr(tc,’talk’,None))
- setattr(tc, ‘name’, ‘Mr,chenqi’)
- dict:查看对象内所有存储的值。或者inspect模块。
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
类方法,类函数:
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
__getattr__, __setattr__ 等:
1. __getattribute__(self, name):当name被访问的时候自动被调用(只能在新式类中使用)。2. __getattr__(self, name):当name被访问,且对象没有相应的特性时被自动调用。3. __setattr__(self, name, value):当给name赋值时自动调用。4. __delattr__(self, name):当删除name时被自动调用。
迭代器:
__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) ==> 得到序列
生成器:
- yield:
模块:
- reload函数:强制重新加载。Python3去掉了reload(exec)。
- 模块在第一次导入程序时被执行。
- 模块可以保持自己的作用域,所有的类的函数及赋值后都成为模块属性。
- __name__可以获取模块名称。
包:
包的布局:
~/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模块
help(copy.copy) : 显示帮助。
- print copy.copy.doc : 只显示方法信息。
- 如查看range的描述信息: print range.doc
- 查看源文件: __file__
标准库:
- sys库:
- os库
- fileinput
- heapq: 堆队列
- deque:双端队列 位于: collections模块
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() //当前时间(新纪元开始后的秒)
- datetime(支持日期和时间的算法) 和 timeit(执行时间计时)
- random:伪随机数。 os.urandom()是真随机数 和 random模块的SystemRandom类。
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
- compile(pattern[,flags]) : 根据表达式创建模式对象。
- search(pattern,string[.flags]) : 在字符串中寻找模式
- match(pattern,string[,flags]) : 根据模式的匹配项来分割字符串。
- split(pattern,string[,maxsplit=0]) : 根据模式的匹配项来分割字符串。findall(pattern,string) : 列出字符串模式的所有匹配项。
- sub(pat, repl, string[,count=0]) : 将字符串中所有pat用repl替换。
- escape(string) : 将字符串中所有特殊表达式转义。
方法:
group([group1,...]) //获取给定子模式的匹配项start([group]) //返回给定组的匹配项的开始位置end([group]) //返回给定匹配项的结束位置span([group]) //返回开始和结束位置
其他标准模块
- functools:python3中,fiter和reduce包含在该模块中。
- difflib:可以计算两个序列的相似度。可以找出序列最像的那个。或者简单的搜索程序。
- hashlib:可以通过字符串计算签名,可以应用于大文本文件,同时在加密和安全性方面有很多用途。
- csv:csv是逗号分隔值的简写,使用csv模块可以轻松读写CSV文件。
- timeit、profile和trace:timeit模块是衡量运行时间的工具(pstats)。trace可以提供总的分析。
- datetime:支持特殊的日期和时间对象。
- itertools:可以用来创建和联合迭代器。
- logging:写入日志文件。
- getopt和optparse。
- 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)
文件迭代器
从2.2版本开始,文件对象可迭代,所以for循环中使用。
f = open(filename)for line in f (sys.stdin): process(line)f.close()
- list(open(file)) == readlines()
数据库支持
连接:connect():
dsn // 数据源名称,给出该参数表示数据库依赖user //用户名password //用户名密码host //主机名database //数据库名
连接对象的方法:
close() //关闭连接后,连接对象和游标均不可用commit() //如果支持的话就提交挂起的事务,否则不做任何事rollback() //回滚挂起事务,可能不可用cursor() //返回连接对象的游标对象
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
类型:
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列
使用示例:
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()
网络编程
网络编程
套接字。
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)
urllib 和 urllib2 模块。lib2可以提供HTTP验证,cookie或者为自己的协议写扩展程序。
from urllib import urlopenwebpage = urlopen('http://www.python.org')text = webpage.read()//close read readline readlines
urlretrieve可以下载文件并在本地存储。如果没有指定文件,就会放在临时位置。
urlretrieve('http://www.python.org', 'c:\\python.html')
SocketServer模块
- SocketServer模块是标准库中很多服务器框架的基础。还包括BaseHTTPServer,SimpleHTTPServer,CGIHTTPServer,SimpleXMLRPCServer和DocXMLRPCServer。
- SocketServer包含4个基本的类:TCPServer;UDPServer;UnixStreamServer和UnixDatagramServer。
Twisted服务器
测试
测试工具
- unitest:通用测试框架。
- doctest:检查文档。
程序打包
- Distutils模块:
- Py2exe创建可执行程序。
日志记录
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')
画幅画
- ReportLab很容易使用并且为PDF中的图形和文档生成提供了丰富的功能。
XML
SAX语法分析器:
form xml.sax import make_parserparser = make_parser()
- PyXML框架,ElementTree;
- 标准库: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的区别:
- print 和 exec 等变为方法。
- map.filter和reduce函数3.0中迁移至functools模块中。
- Python3中不存在旧式类,(__metaclass__=type)。
- Python3 中 hasattr(x, ‘__call__’)
- python3.0实现__netxt__方法,next(it) == it.next().
- python3已经删掉了reload。
- python3生成器允许带return,而Python2只能通过raise StopIteration来终止yield。
- python 基础学习小记
- Python基础小记
- 基础小记
- python 小记
- python小记
- python小记
- python 小记
- python 小记
- Python 小记
- Python小记
- C基础知识点小记
- lua基础小记
- PHP基础小记
- linux基础学习小记
- js基础小记
- android selector 基础小记
- IPC基础小记
- Java基础小记
- IE8 不识别json对象
- 获取Context的3种方法
- Java Swing: JComboBox removeAllItems()和removeAll()
- openssh-7.5p1升级
- IsWindow
- Python基础小记
- 两个bat文件传递参数
- DataBinding
- 什么是dynamic_cast static_cast
- soapui_1_下载,安装
- C++primer plus第十七章编程练习
- Win8操作系统添加系统语言
- SQL Server: 消除科学计数法,显示完整的小数格式
- iOS开发:过滤网络请求中,服务器返回空值null数据的处理(过滤null显示问题)