Python笔记
Python 2.0+
示例:
#!/usr/bin/python
print "Hello, World!"
--------Python开发基础----------------------------------------------------------------
1 Python中文编码
2.7需要加上 # -*- coding: UTF-8 -*-
2 Python基础语法
标识符:
以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入;
以双下划线开头的 __foo 代表类的私有成员;以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
缩进:
建议你在每个缩进层次使用 单个制表符 或 两个空格 或 四个空格 , 切记不能混用
可以使用斜杠( \)将一行的语句分为多行显示
注解:
#单行注解
’’’或””” 表示多行注解
等待用户输入:
raw_input()
Print输出:
默认换行,若不想换行末尾加上逗号print(x,y)
命令行参数:
getopt.getopt() 方法用于解析命令行参数列表
3 Python 变量类型
Numbers(数字),String(字符串),List(列表),Tuple(元组),Dictionary(字典)
数字数据Numbers: 是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。int(有符号整型),long(长整型),float(浮点型),complex(复数)
字符串String:[头下标:尾下标] 获取的子字符串包含头下标的字符,但不包含尾下标的字符。
列表List:[]表示,可以切割和截取,有序的对象集合,通过偏移存取
元组Tuple:()表示,不能二次赋值,
字典Dictionary:{}表示,无序的对象集合,使用键存取,key-value
数据类型转换:只需要将数据类型作为函数名即可
4 运算符
算术运算符:%取模,**幂(即x的y次幂),//取整除(向下取整)。{python2.*中整数除整数只能得到整数,除非将其中一个改为浮点数)
比较运算符:<>不等于(即比较两个对象是否不相等)
赋值运算符:**=,//=
位运算符(把数字看作二进制来进行计算的):^按位异或运算符(即当两对应的二进位相异时结果为1),<<左移动运算符
逻辑运算符:and or not
成员运算符:in(在指定的序列中) ,not in
身份运算符:is(判断两个标识符是不是引用自一个对象),is not
----is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等
运算符优先级:
5 条件语句
6 循环语句
while,while^else语句,ctrl+c可以中断循环
for,for^else语句(在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。)
嵌套循环,
pass是空语句,是为了保持程序结构的完整性
7 Numbers类型转换
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
一些数学函数:math模块运算的是浮点数,cmath模块运算的是复数
随机数函数:choice,randrange,random,seed,shuffle,uniform
8 字符串String转义字符,格式化字符串,三引号,字符串内建函数,
\a响铃,\v纵向制表符,
%c格式化字符,%s格式化字符串,%d格式化整数
三引号可以将复杂的字符串进行复制
9 元组的元素不能修改和删除,但是可以连接和删除整个元组
10 日期和时间
time.time(),time.localtime(),
格式化时间time,asctime()
格式化日期time.strftime()
calendar.month()
11 Python函数
函数传参:
不可更改类型:strings,tuple,numbers --值传递(函数参数不可变类型)
可更改类型:list,dict --引用传递(函数参数可变类型)
不定长参数
匿名函数:使用lambda来创建匿名函数 lambda [arg1 [,arg2,.....argn]]:expression
全局变量和局部变量
12 python模块(即.py)
如果要给函数内的全局变量赋值,必须使用 global 语句。 即global money
dir()函数:排序?
globals(),locals()
reload()函数:重新执行模块里顶层部分的代码
python中的包:文件中需要存在__init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。
13 python文件i/o
打印到屏幕:print()
读取键盘输入:raw_input()读取一行,input()读取一行,且可以作为表达式输入
打开文件:open()
file.close():方法刷新缓冲区里任何还没写入的信息,并关闭该文件
file.write():会在字符串的结尾添加换行符('\n')
file.read():从一个打开的文件中读取一个字符串
文件定位:tell()方法告诉你文件内的当前位置,seek(offset [,from])方法改变当前文件的位置
重命名文件:rename()
删除文件:remove()
创建文件:mkdir()
改变当前文件目录:chdir()
显示当前目录:getcwd()
删除目录:rmdir()
14 File方法
with open('/path/to/file', 'r') as f:
15 异常处理
try...except..else..没有异常则执行else后的语句
去掉权限 chmod -w testfil
try...finally..不管有没有异常,都会执行finally后的语句
触发异常:用户自己触发异常
用户自定义异常:
16 Python文件/目录方法
---------Python高级教程-----------------------------------------------------------------------
17 Python面向对象
创建类:
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类
对象销毁:
Python 使用了引用计数这一简单技术来跟踪和回收垃圾。
Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。
基础重载方法:
__init__ ( self [,args...] )构造函数
__del__( self )析构方法, 删除一个对象
类属性与方法:
类的私有属性:__private_attrs
类的私有方法:__private_method
类的方法:必须包含self
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
18 Python正则表达式
re.match(pattern, string, flags=0):
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.search(pattern, string, flags=0):
re.search 扫描整个字符串并返回第一个成功的匹配。
re.sub(pattern, repl, string, count=0, flags=0):
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。--且repl参数可以是一个自定义函数
re.compile(pattern[, flags]):
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
group([group1, …]),start([group]),end([group]) ,span([group])
findall(string[, pos[, endpos]]):
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
re.finditer(pattern, string, flags=0):
在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
re.split(pattern, string[, maxsplit=0, flags=0]):
split 方法按照能够匹配的子串将字符串分割后返回列表
正则表达式对象:re.compile()
正则表达式修饰符-可选标志
特殊字符类
19 Python GGI编程
CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上
CGI架构:
Browser->Internet->Web Server
POST和GET方法:
GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以"?"号分割,
url示例、表单示例、
使用POST方法向服务器传递数据是更安全可靠的,像一些敏感信息如用户密码等需要使用POST传输数据
传递checkbox数据、传递Radio数据、传递Textarea数据、传递下拉数据、
使用Cookie:
cookie 就是在客户访问脚本的同时,通过客户的浏览器,在客户硬盘上写入纪录数据 ,当下次客户访问脚本时取回数据信息,从而达到身份判别的功能,cookie 常用在身份校验中。
Set-cookie:name=name;expires=date;path=path;domain=domain;secure
Cookie信息检索
20 MySQL数据库
21 Python网络编程
服务器端和客户端之间的信息传递
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
Python Internet模块
22 SMTP发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
发送HTML格式的邮件
发送带附件的邮件
在HTML中添加图片
使用第三方SMTP服务发送
23 Python多线程
多线程类似于同时执行多个不同程序,Python中使用线程有两种方式:函数或者用类来包装线程对象。
函数式:调用thread模块中的start_new_thread()函数来产生新线程。
thread.start_new_thread ( function, args[, kwargs] )
线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
run(),start(),join([time]),isAlive(),getName(),setName()
线程模块:
Python通过两个标准库thread和threading提供对线程的支持。
使用Threading模块创建线程,直接从threading.Thread继承,然后重写__init__方法和run方法:
线程同步:
使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release方法
锁有两种状态——锁定和未锁定。
线程的优先级队列:
Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO……
24 Python XML解析
XML 指可扩展标记语言(eXtensible Markup Language)。 XML 被设计用来传输和存储数据
python有三种方法解析XML,SAX,DOM,以及ElementTree:
因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。
SAX是一种基于事件驱动的API。SAX解析XML文档牵涉到两个部分:解析器和事件处理器。
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
25 Python GUI编程(Tkinter)
常见的python GUI库:Tkinter,wxPython,Jython
Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库
tkinter编程,tkinter组件,标准属性,几何管理
26 Python2.x和3.x的区别
print()函数:
Unicode:在 Python 3,我们最终有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。
除法运算:
在python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。
而对于//除法,这种除法叫做floor除法,会对除法的结果自动进行一个floor操作
异常:
捕获异常的语法由 except exc, var 改为 except exc as var。
xrange()
在 Python 3 中 xrange() 会抛出命名异常
八进制字面量表示:
八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111
不等运算符:
Python 3.x中去掉了<>, 只有!=一种写法
去掉了repr表达式“:
Python 3.x 中去掉了``这种写法,只允许使用repr函数
多个模块被改名:
数据类型改变:
Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long
新增了bytes类型,对应于2.X版本的八位串
str对象和bytes对象可以使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互转化
27 Python IDE
PyCharm
Sublime text
Eclipse+Pydev
28 Python Json
json.dumps 将 Python 对象编码成 JSON 字符串
json.loads 将已编码的 JSON 字符串解码为 Python 对象
---------Python开发小技巧----------------------------------------------------------------------------------
…… Python开发小技巧
python if not in 多条件判断代码:
all([True,False,True]) 结果为False,all函数测试迭代对象中是否所有条件都成立;
any([True,False,False]) 结果为True,any测试是否至少有一个条件成立
python文件操作
文件操作的三种模式:r(only-read),w(only-write),a(append)
f = open('file','r') #有时为了避免乱码,需要加上encoding='UTF-8'
for line in f.readlines():
print(line)
line.strip() #去掉空行
f2 = open('file2','w',encoding='utf8') #写入的时候必须加utf8
tell():查询光标位置
seek():光标定位
flush():同步将数据从缓存转移到磁盘sys.stdout.flush()
truncate():截断 a模式下,截断指定位置后的内容
r+(读写模式),w+(写读模式,先清空原内容再写入),a+(追加读模式)
with语句with open('file','r') as f1,open('file2','w',encoding='utf8') as f2:
print()不输出空行
print(i,end = " ")
.....