python完全学习笔记
dir(__builtins__)
help(input)
'let\'s go' #转义字符 \
r'c:\now' #字符串前加r 自动转义
str= '''
shdiufhi
sdfjskldfjk
dfdfsdf
''' #多行打印
isinstance(i , str) #判断是否符合str类型
// #地板除法
2 ** 4 #16 幂运算
-3 ** 2 #-9 优先级问题 比左侧优先级高右侧低
small = x if x<y else y #三元操作符
assert 3>4 #断言 错的抛出异常assertionexception
print(i, end = ' ') #
list.append()
list.extend()#参数中传入的数组进行组合
list.insert(1,value)#根据位置插入到列表中
list.remove()#移除目标
del list[1]#从内存中删除列表元素
list.pop()#随机pop或指定索引
list[:]#获得列表的拷贝
list可相加
in#可用来判断列表中是否包含
'{0} love {1}'.format('i', 'u')
'{a} love {b}'.format(a= 'i', b='u')
'{0:.1f}{1}'.format(12.32323, 'mfc')
序列list turple 字符串
list('mengfanchen')
turple('mengfanchen')
sorted() #排序方法
enumerate() #转为元组
a=[1,2,3,4,5,6,7]
b=[3,5,7,4,8]
list(zip(a,b))=[(1,3),(2,5),(3,7),(4,4),(5,8)]# 嗯应该有用
函数:
明明规则首字母大写MengFanChen()
函数文档:
def MengFanChen('name', 'age'):
'这是一个例子'
print('this is mengfanchen!')
MengFanChen.__doc__就会返回上面的'这是一个例子'
关键字参数
MengFanChen(name = 'mengfanchen', age='17')
默认参数
收集参数
def test(*params):
print('hahaha',len(params)
def test(**kwargs):
for key in kwargs:
print "another keyword arg: %s: %s" % (key, kwargs[key])
内嵌函数和闭包:
count = 5
def MyFun():
global count
count=10
print(count) #全局变量被修改global关键字
def FunX(x):
def FunY(y):
return x*y
return FunY
FunX(5)(8) ->40 #FunY即为一个闭包
i = FunX(5)
type(i) -> function #即为FunY
def Fun1():
x = 5
def Fun2():
nonlocal x
x *= x
return x
return Fun2() #nonlocal关键字可使Fun2()使用外部变量x 或者使用x[]因为不会被当作局部变量
lambda(匿名函数):
g= lamda x : 2*x+1
print(g(5)) #lamda省下定义函数的过程
filter:过滤
list(filter(None , [1,0,Falsr,True]))
->[1,True] #默认过滤出True类型
temp =range(10)
def odd(x):
return x%2
print(list(filter(odd, temp)))
->[1,3,5,7,9] #仔细想想是怎么求奇数的
用lambda实现上述例子
list(filter(lambda x : x%2, range(10))) #很强
map:映射
list(map(lambda x : x*2, range(10)))
[0,2,4,6,8,10,12,14,16,18] #map也有点有用
递归:
import sys
sys.setrecursionlimit(100000) #设置递归深度
字典与集合:
dict1 = dict.fromkeys([1,2,3,4,5], 'mengfanchen')
{1: 'mengfanchen', 2: 'mengfanchen', 3: 'mengfanchen', 4: 'mengfanchen', 5: 'mengfanchen'}
6 in dict1 ->False
set:唯一&无序
num = [1,2,3,4,5,5,6]
num = list(set(num)) -> [1,2,3,4,5,6]
frozenset:不可变集合
标准读入文件方式:
for each_line in f:
Print(each_line) #官方文档推荐形式
模块是一个包含所有函数和变量的文件.py文件可引入可使用。
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模块(对象,二进制互相转换)
Temp = [1,2,3,4,5]
Pickle_file = open(‘temp.pkl’, ‘wb’)
Pickle.dump(temp, pickle_file)
Pickle.close
Pickle_file = open(‘temp.pkl’, ‘rb’) #read binary
Temp = pickle.load(pickle_file)
异常处理:
几个语句,try catch finally raise
else(try后面可以加else不出错则执行else语句)
with(可以详细看一下,感觉很高端)
AssertionError |
断言语句(assert)失败 |
AttributeError |
尝试访问未知的对象属性 |
EOFError |
用户输入文件末尾标志EOF(Ctrl+d) |
FloatingPointError |
浮点计算错误 |
GeneratorExit |
generator.close()方法被调用的时候 |
ImportError |
导入模块失败的时候 |
IndexError |
索引超出序列的范围 |
KeyError |
字典中查找一个不存在的关键字 |
KeyboardInterrupt |
用户输入中断键(Ctrl+c) |
MemoryError |
内存溢出(可通过删除对象释放内存) |
NameError |
尝试访问一个不存在的变量 |
NotImplementedError |
尚未实现的方法 |
OSError |
操作系统产生的异常(例如打开一个不存在的文件) |
OverflowError |
数值运算超出最大限制 |
ReferenceError |
弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象 |
RuntimeError |
一般的运行时错误 |
StopIteration |
迭代器没有更多的值 |
SyntaxError |
Python的语法错误 |
IndentationError |
缩进错误 |
TabError |
Tab和空格混合使用 |
SystemError |
Python编译器系统错误 |
SystemExit |
Python编译器进程被关闭 |
TypeError |
不同类型间的无效操作 |
UnboundLocalError |
访问一个未初始化的本地变量(NameError的子类) |
UnicodeError |
Unicode相关的错误(ValueError的子类) |
UnicodeEncodeError |
Unicode编码时的错误(UnicodeError的子类) |
UnicodeDecodeError |
Unicode解码时的错误(UnicodeError的子类) |
UnicodeTranslateError |
Unicode转换时的错误(UnicodeError的子类) |
ValueError |
传入无效的参数 |
ZeroDivisionError |
除数为零 |
内置异常类层次结构
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- ArithmeticError
| +--
FloatingPointError
| +--
OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
+-- LookupError
| +--
IndexError
| +--
KeyError
+-- MemoryError
+-- NameError
| +--
UnboundLocalError
+-- OSError
| +--
BlockingIOError
| +--
ChildProcessError
| +--
ConnectionError
| |
+-- BrokenPipeError
| |
+-- ConnectionAbortedError
| |
+-- ConnectionRefusedError
| |
+-- ConnectionResetError
| +--
FileExistsError
| +--
FileNotFoundError
| +--
InterruptedError
| +--
IsADirectoryError
| +--
NotADirectoryError
| +--
PermissionError
| +--
ProcessLookupError
| +--
TimeoutError
+-- ReferenceError
+-- RuntimeError
| +--
NotImplementedError
+-- SyntaxError
| +--
IndentationError
|
+-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +--
UnicodeError
|
+-- UnicodeDecodeError
|
+-- UnicodeEncodeError
|
+-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
Easygui
继承:
Class mylist(list):
实现了继承
多态
Python的魔法方法:
__init__(self) 构造方法
函数或变量名前加上两个’_’就会变成私有,伪私有。
class person():
__name = ‘mengfanchen’
p.__name不能调用,但是p._person__name就可以调用。
Python中也可以进行方法重写。
注意__init__方法也会被重写,按上面的方法写可以继承父类的属性。
Python可以进行多重继承。
尽量避免使用
__dict__方法可以显示对象的所有属性以及方法。
BIF:
Hasattr(),Getattr(),setattr(),delattr()
Property()方法,能够将对一个属性的操作集合到一个属性上。
如上图,del(c1.x)就可以调用delSize()将size属性删除。
构造和析构
魔法方法:
__init__
这里面的__new__一般不需要重写但是当类继承自不可变类型时(及不能进行__init__)可进行重写,必须要有返回值。
__del__方法,当对象被销毁时调用。
工厂函数:
如果想要类对象可以用print输出,需要重写__str__方法
如果想要直接得到类对象的值需要重写__repr__方法
通过属性调用属性,这个很有用啊。
这个是访问属性的时候他要先调用__getattribute__然后再是相关操作,__getattr__是当调用的属性不存储在的时候默认调用的方法。
Property的原理:描述符。如上
定制容器,如果容器不可变需要定义__len__()和__getitem__()方法。
如果可变则需要定义__setitem__()和__getitem()__方法。
上面的自定义容器是不可变的。
迭代器
__iter__(), __next__()两个魔法方法
生成器
Yield生成一个迭代器
关于yield的高级作用:http://bbs.fishc.com/thread-56023-1-3.html
模块:
Already know.