python   学习笔记 (核心)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python   学习笔记 (核心)相关的知识,希望对你有一定的参考价值。

python    学习笔记 (核心)

Python解释器从头到尾一行接一行执行脚本

# -*- coding: UTF-8 -*-    //字符编码

不区分单引号和双引号,x=’hello’,x[0],x[-1]指最后一个字符,x[2:4]取子串,

‘’’hello’’’ #hello三引号会保留文本输入时的换行符制表符等不需要转义,用于多行原样输入保存

‘hello’+’world’ #字符串拼接,’hello’*2 #字符串重复

help(fun) #帮助,help(module.method)

print(1,2,sep=’,’) #输出常量、变量,也可以通过变量名直接查看变量

>> #重定向

int(9.9) #强制转换为int

+ - * /传统除法有小数 //用作浮点除法对结果进行四舍五入 %求余 **乘方,pow(x,y)#x^y

<  <=  >  >=  ==  !=  and   or   not  如:not 2<4,not优先级最高仅次于比较运算符

变量名:字符或下划线开头后接数字、字母、下划线,区分大小写

Python是动态语言:不需要预先声明变量的类型,变量的类型和值在赋值那一刻被初始化

y*=10;可以,但是y++不可以

int、long(比c语言的长整数大,int会自动扩充到long)、bool、float、complex

列表:x=[1,2,’3’] #可以用[1:3]取子列表2、3,元素可修改

元组:x=(1,2,’3’) #元组元素不可以修改,可以通过下标也可以访问子元组

字典:x={1:2,’3’:’4’},x.keys()#返回键,x.values()#值

if expression:

commands;

elif expression:

commands;

else:

commands;

if not expr1 and expr2:#not优先级比and高

while expression:#直至表达式为假

commands;

for i in range(3):#range(start=0,stop,step=1)#[start,stop),start和step要么都不出现要么同时出现

print(‘hello world’);

break可用于while和for中

continue

pass #标记的语句忽略

三元表达式:x if C else y #C?x:y

def fun_name([arguments]):#[]表示可选,函数通过引用传递即函数内对参数的改变会影响原始对象,没有return语句则自动返回None对象

commands;

class ClassName(base_class):

static_member_declarations;

__name;#定义私有变量

def __init__(...):#构造函数,在对象创建后执行的第一个方法用于初始化对象

创建对象:object=ClassName()#自动调用__init__(),每个对象都有一个计数器

import moudle后调用fun必须module.fun()

from module import * 后可直接调用fun()

模块:module_name.py,导入模块import module_name,访问模块属性和访问对象属性是一样的object.attribute即module_name.fun(),module_name.variable,如:import sys; sys.stdou.write(‘Hello World\n’)

if __name__==’__main__’:#当在命令行python module_name时脚本会自动执行,而在Python IDE下__name__为具体的模块名称不是__main__,直接执行就是__main__,被导入import就是模块名字

fun();

dir() #显示全局变量的名字,dir(x) #列出x的内建方法

cmp(x,y) #    若    x<y    返回    <0,    若    x>y    返回    >0,x==y    返回    0    ,自定义对象则会调用类的    __cmp__()    方法  

repr(x) #    返回一个对象的字符串表示,可以还原对象    ,x==eval(repr(x))    通常成立  

str(x) #    返回对象适合可读性好的字符串表示  

type(x) #返回对象的类型,type(x).__name__返回类型名称

isinstance(x,(int,long)) #第二个参数是元组,若x类型在元组中则返回true

id(x) #    返回对象的    id    可以认为是对象的内存地址,可以用于判断两个对象是否相同    is(a)==id(b)  

x is y / x is not y #    测试两个变量是否执行同一个对象  

del x #删除对象,实际是引用计数减1

\  #代码分行

y=x=1 #赋值

x,y,z=1,2,’z’ #(x,y.z)=(1,2,’z’), x,y=y,x#交换两变量值

下划线的特殊用法:可见尽量避免使用下划线作为变量名的开始

_xxx 不用从from module import *导入

__xxx__ 系统定义的名字

__xxx     类中私有成员  

None #Nonetype    对象,不支持任何运算和内建方法,类似于    void    ,它的    bool    为    false  

所有标准对象均可用于布尔测试,同类型对象之间可以比较大小,空对象    ({})    、值为零、    None    的    bool    值为    false  

运算符优先级:内置函数如    cmp      比较运算符      对象比较    is/is not      逻辑比较    not/and/or  

变量分类:

数字 标量 不可变 直接访问

字符串 标量 不可变 顺序访问

列表 容器 可变 顺序访问

元组 容器 不可变 顺序访问

字典 容器 可变 映射访问    key  

数字:整型、长整形、布尔型、双精度浮点型、十进制浮点型、复数    x=complex(1,2);x.conjugate()#    共轭    ;x.real    实部    ;x.imag    虚部  

1/2=0    地板除    ;1/2.0=0.5    浮点除法真正的除法  

整数位运算:    ~    取反,    &    按位与,    |    或,    ^    异或,    <<    左移,    >>    右移  

数字类型函数:    int(),long(),float(),complex(),bool(x)    即    x.__nozero__(),abs(),divmod()    返回商和余数的元组    ,pow(),round(x,num)    四舍五入    num    是小数位数,这里注意    int()    是直接截去小数部分,    floor()    是返回最接近原数但小于的整数,    round()    最接近原数可能大于原数的整数,    coerce(x,y)#    将    x    和    y    转换为同一类型返回    (x,y)    的元组  

oct(x) #    八进制,    hex(x)#    十六进制  

