py_compile.compile(hello.py)
优化代码 pyo
python -O -m py_compile hello.py
syntaxError 语法错误
NameError 变量函数名字错误
id(a) 变量在内存中的地址
赋值语句
a+=50
a-=50
a*=50
a\=50
a%=50
逻辑判断
1>2 and 2<3 false 两个都成立即位真
or 只有一个成立即为真
not 1>2 取反
raw_input() raw_input("please input...")
int(raw_input())
测试数据类型
type(num)
切片
a="abcde"
a[1:4]
a[:4]
a[4:]
a[::2]
a[-1] 最后一个
a[-4:-1]
a[-2:-5:-1] 反着取 dcb
dir(__builtins__)
help(input)
len(str1) 求序列长度
str1+str2 连接序列
str1*5 重复5次
'c' in str1 判断元素c是否在序列中
max(str2) 取最大值
min(str1)
cmp(str1,str2) 比较字符串大小返回值是1,-1,0
###############################################################################################################
元组()
t=("milo",30,"male")
t[0]
t2(2,) 只有一个元素的元组
元组的值不能更改
name,age,gender=t
a,b,c=(1,2,3)
列表[]
t=["milo",30,"male"]
t2['abc'] 只有一个元素的列表
listmilo[0] = 'zou'
listmilo.append("12345678")
listmilo.remove('12345678')
listmilo.remove(listmilo[3])
def machine(x=2,y="奶油"): 形参可以指定默认值,可以指定一个也可以全部
global y 强制声明全局变量
tuples 元组
list 列表
dict 字典
字典{} 哈希表无序的
dic['name'] 取值
dic={"name":"molo","age":25}
for k in dic:
print k
print dic[k]
dic[name]='mike' 修改字典的键值对
del(dic[name]) 删除字典的键值对
dic.pop('age') 弹出
dic.clear 全删字典为空
del(dic) 删除字典
dic.get(3) 取值
dic.get(3,"error") 取值不存在则报自定义的错误信息
dic.keys() 返回key列表类型
dic.values 返回values立标类型
查看对象里的方法 dir(dic)
###########################################################################################################
循环
for x in "abcd":
print "hello"
range(10) 生成序列
for x in range(100):
range(1,11,2) 起始值,中止值,步长
xrange(10)
for x in d:
print d[x]
print d.items()
for k,v in d.items():
print k
print v
利用原理
a,b,c = t
t=[1,2,3]
循环带else的例子
for x in y:
xxx
else:
xxx
import time
time.sleep(1)
循环
pass 代码桩
exit() 结束程序
continue
break
while xi="q":
xxx
else:
xxx
############################################################################################################
函数
def aaa():
sum([1,2,3,4,5,])
tab和四个空格在,第一行打tab第二行打空格是不行的
格式化输出
print "%s,%S"% x,y
传元组进函数
f(*t)
传字典进函数
f(**d)
如与函数的形参数不一致则可以这样传值
f(d['n'],d['a'])
处理多余的参数
def(x,*args):
def(x,*args,**kwargs):
lambda 匿名函数
def f(x,y)
return x*y
g=lambda x,y:x*y
g(2,3)
def f(x,y)
return x*y
l=range(1,6)
每次取两值给f,l是序列
reduce(f,l)
用lambda表达式计算阶乘计算
reduce(lambda x,y:x*y,range(1,6))
from __future__ import division 除法结果带商和余数
switch实现 采用字典实现
from __future__ import division
x=1
y=2
operator = "/"
result ={
"+":x+y,
"-":x-y,
"*":x*y,
"\":x\y
}
print result.get(operator)
内置函数
abs()
min()
max()
len()
divmod()
pow()
round()
callable() 测试函数可被调用,布尔值
isinstance() 测试对象是不是括号中的类型 isinstance([],list) 返回true
cmp() 比较字符串
range() 快速生成序列
xrange()
类型转化函数
type()
int()
long()
float()
str()
list()
tuple()
hex()
oct()
chr()
ord()
string函数
str.capitalize() 首字母大写
str.replace()
str.split()
序列操作函数
len()
min()
max()
reduce() 每次取前两个和后一个做运算
reduce(lambda x,y:x+y,range(1,101)) //1-100相加
filter() 调用另一个函数,第一个参数
zip()
zip(name,age,tel) 合并三个序列
map(None,name,age,tel) map值不够用none代替,第一个值可用函数传入
################################################################################################################
包,模块
导入到顺序:本目录-->lib目录-->packs-->没有
包:__init__.py 与模块放在同一目录下这个目录就是包名
import
import as
from cal import jia
#####################################################################################################################
正则表达式
元字符
. 匹配任意一个字符
^ 匹配行首一个
$ 匹配行尾一个
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{} 重复n次或更多次,{n,m} 重复n到m次 {3,4} 重复3代表的正则4次
[] 指定一个字符集,可以匹配其中的任意一个。[^io] ^是取反的意思,整体是除了i和o的字符;元字符不起作用。
\
| 或者的意思,两边有一个成立都可以。
()
\b 单词的开头或结尾,也就是单词的分界处
.*连在一起就意味着任意数量的不包含换行的字符
常用元字符
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
常用限定字符
代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
常用反义词
代码/语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
编译正则表达式
str=re.compile(ab*)
或者
r1= r"\d{3,4}-?\d{7,8}" //定义一个正则表达式
p_tel = re.compile(r1)
p_tel.findall('010-12345678')
后面的参数可以大小写匹配
csvt_re = re.compile(r'csvt',re.I)
csvt_re.findall('csVT')
match() 查找字符串,只从开头找,找到后返回一个对象::决定RE是否在字符串开始的位置
search() 查找字符串,全字符查找,找到后返回::扫描字符串,找到这个RE匹配的位置
findall() 匹配所有字符串,并把它们作为一个列表返回
finditer() 匹配所有字符串,并把它们作为一个迭代器返回
group() match找到后可以用group看到结果::返回被RE匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含(开始,结束)位置
实际程序中,最常见的做法是将‘MatchObject’保存在一个变量里,然后检查它是否为None
#!pthon
p=re.compile(...)
m=p.match('string goes here')
if m:
print 'Match found',m.group()
else:
print 'no match'
sub() 替换字符串
re.sub(r'c..t','pthon','csvt caat cvvt cccc')
结果为python python python cccc 替换了,支持正则的替换
subn() 返回的结果与sub多一个一共替换了多少次
spilt()
re.split(r'[\+\-\*]','123+456-789*')
内置函数列表
dir(re)
编译标志
DOTALL,S 使.匹配包括换行在内的所有字符re.S
IGNORECASE,I 使匹配对大小写不敏感re.I
LOCALE,L 做本地化识别时候用这个re.L
MULTILINE,M 匹配多行时候使用,可以忽略换行符等特殊字符re.M
VERBOSE,X 当定义的正则是多行时候可以用这个re.X
分组