设为首页 收藏本站
查看: 1000|回复: 0

[经验分享] python 学习笔记 (核心)

[复制链接]

尚未签到

发表于 2018-8-14 09:45:16 | 显示全部楼层 |阅读模式
  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_);#    获取每个样本的分类号

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551479-1-1.html 上篇帖子: Python内建函数 下篇帖子: python学习之异常处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表