Python总结

对Python3总结,浓缩就是精华

Posted by BenderFly on March 30, 2019

查看帮助

help(dir)  #查看手册
dir(__builtins__) #查看内置函数
 
str = r'C:\Program Files\FishC\Good''\\'   #R或r原始数据,末尾不能加\,如非要加,则使用转义\\
file1 = open(r'C:\windows\temp\readme.txt', 'r')

random

Random.randint(1,10) #产生1-10直接的随机数

int(10.1+0.5) #默认int是向下取整,如果采用四舍五入+0.5即可

优先级

幂运算特殊 幂运算(* )>正负号(-x +x)>算术操作符( / // + -)>比较操作符(< <= > >= != ==)>逻辑运算符(not and or)

-3**2=-9
3**-2=0.1111
Not > and > or

Num=x if x>y else y #三元操作符

Assert

Assert 3>4 #条件为假,程序奔溃,抛出AssertionError

列表

List[:]  #拷贝列表,等同于list2 = list1.copy()
List.append(a)    #只有一个
List.extend([a,b])  #可以一次添加多个
List.insert(1,”hello”)  #第二个元素变成hello
list.reverse()  #反转
list.remove(“hello”)  #删除1元素
list.pop()   #默认删除最后一个元素,并返回它
del list  #删除整个元素
list.clear() #清空元素,但不删除list
list.reverse() #将列表倒置过来,注意不是倒叙
list.sort()  #正序排列
list.sort(reverse=True)  #倒叙排列
list.count(value) #value出现的次数
list.index(value)  #第一次出现value的下标

列表推导式或列表解析

```[有关A的表达式 for A in B] [ i*i for i in range(10) ] list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]



# 元组

Tulp1=() #空元组 Tulp1=(1,) #只有一个元素的时候,要加逗号



# 字符

Startswith() #以什么开始 Endswith() ‘.’.join([‘ab’, ‘pq’, ‘rs’]) -> ‘ab.pq.rs’ Str.lstrip() #去除左空格rstrip(),strip() Str.partition(sub) #把子字符串用sub分成3个元组, ‘hello’.partition(‘e’) #返回(‘h’, ‘e’, ‘llo’)
Str.replace(old, new, count=-1, /) #替换 “www.benderfly.con”.split(‘.’) #返回[‘www’, ‘benderfly’, ‘cn’] str.zfill(width) #前面填充0 (field1,field2)=str.split(‘:’,1) #按照:分割

# 字符串

s.isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False。 s.isalpha() 所有字符都是字母,为真返回 Ture,否则返回 False。 s.isdigit() 所有字符都是数字,为真返回 Ture,否则返回 False。 s.islower() 所有字符都是小写,为真返回 Ture,否则返回 False。 s.isupper() 所有字符都是大写,为真返回 Ture,否则返回 False。 s.istitle() 所有单词都是首字母大写,为真返回 Ture,否则返回 False。 s.isspace() 所有字符都是空白字符,为真返回 Ture,否则返回 False。


# 格式化

“{0}.{1}.{2}”.format(‘www’,’benderfly’,’com’) #返回www.benderfly “{a}.{b}.{c}”.format(a=’www’,b=’benderfly’,c=’com’) “{a}.{b}.{c}.{0}”.format(‘http://’,a=’www’,b=’benderfly’,c=’com’) #位置和关键词混合,位置必须放前面 “0”.format(‘hello’) #返回’{0}’ “{0:10.1f}”.format(-23.1324) #定点数,四舍五入保留1位小数

%格式化

“%c %c %c”%(97,98,99) #返回’a b c’ %s #字符串 %d #整数 %0.1f #定点数”%0.1f”%(9.6745) 返回’9.7’ %-10.1f #减号左对齐 %010.1f #0用0取代空格填充


# 内置函数

Max() #返回最大值 Min() Len() Sum() Sorted() Reversed() #返回迭代器对象 Enumerate() #返回迭代器,用list转化list(enumerate([‘a’,’b’])) 返回 [(0, ‘a’), (1, ‘b’)] Zip a=[1,2,3,4,5,6] b=[‘a’,’b’] list(zip(a,b)) 返回[(1, ‘a’), (2, ‘b’)]



# 函数
### 函数默认返回None

def multi(): return [1,’hello’,[‘a’,’b’,123]] #返回一个列表 def’ tulp() return 1,’hello’,3 #返回(1,‘hello’,3)元组 Def func1(name,age=1) #默认参数必须放在后面 Print(name,age)

### 收集参数

Def func2(*params,[sep=’’..]): #sep设置成默认参数 Print(len(params)) Print(params[N]) #打印第N个参数

### 局部变量

Price=100 def local(): #print(price) #如果不注释会报错,因为下面定义了price与全局变量同名,函数内的price就变成局部变量了,修改其不影响全局变量 price=20 print(price)

price=100 def local(): global price #global定义全局变量,这样price就变成全局变量 print(price) price=20 print(price)

### 函数嵌套

def func1(): print(“func1”) def func2(): print(“func2”) func2() #func2的作用域仅限在func1函数内部

 
 
### 函数闭包

def funX(x): def funY(y): #内部函数对外部函数的的全局变量进行调用,即构成闭包 return x * y return funY

def a(): x=3 def b(): nonlocal x x=x+1 #如果不定义nonloal x会报错提示位定义x,因为此时x已经是局部变量 print(x) return b()

 
# lambda

def func(x, y): return x + y 等价于: func=lambda x, y : x + y func(2,3) #返回5

## filter

list(filter(lambda x : x % 2,range(10))) #返回基数

 
## map

list(map(lambda x:x**2,range(10))) #求幂

 
# 字典

Web={‘百度’: ‘www.baidu.com’, ‘google’: ‘www.google.com’}

### 遍历字典

for eachkeys in web.keys(): #输出keys for eachvalues in web.values(): #输出值 for eachkvs in web.items() #已元组形式输出(key,value) for k,v in web.items(): #分别输出key和value for each in dic: print(each,”->”,dic[each])

### 获取

web.get(“百度”,”不存在”) #如果简直不存在,则返回“不存在” key in web #判断key是否存在

### 清空字典

Web.clear() Web.copy() #浅拷贝 Web.pop(key) #删除key对应的item Web.popitem() #随机删除item web.setdefault(key,default) #如果key不存在则创建key:default,存在则返回对应值 web.update(dic) #根据dic更新web,如果不存在则添加到web

 
# set集合

set={1,2,3} #集合里面的元素是唯一的 s1.remove(3) #删除元素3 s1.add(‘hello’) #添加元素hello frozenset([1,2,3,3,32,2]) #设置只读集合



# 文件

f=open(r’C:\Users\only\Desktop\pythons\file.txt’,’r’) #只读方式打开 r #只读 w #写,(此模式一旦打开文件,即清空文件) x #文件不存在则写的方式打开,如果文件已存在,则引发异常 a #追加模式 b #二进制模式

  • #可读写模式 f.close() #关闭 f.read(size=-1) #读取size个字符,默认读取所有字符,指针指向末尾 f.readline() #读取一行,指针指向下一行 for eachline in f: #读取所有行 print(eachline) f.write(str) #写,返回字符数 f.writelines(seq) #seq 是一个返回字符串的可迭代对象 f.seek(offset,from) #从from(0起始位置,1当前位置,2文件末尾)偏移offset个字节 f.tell() #返回当前位置

with open(file_name) as f #会自动调用f.close() with open(‘boy_1.txt’) as a,open(‘boy_2.txt’) as b: #多个可以写到一起


# 模块os模块

getcwd() #返回当前工作目录 chdir(path) #改变工作目录 listdir(path=’.’) #列举指定目录中的文件名(’.’表示当前目录,’..’表示上一级目录) mkdir(path) #创建单层目录,如该目录已存在抛出异常 makedirs(path) #递归创建多层目录,如该目录已存在抛出异常,注意:’E:\a\b’和’E:\a\c’并不会冲突 remove(path) #删除文件 rmdir(path) #删除单层目录,如该目录非空则抛出异常 removedirs(path) #递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常 rename(old, new) #将文件old重命名为new system(command) #运行系统的shell命令 walk(top) #遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])

以下是支持路径操作中常用到的一些定义,支持所有平台 os.curdir #指代当前目录(’.’) os.pardir #指代上一级 目录(’..’) os.sep #输出操作系统特定的路径分隔符(Win下为’\‘,Linux下为’/’) os.linesep #当前平台使用的行终止符(Win下为’\r\n’,Linux下为’\n’) os.name #指代当前使用的操作系统(包括:’posix’, ‘nt’, ‘mac’, ‘os2’, ‘ce’, ‘java’)

os.path模块中关于路径常用的函数使用方法 basename(path) #去掉目录路径,单独返回文件名 dirname(path) #去掉文件名,单独返回目录路径 join(path1[, path2[, …]]) #将path1, path2各部分组合成一个路径名 split(path) #分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在 splitext(path) #分离文件名与扩展名,返回(f_name, f_extension)元组 getsize(file) #返回指定文件的尺寸,单位是字节 getatime(file) #返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) getctime(file) #返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) getmtime(file) #返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)

以下为函数返回 True 或 False exists(path) #判断指定路径(目录或文件)是否存在 isabs(path) #判断指定路径是否为绝对路径 isdir(path) #判断指定路径是否存在且是一个目录 isfile(path) #判断指定路径是否存在且是一个文件 islink(path) #判断指定路径是否存在且是一个符号链接 ismount(path) #判断指定路径是否存在且是一个挂载点 samefile(path1, paht2) #判断path1和path2两个路径是否指向同一个文件


# pickle模块

my_list = [1,2,[‘hello’,’me’],’a’,(1,2)] #字典,列表等都可以

my_list [1, 2, [‘hello’, ‘me’], ‘a’, (1, 2)]

pickle_file = open(r”C:\Users\only\Desktop\pythons\my_list.pkl”,’wb’) #二进制打开,后缀名无所谓 pickle.dump(my_list,pickle_file) #导入 pickle_file.close()

pickle_file = open(r”C:\Users\only\Desktop\pythons\my_list.pkl”,’rb’) #二进制打开 ml = pickle.load(pickle_file) #导出 ml [1, 2, [‘hello’, ‘me’], ‘a’, (1, 2)] ```

异常处理

try:
    sum = 1 + '1'   #检测到异常,后边的程序将不再运行
    int("abc")
   
    a = 1  
    f = open('record.txt')
except FileNotFoundError as reson:    #可以使用多个except
    print('文件名不存在!T_T')
except (TypeError,KeyError) as reson:  #可以对多个异常(元组的形式)进行统一捕获
    print('类型错误T_T')
except:                                           #不推荐使用,如ctrl+c 也会捕获,不会终止程序
    print("捕获所有异常")
else:                                                  #没有异常则执行
    print('文件成功打开')
finally:                            #不管有没有异常都执行
    print("hello me")

可以手动raise异常

raise TypeError()                                #会引出异常
raise TypeError(“类型错误”)

While/for 中使用else #如果中途没有break,则循环结束之后会执行

count = 10
while count:
    print(count)
    count -=1
    if count == 3:
        break                     #beak终止循环,else不执行
    else:
        print("以下数字大于三:")
   
else:
    print("else content")
   
   
 
 
for i in "hello python me and you ":
    print(i)
    if i == "p":
        print('p')
        break
    else:
        print("aa")
else:
    print("最后内容")
 
 
input() 函数有可能产生两类异常EOFError(按下ctrl+d)和KeyboardInterrupt(ctrl+c)

面向对象

私有变量和私有函数(前面加_ _)

class Person():
    name="han"
    age=3.14195324
    __secret = "井田"        #定义私有变量
 
    def sayHello(self,score):
        self.score = score
        print("Say hello to every body!%d"% self.score)
 
    def getName(self):
        return self.__secret   #p1._Person__secret  私有变量依旧在外部访问

属性和函数同名时

class A():
    y=0            #会被函数替换
    def __init__(self):
        self.x = 0    
 
 
    def x(self):   #会被属性x替换,而无法调用
        print("mathed x called")
 
    def y(self):  
        print('method Y is called')

继承super

class A():
    def __init__(self):
        self.x = 1
        self.y = 2
 
 
    def hello(self):
        print(self.x)
 
class B(A):
    pass
 
class C(A):
    def __init__(self):
        #A.__init__(self)   #基础父类方法1 父类.__init__(self)
        super().__init__()   #方法二,推荐
        self.z = 3
 

组合

class Fish:
    def __init__(self,x):
        self.num = x
 
class Turtle:
    def __init__(self,y):
        self.num = y
 
class Pool:
    def __init__(self,x,y):
        self.fish = Fish(x)
        self.turtle = Turtle(y)
 
    def getNum(self):
        print("水池里面共有{0}只鱼和{1}只乌龟O_O".format(self.fish.num,self.turtle.num))

有关类的内置函数

isinstance(object,classinfo)
### 参数:
object : 实例对象。
classinfo : 可以是直接或者间接类名、基本类型或者由它们组成的元组。
返回值:如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
实例
以下是使用isinstance()函数的实例:
 
a = 2
isinstance(a,int)      # 结果返回 True
 
isinstance(a,str)      # 结果返回 False
 
isinstance(a,(str,int,list))      # 是元组中的一个,结果返回 True
 
 isinstance()与type()的区别
例如在继承上的区别:
	* 
isinstance() 会认为子类是一种父类类型,考虑继承关系。
	* 
type() 不会认为子类是一种父类类型,不考虑继承关系。



class A:
    pass
 
class B(A):
    pass
 
isinstance(A(), A)    # returns True
type(A()) == A        # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False
 
issubclass(B,A)    #returns True  
issubclass(B,B)    #True  类自身是自身的子类
issubclass(B,(A,C,D))  #只要B属于元组中的一个就返回True

hasattr(object,name)/getattr(object,name,[default])/setattr(object,name,value)/delattr(objece,name)

class C:
    x=1
    def __init__(self,y=2):
        self.z = y
 
c=C()
print(hasattr(c,'x'))  # True
print(hasattr(c,'y'))  # False
print(hasattr(c,'z'))  # True
print(getattr(c,'y',"没有y"))  #没有y
print(getattr(c,'z',"有z"))    #2
 
print(getattr(c,'w',"没有w"))  #没有w
setattr(c,'w',"新建w属性")     #不存在则新建,否则更新
print(getattr(c,'w',"没有w"))  #新建w属性
 
 
delattr(c,'x')  #删除成功
delattr(c,'x')  #AttributeError

property

class Prop:
    def __init__(self,size=0):
        self.size = size
 
    def getSize(self):
        return self.size
 
    def setSize(self,value):
        self.size = value
 
    def delSize(self):
        del self.size
 
    #x = property(fget=getSize,fset=setSize,fdel=delSize)
    x = property(getSize,setSize,delSize)
   
p = Prop()
print(p.x)   #0
p.x=10
print(p.x)  #10
del p.x
print(p.x)   #AttributeError

魔法方法

new

class CaptStr(str):
    def __new__(cls,string):
        string = string.upper()
        return str.__new__(cls,string)  
 
__init__/__del__/__str__/__repr__
class A():
    def __init__(self):
        print("调用__init__")
 
    def __del__(self):
        print("调用__del__")
 
def __str__(self):             #print(a) 时被调用
        return "重新定义__str__"
    def __repr__(self):
        return "重新定义__repr__"  #执行a时被调用
    #也可以直接赋值__repr__ = __str__
 
>>> a=A()
调用__init__
>>> a1=a
>>> a2=a
>>> del a1
>>> del a
>>> del a2
调用__del__    #只有在所有的引用都删除的情况下才会调用__del__

add/sub/rsub/radd

class Nint(int):
    def __add__(self,other):
        return int.__sub__(self,other)
 
    def __sub__(self,other):
        return int.__add__(self,other)
 
    def __radd__(self,other):
        return int.__sub__(self,other)
 
    def __rsub__(self,other):
        return int.__add__(self,other)
 
a=Nint('5')
b=Nint('3')
 
print(a+b)   #2
print(1+a)   #4
print(2-b)   #5
print(1+b)   #2
  1. getattr(self,name) 定义当用户试图获取一个不存在的属性时的行为
  2. getattribute(self,name) 定义当该类的属性被访问时的行为
  3. setattr(self,name,value) 定义当一个属性被设置时的行为
  4. delattr(self,name) 定义当一个属性被删除时的行为 ``` class A: def getattribute(self,name): #比getattr先调用 print(“getattribute”) return super().getattribute(name) def getattr(self,name): print(“getattr”) def setattr(self,name,value): print(“setattr”) super().setattr(name,value) def delattr(self,name): print(“delattr”) super().delattr(name)

class A: def init(self): self.width=0 self.height=0 def setattr(self,name,value): if name == ‘x’: self.width=value self.height=value else: super().setattr(name,value)

# 迭代器iter()/next()

s=”hello”

it=iter(s) »> next(it) ‘h’ next(it) ‘e’ next(it) #如果没有值了,就抛出StopIteration的异常 L

# wraps

from functools import wraps def wrapper(func): #@wraps(func) def inner(*args, **kwargs): print(“在前面执行的函数名:%s” % func.name) #始终是f.name func() print(“在后面执行的函数注释:%s” % func.doc) #始终是f.doc return inner

@wrapper def f(): “”” 这是一个用来测试装饰器修复技术的函数 “”” print(“f函数被调用”)

if name == ‘main’: print(“执行的函数名:”, f.name) #有wraps修饰,则显示f.name__否则inner.__name print(“函数的注释:”, f.doc) #有wraps修饰,则显示f.doc__否则inner.__doc

f()







# 带参数装饰器

#在调用sayHi之前,写入日志 from functools import wraps def loging(logFile=”hi.log”): def action(func): @wraps(func) def wrapper(*args,kwargs): #打印函数名 string= “调用了{}函数”.format(func.__doc__) with open(logFile,’w’) as f: f.write(string) return func(*args,kwargs) return wrapper return action

@loging(“sayHi.log”) def sayHi(): “"”sayhi文档””” print(“hi”)


# 类装饰器

class Dec: def init(self,log): self.log = log

def __call__(self,func):
    def _call(*args,**kwargs):
        print("调用装饰器")
        with open(self.log,'a') as logFile:
            logFile.write("调用了:%s"% func.__name__)
        return func(*args,**kwargs)
    return _call

#调用sayHi之前写入日志

class Test: @Dec(“call_log.txt”) def sayHi(self,name): print(“Hi”)

Test().sayHi(“周杰伦”) ```