chr(97)#ASCII    字符,    ord(‘a‘)#ASCII    码,    unichr(num)#    将    unicode    值转为    unicode    字符  

序列:下标从    0    开始至    -1  

obj [not] in seq #    若对象    obj    在序列    seq    中返回    true  

seq[index1:index2] #    取子序列,支持负索引  

seq*num #    序列重复    num    次  

seq1+seq2 #    连接两个序列  

seq[::-1] #    翻转序列,    seq[::2] #    隔一个取一个  

enumerate(iter) #    以一个可迭代对象为参数,返回一个    enumerate    对象    (    也是一个迭代器    )    ,该对象生成由    iter    每个元素的    index    值和    iter    值组成的元组  

reversed(x) #    返回一个逆序访问的迭代器  

sorted(iter,func=None,key=None,reverse=False) #iter    是可迭代对象,返回一个有序列表,     key    :用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项    ;reverse    :排序规则. reverse = True 或者 reverse = False,有默认值    ;func    :用于比较的函数,比较什么由    key    决定    ,    有默认值,迭代集合中的一项    ;  

sum(x,init=0) #    以初值    init    求序列和  

max(x),min(x) 

zip(x) #    返回一个列表,列表元素是元组,元组的第一个元素的    x    的值,    zip(x,y)#    构成元组  

字符串是不可变的,即    x=‘hello world‘; x[0]=‘H‘    是错误的,可以变量赋值的方式更新字符串,    x=x[:2]+x[3:]#    删除第一个    l  

x=raw_input(“Input:”) #    输入  

字符串内置函数:

str(3.14) #    数字转为字符    ‘3.14‘  

s.capitalize() #    把第一字符大写  

s.center(width) #    将原始字符串置于宽度为    width    的中间  

s.count(str,beg=0,end=len(s)) #    返回    str    在    s    出现的次数  

s.encode(encoding=‘UTF-8‘,errors=‘strict‘) #    指定编码格式,    s.decode    解码  

s.endswith(obj,beg=0,end=len(s)) #    检查指定范围内的子串是否以    obj    结束  

s.find(str,beg=0,end=len(s)) #    检测    str    是否包含在    s    中,返回开始的索引值否则返回    -1  

s.index(str,beg=0,end=len(s)) #    同上    ,    若不在则报一个异常  

s.isalnum() #s    至少有一个字符并且所有字符都是字母或数字则返回    true  

s.isalpha() #    至少一个字符且所有都是字母返回    true  

s.isdecimal() #    只含有十进制数字返回    true  

s.isdigit() #    只包含数字返回    true  

s.islower() #    都是小写返回    true  

s.isumeric() #    只包含数字字符返回    true  

s.isspace() #    只包含空格返回    true  

s.istitle() #    标题化的返回    true  

s.isupper() #    全是大写返回    true  

s.join(seq) #s=‘xyz‘;s.join(‘abc‘)    为    ‘axyzbxyzc‘  

s.ljust(width) #    左对齐  

s.lower() #    小写  

s.lstrip() #    截掉左边的空格  

s.partition(str) #    当    s    中包含    str    时    s    被切分为元组    (pre,str,end),    若    str    不在    s    中    pre==s  

s.replace(str1,str2,num=s.count(str1)) #    将    s    中的    str1    替换为    str2    不超过    num    次  

s.rfind(str,beg=0,end=len(s)) #    类似于    find    但是从右边查找  

s.rindex(str,beg=0,end=len(s)) #    类似于    index    ,从右边开始  

s.rpartition(str)

s.rstrip()

s.split(str=””,num=s.count(str))#    以    str    默认空格为分隔切分字符串,    num    为分割次数  

s.splitlines(num=s.count(‘\n‘)) #    返回一个包含各行作为元素的列表,    num    指定元素个数  

s.startswith(obj,beg=0,end=len(s)) #    检查    s    是否以    obj    开头  

s.strip(obj) #    执行    lstrip    和    rstrip,    去掉左右两边的空格  

s.swapcase()#    翻转大小写  

s.title() #    标题化,所有单词开始都大写  

s.translate(str,del=‘‘) #    根据    str    给出的表转换    s    的字符,需要过滤的字符放在    del    中  

s.upper(0 #    该为大写  

s.zfill(width) #    右对齐  

列表    list    :可以包含任意个不同类型对象,如    x=[1,‘2‘,[‘x‘,complex(1,1)]]  

list(),tuple() #    强转  

x.append(‘h‘) #    追加元素  

del(x[3]) #    删除指定下标的元素,    del x #    删除列表  

x.remove(‘2‘) #    移除具体的元素  

obj [not] in x #    检查一个对象是否在列表中  

x+y #    列表连接,新建一个列表  

x.extend(y) #    将    y    追加到    x    中  

x*num #    列表重复    num    次  

x.count(obj) #    统计    obj    在列表中出现的次数  

x.index(obj,i=0,j=len(x)) #    在指定范围内查找等于    obj    的下标  

x.insert(index,obj) #    指定下标    index    处插入    obj  

x.pop(index=-1) #    删除并返回指定下标位置的对象  

x.reverse() #    原地翻转列表  

x.sort(func=None,key=None,revers=False) #    修改对象的方法是没有返回值的,字符串内置的    sort    有返回值是因为字符串不可修改  

元组:不可变,连接可用,重复操作可用,元组内可变的元素还是可以变的。函数    return x,y,z;    返回的多对象就是以元组形式  

浅拷贝:当对象赋值时是简单的对象引用    (    增加计数    )    ,    copy.cpoy()  

深拷贝:完全拷贝,    import copy; x=copy.deepcopy(y);    非容器类型没有拷贝一说,若元组只包含原子类型对象对它的深拷贝不会进行  

字典:    key    是不变的所以数字和字符串可以作为    key    且可    hash    的,但是列表、其它字典不可以,不支持拼接和重复操作  

x=dict(([‘x‘,1],[‘y‘,2]))    或者    x={‘x‘:1,‘y‘:2}  

for key in x.keys(): #    遍历字典  

for key in x: #    遍历字典  

x.has_key(‘x‘) #    检测是否有    ‘x‘  

‘x‘ [not] in x #    检测是否有    ‘x‘  

del x[‘x‘] #    删除    key    为    ‘x‘    的条目,    del  x #    删除整个字典  

x.clear() #    清空字典  

x.pop(‘x‘) #    删除并返回    ‘x‘    的值  

x.copy() #    浅拷贝一个副本  

x.fromkeys(seq,value=None) #    创建一个新字典    seq    是    key    ,    val    默认是    None  

x.get(key,default=None) #    茶盏    key    的    value    ,不存在则返回    default  

x.items() #    返回字典中    (key,value)    的列表  

x.iter() #    返回一个迭代子  

x.pop(key,default) #    若    key    在则删除,    key    不在且没有    default    则异常  

x.setdefault(key,default=None) #x[key]=default

x.update(y) #    将字典    y    添加到    x    中  

x.values()#    值列表  

集合:    set    、    frozenset    不可变集合,支持    [not] in,len(),for    迭代,不支持索引和切片    :    操作,没有    keys().set    是可变的所以是不可哈希的,    frozenset    是不可变的故可哈希所以可以作为字典的    key    就或集合的成员  

集合创建的唯一方法:    x=set(‘123‘) #    可迭代作为参数,字符串可迭代,    x=frozenset(range(3))  

‘1‘ in x #    检测元素,属于,    not in    不属于  

x.add(‘4‘) #    添加  

x.update(‘345‘) #    添加     

x.remove(‘1‘) #    删除元素  

x.discard(‘3‘) #    删除元素  

del x

x==y  x!=y 

x<y  x<=y   x    是否为    y    的真子集    /    子集  

x>y   x>=y   x    是否为    y    的严格超集    /    超集  

x|y #    并集,    x.union(y)  

x&y #    交集,    x.intersection(y)  

x-y #    差集,属于    x    不属于    y    的集合,    x.difference(y)  

x^y #    对称差分,不可能同时属于    x    或    y    的元素,    x.symmetric_difference()  

x|=y #    复合赋值  

x.issubset(y) #    若    x    是    t    的子集返回    true  

x.issuperset(y) #    若    y    是    x    的超集返回    true  

x.copy() #    浅拷贝  

i=iter(x) #    得到迭代器,    i.next()#    访问迭代器  

列表解析:    [expr for iter in iterable] #for    迭代    iterable    对象的所有条目然后    expr    应用于序列的每个成员,最后的结果值是该表达式产生的列表  

x=[y**2 for y in range(10) if not y%2] #[0, 4, 16, 36, 64]    ,过滤掉满足    if    的序列成员  

[(x,y) for x in range(3) for y in range(5)] #    迭代一个三行五列的矩阵  

a=(x>0 for x in range(-2,3,1)); for it in a: print it; #False False False True True

lst=[0 for t in range(10)] #    生成固定长度序列,全部初始化为    0  

x=‘hello python world‘; x.split(); #[‘hello‘, ‘python‘, ‘world‘]

生成器表达式:    (expr for iter in iterable if cond_expr) #    没产生一个符合条件的条目就用    expr    判断  

x=open(file_name,mode=’rwa’) #+    表示读写,    b    二进制访问,    r    文件必须存在,    w    文件若存在先清空,    a    追加,默认    r  

for line in x: print line, #    也可以    x.readlines()    但是这样会读取文本的全部内容,而前一种是靠文件迭代器    ,    这里    print Iine,    防止    print    产生换行符  

data=[line.strip() for line in x.readlines()] #strip    去除换行符  

x.close() #    关闭文件  

x.fileno() #    返回文件的描述符  

x.flush() #    刷新文件的内部缓冲区  

x.isatty() #    判断    x    是否是一个类    tty    设备  

x.next() #    返回文件下一行  

x.read(size=-1) #    从文件读取    size    个字节,当    size    为负时读取剩余所有字节  

x.readline(size=-1) #    从文件中读取并返回一行,或者返回最大    size    个字符  

x.readlines(sizhint=0) #    读取文件的所有行并返回一个列表,若    sizhint>0    返回综合大约为    sizhint    字节的行  

x.seek(off,whence=0) #    移动文件从    whence=0    文件开始    1    当前位置    2    文件末尾偏移    off    个字节  

x.tell() #    返回当前文件的位置  

x.truncate(size=x.tell()) #    截取文件到最大    size    字节,默认截取到当前位置  

x.write(str) #    向文件写入字符串,若有必要    str    需要自己添加换行符  

x.writelines(seq) #    向文件写入字符串序列    seq    ,必要时在    seq    中每行添加换行符  

x.closed #    若文件关闭返回    True  

x.mode #    访问模式  

x.name #    文件名  

x.softspace #0    表示输出以数据后要加上一个空格符,    1    表示不加  

import sys #    有    sys.stdin,sys.stdout,sys.stderr  

sys.argv #    是命令行参数列表即    argv[][] ,len(sys.argv)    是参数个数,    sys.argv[0]    是程序名  

import os;

os.linesep #    用于在文件中分隔行的字符串,    linux    是    \n  

os.sep #    用于分隔文件路径的字符串  

os.pathsep #    用于分隔文件路径的字符串  

os.curdir #    当前工作目录的字符串名称  

os.pardir #    父目录的名称  

os.mkfifio()  #    创建命名管道  

os.remove() #    删除文件  

os.rename() #    重命名文件  

os.symlink() #    创建符号连接  

os.utime() #    更新时间戳  

os.tempfile() #    创建并打开一个临时文件  

os.chdir() #    更改工作目录  

os.chroot() #    改变当前进程的根目录  

os.listdir() #    列出指定目录的文件  

os.getcwd() #    返回当前工作目录  

os.mkdir() #    创建目录  

os.rmdir() #    删除目录  

os.access(0 #    检验权限模式  

os.chmod() #    改变权限模式  

os.chown() #    改变所有者  

os.umask() #    设置默认权限模式  

os.path.basename() #    去掉目录路径返回文件名  

os.path.dirname() #    去掉文件名,返回目录路径  

os.path.join() #    将分离的各部分组合成一个路径名  

os.path.split() #    返回    (dirname(),basename())    元组  

os.path.splitdrive() #(drivename,pathname)

os.path.splitext() #(filename,extension)

os.path.getatime() #    返回最近访问时间  

os.path.getmtime() #    返回最近文件修改时间  

os.path.getsize() #    返回文件大小  

os.path.exists() #    指定路径是否存在  

os.path.isabs() #    指定路径是否为绝对路径  

os.path.isdir() #    指定路径是否为目录  

os.path.isfile() #    指定路径是否为一个文件  

os.path.islink() #    指定路径是否为一个符号链接  

os.path.ismount() #    指定路径是否为一个挂载点  

os.path.samefile() #    两个路径名是否指向同一个文件  

函数:    def fun():     若没有显示的    return    返回元素则返回    None    ,若返回多个对象则    python    把它们聚集起来并以一个元组返回,函数支持嵌套,外层函数内定义里层函数,并且外层函数需要调用里层函数才会执行里层函数  

def foo():

‘foo()--just an test fun‘#    函数文档  

print ‘hello first fun‘;

foo.__doc__ #    输出函数文档  

装饰器:函数调用之上的修饰,这些修饰仅当声明一个函数或者方法的时候才会额外调用

@g

@f

def foo():

foo()=g(f(foo))

函数和其它对象一样可以被引用、做参数、容器元素,比对象多了一个可调用特征,函数可以复制

fun=lambda arg1,....  :expression #    返回可调用的函数对象  

非关键字    (    不具名    )    可变长的参数元组必须在位置参数和默认参数之后:  

def fun(formal_args,*vargs_tuple): #*    号之后的形参作为元组传递给函数元组保存了所有传递给函数的额外参数  

for ExtrArg in vargs_tuple:

print(“the extra args:”,ExtrArg);

fun(1,2,3)# fun(1,2,3,4)

关键字变长参数:保存在参数名作为    key    ,参数值作为    value    的字典中  

def fun(formal_args,*vargs_tuple,**vargsd): #

for ExtraArg in vargs_tuple:

print(“the extra args:”,ExtraArg);

for each in vargsd.keys():

print(each,vargsd[each]);

fun(1,2,3,a=1,b=2) #1    是位置参数,    2    、    3    是不具名非关键字变长参数,    a    、    b    是关键字参数  

fun(1,*(2,3),**{‘a‘:1,‘b‘:2}) #    结果同上  

A=(2,3);B={‘a‘:1,‘b‘:2};fun(1,*A,**B) #    结果同上  

apply(func,nkw,kw) #    用可选的参数调用    func    ,    nkw    是非关键字    (    不具名    )    参数,    kw    是关键字参数,返回值的函数    func    的返回值  

filter(func,seq) #    调用一个布尔函数来迭代遍历    seq    中的每个元素,返回一个使    func    为    true    的序列  

filter(lambda x:x>0,range(-3,3,1)) # [1,2]

map(func,seq1,seq2...) #    将函数    func    作用    (    映射    )    于给定序列的每个元素    ,    并用一个列表返回,多个序列时    map    会并行的迭代每个序列  

reduce(func,seq,init) #    将二元函数    func    作用于    seq    ,首先取出    seq    的头两个元素作为    func    的参数然后返回一个值    temp    ,然后    temp    和    seq    的第三个元素作为    func    的参数    ...    直至序列尾返回一个单一的值,若有    init    则开始用    init    和    seq    第一个元素作为    func    的参数  

reduce(func,[1,2,3]) <==> func(func(1,2),3)

全局变量除非被删除,否则在整个脚本都存在且对所有函数都可访问

global var #    在函数体内局部变量会覆盖同名的全局变量,但是使用    global    声明后会使用全局变量,函数体内对它的任何修改都会影响到全局变量  

闭包的例子:

def fun(x):

def g():

return x+1;

return g;

a=fun(1);

a(); #2

yield    :生成器能暂停执行并返回一个中间结果并暂停执行,当生成器的    next()    方法被调用的时候会从暂停的地方继续执行,当没有更多的    next()    调用时抛出    StopIteration    异常。    for    循环有    next()    调用和    StopIteration    处理,所以    for    会自动遍历生成器。如:    yield (1,2) #    返回一个元组  

生成器除了通过    next()    获得下一个值    (    调用者使用    next)    ,调用者还可以向生成器发送    send()    ,生成器可以抛出异常,要求生成器    close()  

def counter(start=0):

count=start;

while True:

val=(yield count)

 if  val is not None:

count=val;

else:

count+=1;

count=counter(5);

count.next() #5

count.next() #6

count.send(9) #9

count.next() #10

coun.close()

sys.path.append(‘../..‘) #    添加搜索路径  

__builtins__     包含内建名称空间中内建名字的集合  

__builtin__     包含内建函数、异常以及其它属性,    __builtins__    包含    __bulitin__    的所有名字  

import module1,module2.... #    导入模块  

from module import name1,name2... #    导入模块指定的属性,    from numpy import *  

import Tkinter as tk

module.__name__ #    模块名称  

globals()/locals() #    返回全局    /    局部名称空间的字典  

reload(module) #    重新导入模块  

类必须有一个父类,默认是    object  

class X(base):    
   ‘class doc--‘

def __init__(self,arg):#    构造器    (    每个类都有一个默认版本    ),    返回    None  

self.no=‘mankind‘;#    实例属性  

def __new__() #    构造器,必须返回一个合法的实例  

def __del__() #    解构器  

sex=‘male‘; #    静态成员,类属性  

类体

a,b=X(),X();

a.sex == b.sex ==X.sex ==‘male‘

a.sex=‘female‘ #    此时实例属性覆盖掉类属性,    b.sex==‘male‘, X.sex==‘male‘  

X.sex=‘animal‘ # a.sex==‘female‘, b.sex==‘animal‘ #    类属性的修改会影响到所有的实例  

del a.sex 

a.sex ==‘male‘ #    删除实例属性后类属性又出现了  

静态方法属于类,类方法也属于类:

class test:

@staticmethod #    函数修饰符  

def fun():

print(static method);

@classmethod

def foo():

print(‘class method‘);

类的特殊方法:

dir(X) / X.__dict__ #    查看类的属性    (    数据成员和方法    )  

X.__name__     类名  

X.__doc__     类的说明文档  

X.__bases__     基类  

X.__module__     类所属模块  

X.__class__     对象所属的类  

X__unicode__(self) #unicode    字符串输出,内建    unicode()  

X.__call__(self,*args) #    可调用的实例  

X.__nonzero__(self) #    为对象定义    bool    值,内建    bool()  

X.__len__(self) #    类的长度,内建    len()  

X.__cmp__(self,obj) #    对象比较,内建    cmp()  

X.__lt__(self,obj) and #<=

X.__gt__(self,obj) and #>=

X.__eq__(self,obj) and #==

X.__getattr__(self,attr) #    获取属性,内建    getattr()  

X.__setattr__(self,attr,val) #    设置属性  

X.__delattr__(self,attr) #    删除属性  

X.__getattribute__(self,attr) #    获取属性,内建    getattr()  

X.__get__(self,attr) #    获取属性  

X.__set(self,attr,val) #    设置属性  

X.__delete__(self,attr) #    删除属性  

X.__*add__(self,obj) #+,*    代表    : __and__    显示    self+obj,__radd__,__iadd__    相当于    +=  

X.__*sub__(self,obj) #-

X.__*mul__(self,obj) #*

X.__*div__(self,obj) #/

X.__*truediv__(self,obj) #/

X.__*floordiv__(self,obj) #//

X.__*mod__(self,obj) #%

X.__*divmod__(self,obj) #    除和取模  

X.__*pow__(self,obj,mod) #    内建    pow(),**  

X.__*lshift__(self,obj) #<<

X.__*rshift__(self,obj) #>>    
   X.__*add__(self,obj) #&

X.__*or__(self,obj) #&

X.__*or__(self,obj) #|

X.__*xor__(self,obj) #^

X.__neg__(self) #    一元负  

X.__pos__(self) #    一元正  

X.__abds__(self) #    内建    abs()  

X.__invert__(self) #~    求反  

X.__complex__(self,com) #    内建    complex    ,转为复数  

X.__int__(self) #    内建    int(),    转为    int  

X.__long__(self) #    内建    long()    ,强转为    long  

X.__float__(self) #    内建    float(),    转为    float  

X.__oct__(self) #    内建    oct(),    八进制表示  

X.__hex__(self) #    内建    hex(),    十六进制表示  

X.__coerce__(self,num) #    内建    coerce(),    压缩成同样的数值类型  

X.__index__(self) #    压缩可选的数值类型为整型  

X.__len__(self) #    项目数  

X.__getitem__(self,ind) #    获取单个序列的元素  

X.__setitem__(self,ind,val) #    设置单个序列的元素  

X.__delitem__(self,ind) #    删除单个序列元素的表示  

X.__getslice__(self,ind1,ind2) #    获取切片  

X.__setslice__(self,i1,i2,val) #    设置序列切片  

X.__delslice__(self,ind1,ind2) #    删除切片  

X.__contains__(self,val) #    测试序列成员,内建    in    关键字  

X.__*add__(self,obj) #    连接  

X.__*mul__(self,obj) #    连接  

X.__iter__(self) #    内建    iter()    ,创建迭代类  

X.__hash__(self) #    散列  

issubclass(sub,sup) #    判断    sub    是否是    sup    的子类,    sup    可以是一个元组只要满足元组中任一个即返回    true    ,当然    sup    可以是    sub  

isinstance(obj1,obj) #    判断    obj1    是否是类    obj    的一个实例  

hasattr(obj,‘foo‘) #    判断实例    obj    是否有属性    ‘foo‘  

getattr(obj,‘foo‘,default) #    获取    obj.foo    属性,若属性不存在则引发    AttributeError    异常    ,    若指定    defult    则没有属性时返回    default    不会抛出异常  

setattr(obj,‘foo‘,val) #    给    obj    赋值    foo    属性值为    val    ,    obj.foo=val  

delattr(obj,‘foo‘) #    删除属性  

assert isinstance(val,float) #    断言    val    是    float    型  

在类中实现    __str__()    或者    __repr__()    之一就可以用    ‘print     对象     ‘    语句打印想要的输出:  

class test:

def __str__(self): #self    必须,    return    必须  

return ‘there is str;

def __repr__(self):    
   return ‘there is repr‘;

a=class();

print a; #‘there is str‘

a; #‘there is repr‘

重载加法    : __add__()  

重载    __i*__()    方法必须返回    self  

callable(obj) #    若    obj    可调用返回    true  

compile(string,file,type) #    从    type    类型中创建代码对象存放咋    file    中  

eval(obj) #    对    obj    进行求值    eval(‘1+2‘) #3  

正则表达式:

re1 | re2     匹配    re1    或    re2    ,    or    关系  

.      匹配任何字符,换行符除外  

re.match(‘.end‘,‘bend‘).group() #‘bend‘

^     字符串的开始  

$     字符串的结尾,    .*\$$    匹配以美元符号结尾的字符串  

*     匹配零次或多次  

+     匹配一次或多次  

?     零次或一次  

{n}      匹配    n    次  

{m,n}     匹配    m    到    n    次  

[…]     匹配集合中的任意一个字符  

[x-y0-9]     匹配序列    x    至    y    或    0-9  

[^...]     不匹配集合中的任意一字符  

()      分组  

\d     匹配任何数字  

\w     匹配任何数字、字母  

\s     匹配任何空白字符  

re.split(‘\s\s+‘,‘hello  the    python world‘) #    超过两个空格的划分  

\b     匹配单词边界,    \bthe\b    仅匹配    the    ,    \Bthe    包含    the    但不以    the    开头的单词  

re.search(r‘\bthe‘,‘bit the dog‘).group() #‘the‘,r    表示后面是普通字符串,即        不是转义的含义  

\nn     匹配已保存的子组    ()    产生子组    ,\16  

\c     匹配特殊字符,    \. \\ \*  

\A \Z     字符串的开始或结束  

import re;

match(pattern,string,flags=0) #    尝试用    pattern    匹配字符串    string    ,    flags    是可选标志符,成功返回一个匹配对象否则返回    None  

search(pattern,string,flags=0) #    查找    string    模式    pattern    第一次出现,成功返回匹配对象否则返回    None  

re.match(‘foo‘,‘seafood‘).group() #None

re.match(‘foo‘,‘seafood‘).group() #‘foo‘     说明    seach    会从字符串任意位置做匹配  

findall(pattern,string) #    查找所有匹配对象  

re.findall(‘car‘,‘scary the car‘])#[‘car‘,‘car‘]     返回一个列表  

finditer(pattern,string) #    同上,但是返回的是迭代器  

split(pattern,string,max=0) #    根据正则表达式    pattern    分割字符串最大    max    次默认是所有  

sub(pattern,repl,string,max=0) #    将匹配的替换为    repl    ,    max    没有给出替换所有  

re.sub(‘s‘,‘x‘,‘she is nurse‘) #‘xhe ix nurxe‘

group() #    返回所有匹配对象或特定子组  

re.match(‘foo‘,‘food on table‘).group() #‘foo‘

groups() #    返回一个包含唯一或所有子组的元组,若正则表达式没有子组的话返回一个空元组  

import socket #    网络编程  

创建套接字:    socket(socket_family,socket_type,protocol=0) #socket_family:AF_UNIX/AF_INET,socket_type:SOCK_STREAM/SOCK_DGRAM,protocal:0  

x=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp    套接字,    udp    为    SOCK_DGRAM  

x.bind() #    绑定到    IP    和    port  

x.listen() #    开始监听  

x.accept() #    阻塞式等待客户连接  

x.connect() #    发起连接  

x.connect_ex() #connect    的扩展版本出错时返回出错码而不是抛出异常  

x.recv() #    开始接收    TCP    数据  

x.send() #    发送    TCP    数据  

x.sendall() #    完整发送    tcp    数据  

x.recvfrom() #    接收    UDP    数据  

x.sendto() #    发送    udp    数据  

x.getperrname() #    获取到当前套接字的远端地址  

x.getsockname() #    当前套接字的地址  

x.getsockopt() #    返回指定套接字的参数  

x.setsockopt() #    设置指定套接字的参数  

x.close() #    关闭套接字  

x.setblocking() #    设置为阻塞    /    非阻塞  

x.settimeout() #    设置阻塞套接字操作的超时时间  

x.gettimeout() #    获得阻塞套接字操作的超时时间  

x.fileno() #    套机字的文件描述符  

x.makefile() #    创建一个与套接字关联的文件  

fromfd() #    用一个已经打开的文件描述符创建一个套接字对象  

ssl() #    在套接字初始化一个安全套接字层    ssl    不做证书验证  

getaddrinfo() #    得到地址信息  

getfqdn() #    返回完整的域的名字  

gethostname() #    得到当前主机名  

gethostbyname() #    由主机名得到对应的    ip    地址  

gethostbyname_ex() #    同上,返回主机所有的别名和    IP    地址列表  

gethostbyaddr() #    由    IP    地址得到    DNS    信息  

getprotobyname() #    由协议得到对应的号码  

getservbyname() #    由服务器名得到对应的端口号或相反  

getserbyport() #    由端口得到服务名  

ntohl()/ntohs() #    整数网络转为主机字节序  

htonl()/htons() #    整数由主机字节序转为网路     字节序

inet_aton() /inet_ntoa()#IP    地址转为整数或相反  

inet_pton()/inet_ntop() #    将    IP    地址转为二进制格式或相反  

getdefaulttimeout()/setdefaulttimeout() #    获得    /    设置套接字的超时时间  

TCP    服务端伪码:  

ss = socket() #     创建服务器套接字     

ss.bind() #     把地址绑定到套接字上     

ss.listen() #     监听连接     

inf_loop: #     服务器无限循环     

cs = ss.accept() #     接受客户的连接     

comm_loop: #     通讯循环     

cs.recv()/cs.send() #     对话(接收与发送)     

cs.close() #     关闭客户套接字     

ss.close() #     关闭服务器套接字(可选)     

TCP    客户端伪码:  

cs = socket() #     创建客户套接字     

cs.connect() #     尝试连接服务器     

comm_loop: #     通讯循环     

cs.send()/cs.recv() #     对话(发送/接收)     

cs.close() #     关闭客户套接字     

UDP    服务端伪码:  

ss = socket() #     创建一个服务器套接字     

ss.bind() #     绑定服务器套接字     

inf_loop: #     服务器无限循环     

cs = ss.recvfrom()/ss.sendto() #     对话(接收与发送)     

ss.close() #     关闭服务器套接字  

UDP    客户端伪码:  

cs = socket() #     创建客户套接字     

comm_loop: #     通讯循环     

cs.sendto()/cs.recvfrom() #     对话(发送/接收)     

cs.close() #     关闭客户套接字  

TCP    通信实例    (    粗糙的逻辑设计    echo    服务    )  

服务端代码:

from socket import *

server=socket(AF_INET,SOCK_STREAM)

server.bind((‘192.168.13.125‘,8000))#    查看端口    shell    命令    netstat -ntl | grep 8000  

server.listen(5)

while True:

client,addr=server.accept();

while True:

    data=client.recv(1024);

          if not data:

            break;

         client.send(data)

客户端代码:

from socket import *

client=socket(AF_INET,SOCK_STREAM)

client.connect((‘192.168.13.125‘,8000))

while True:

     client.send(‘hello python‘);

     while True:

         data=client.recv(1024);

        if data:

             print data;

             break;

Python    解释器可以运行多个西啊不是但在任意时刻只有一个线程在解释器中运行,    python    虚拟机的访问由全局解释器锁    GIL    来控制该锁能保证同一时刻只有一个线程在运行  

threading    模块:  

Thread     表示一个线程的执行的对象  

Lock     锁原语对象  

Rlock     可重入锁对象    (    递归锁    )  

Conditon     条件变量,条件改变时只有线程唤醒  

Event     多个线程等待条件变量时,当事件发生时所有线程被唤醒  

Semaphore     信号量  

Timer     定时器  

t=threading.Thread(target=loop,args=(...))

t.start() #    线程开始执行  

t.run() #    定义线程的功能函数  

t.join(timeout=None) #    程序挂起直到线程结束,若指定了    timeout    最多阻塞    timeout    秒  

t.getName() #    返回线程的名字  

t.setName(name) #    设置线程的名字  

t.isAlive() #    线程是否在运行中  

t.idDaemon() #    返回西啊不是的    dameon    标志  

t.sertDaemon(daemonic) #    在    start    之前设置    daemon    标志  

import Tkinter

top=Tkinter.Tk() #    底层窗口对象  

Button     按钮,提供额外的功能  

Canvas     画布提供绘图功能  

Checkbutton     选择按钮一组方框可以选择其中的任意个  

Entry     文本框  

Frame     框架包含其它组件的容器  

Label     标签显示文字或图片  

Listbox     列表框,一个选项列表可以从中选择  

Menu     菜单点下菜单按钮后弹出的一个选项列表可以供选择  

Menubutton     菜单按钮用来包含菜单的组件  

Message     消息框类似于标签  

Radiobutton     单选按钮  

Scale     进度条,  

Scrollbar     滚动条  

Text     文本域  

Toplevel     顶级  

连接    MySQL    :    sudo apt-get install python-msyqldb  

import MySQLdb

conn=MySQLdb.connect(host=‘localhost‘,user=‘root‘,passwd=‘123‘) #    连接数据库系统  

cursor=conn.cursor() #    获取操作游标  

cursor.exectue(‘create database test‘) #    创建数据库    test  

cursor.close() #    关闭连接  

conn.select_db(‘test‘) #    选择数据库  

cursor.execute(‘create table student(id int,info varchar(100))‘) #    创建数据表  

cursor.execute(‘insert into student values(%s,%s)‘,value) #value=[1,‘male‘]#    插入一条记录  

cursor.executemany(‘insert into student values(%s,%s)‘,values) #    插入一个列表    values  

count=cursor.execute(‘select * from student‘) #    查询  

result=cursor.fetchone() #    获取一条记录  

result=cursor.fetchmany(count) #    获取查询的记录  

for r in result:

print r;

cursor.scroll(0,mode=‘absolute‘) #    重置游标位置,    0    为偏移量,    mode=absolute,    默认    relative,    前提是当前游标没有越界  

results=cursor.fetchall()

for r in results:

print r;

cursor.close()

ctypes    模块:  

dll=CDLL(‘../***.so‘) #    加载动态库  

f=getattr(dll,fun_name) #    从动态库中获取函数对象  

f.restype=c_int #    设置函数返回类型  

f.argtypes=(c_int,...) #    设置函数参数类型  

声明类和联合必须继承自    Structure    和    union,    类中必须有定义一个属性    _fileds_    其中    _fields_    是一个元素为    2    元组的列表,    2    元组是    (    属性名,属性类型    )    ,如:  

class Point(Structure):

_fields_=[(‘x‘,c_int),(‘y‘,c_int)]

Numpy:

1  安装numpy:sudo apt-get install python-numpy

   安装Matplotlib: sudo apt-get install python-matplotlib

2 退出:quit()

3 numpy练习:

from numpy import* #

random.rand(4,4)#生成一个数组

randMat=mat(random.rand(4,4))#矩阵

randMat.I#逆矩阵

eye(4)#单位矩阵

4 查看并改变工作目录

import os

os.getcwd()

os.chdir("PATH")#PATH为目标路径

5 定义函数体

import operator#加载运算符模块

def 函数名(参数列表)

    函数体语句

实例:

from numpy import *

import operator

def createDataSet()

    group=array([[1,2,],[3,4],[5,6]])

    labels=[‘A‘,‘B‘,‘C‘]

    return group,labels

调用:

group,labels=createDataSet()

6 查看帮助help,如help(sorted),内建函数的查询:help(array([1,2]).sort)

   5) Numpy包的数组array

import numpy as np

a = np.arange(10)

a.reshape(2,5)#重塑数组为2行5列

a.dtype#    元素数据类型  

print(a.shape)#数组的维度具体情况如(2,3,4)表示数组最底层为4个元素,然后是3个一维数组2个二维数组

a.ndim#数组维数

a.size#    数组元素个数  

a.itemsize#    查看元素大小  

a = np.array([2,3,4])#    使用    array    函数,从    Python    列表或元组中创建  

b = np.array([1.2, 4.6, 7.8])

c = np.array([(1,2,3), (4,5,6)])

d = np.array( [ [1,2], [3,4] ], dtype=complex )#    创建复数数组    dtype    决定元素类型

e = np.zeros((3,4))#    创建全是    0    的数组  

f = np.ones( (2,3,4), dtype=np.int16 )#    创建全是    1    的数组  

g = np.empty( (2,3) )#    使用随机数来填充  

h = np.arange( 10, 30, 5 )#    创建序列  

i = np.arange(0,2,0.3)

j = np.linspace(0,2,9)

print(np.arange(10000))#     打印    numpy    数组与    Python    列表基本一样,但有些差别  

print(np.arange(10000).reshape(100,100))

7 Numpy包

a=mat([1,2,3])#矩阵

b=matrix([1,2,3])

a[0,1]#取元素

a*b.T#矩阵相乘,.T是取矩阵转置

shape(a)#查看矩阵维数

a.shape[0]#获取a的行数

multiply(a,b)#两个矩阵每个元素对应相乘

a.sort()#a的原地排序

a.argsort()#得到矩阵中每个元素的排列序号

a.mean()#计算矩阵的均值

a=mat([[1,2,3],[4,5,6]])#多维数组

a[:,0:2]#采用冒号选取多列或行,所有行0和1列

9 sorted(iteratble,cmp=None, key=None, reverse=False)。sorted和那些容器内建的sort的区别是sort是原地排序,sorted是新建一个列表

 1)key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;

 2)reverse:排序规则. reverse = True 或者 reverse = False,有默认值。

 3)cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;

 4)iterable是需要排序的数据

students = [(‘john‘, ‘A‘, 15), (‘jane‘, ‘B‘, 12), (‘dave‘, ‘B‘, 10)]

sorted(students, key=operator.itemgetter(1,2)) #先跟句第二个域排序,再根据第三个域排序

结果:[(‘john‘, ‘A‘, 15), (‘dave‘, ‘B‘, 10), (‘jane‘, ‘B‘, 12)]

10 python数组下标从0开始

11 type(a)#查看a的数据类型

12 strip声明:s为字符串,rm为要删除的字符序列

s.strip(rm) 删除s字符串

中开头、结尾处,位于 rm删除序列的字符

s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符

s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符

1) 当rm为空时,默认删除空白符(包括‘\n‘, ‘\r‘, ‘\t‘, ‘ ‘)

2) 这里的rm删除序列是只要边(开头或结尾)上的字符在删除序列内,就删除掉,如:a=‘123a‘,a.strip(‘21‘)结果为‘3a‘

13     包    profile    查看模块运行的时间:    import profile; profile.run(“fun()”)  

14 for item in set: #for    循环遍历    set    中的元素,若二维矩阵则    item    是行数据  

15 in/not in    成员测试,如:    if x not set    若    x    不在    set    中  

16 list    的扩展:    x.extend(y)#    接受列表参数    y    的扩展并且    y    的每个元素作为    x    的元素,    x.expand(y)    是将列表    y    整体作为    x    的一个元素    (expand    将参数作为一个整体,    extend    只能接收一个列表是逐个元素追加到原列表    )  

scikit-learn:

安装:

sudo apt-get install build-essential python-dev python-numpy python-setuptools python-scipy libatlas-dev//先安装依赖

kmeans    的使用:  

k_means=cluster.KMeans(k); #k    是簇数  

k_means.fit(data);#data    是数据集,要求    data    的样本数大于    k  

labels=list(k_means.labels_);#    获取每个样本的分类号  


以上是关于python   学习笔记 (核心)的主要内容,如果未能解决你的问题,请参考以下文章

[学] 《Python 核心编程》学习笔记

[学]《Python 核心编程》学习笔记

python   学习笔记 (核心)

[ 英语 ] 重学语法 之 英语学习的核心框架 —— 英语兔学习笔记

《python核心编程》——正则表达式学习笔记

《深度学习之图像识别:核心技术与案例实战》读书笔记