一、类相关内容
创建类:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Employee:
'所有员工的基类'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
不继承时,没有类名称后的括号;
empCount是所有的类共享的变量,并且其索引通过类名.empCount;
self并不是关键字,将所有的self换成其他的变量也可以,其代表的是实例;
上述变量都是可以外部访问的,如果需要定义私有变量,形式为__empCount即可,私有方法也是如此,此为双下划线;如果为单下划线如_empCount,那么其类型就是protected的。
属性:
Employee.__dict__:将类的所有属性组成一个字典,包含变量、函数、或者其他的属性(__name__等)
Employee.__name__:类的名字
Employee.__doc__:输出的类的注释:所有员工的基类
Employee.__base__:输出的是所有的父类组成的元组
继承:
子类从父类继承方法,变量;
子类重写父类方法,但是还想接着父类的写,使用super()指代父类;
判断是否是子类:issubclass(sub, sup)
判断是否时此类或者此类的子类的实例:isinstance(obj, Class)
另外支持 基础的重载方法、运算符重载。
二、内置函数
1、open
常用格式:
open(file, mode='r')
mode='r'、'w'、'b'
'r':只读模式
'b':二进制模式
'w':只写模式,文件存在,打开写入,覆盖原文;不存在则创建
'a':文件内容追加
注意:
如果不使用with,就需要使用f.close()将文件关闭。
with open(file, mode) as f:
file.read()读取所有
file.readlines()读取所有行,并返回列表,因此可以使用for循环来逐行访问
file.writelines(list)写入序列字符串列表,若需要换行需要自行添加换行符
2、enumerate(sequence,start)
此函数接收可遍历的数据对象(列表、元组、字符串),组成一个索引序列,同时列出数据下标以及数据。返回的是枚举对象。start可指定初始索引值。
注意:
其接收列表、元组、字符串,而返回的是枚举对象:
>>list0 = ['z', 'd', 'g', 'h']
>>enu = enumerate(list0)
>>print(type(enu), enu)
<class 'enumerate'> <enumerate object at 0x7ff6cdd5a800>
需要将枚举对象列出,可以使用list()将其每一项转变为元组:
>>print(list(enu))
[(0, 'z'), (1, 'd'), (2, 'g'), (3, 'h')]
同样也可以使用for循环:
>>for i, data in enumerate(dataset):
需要看进度条,或者循环一周期的进度,使用tqdm包,具体使用方法:
>>for i, data in enumerate(tqdm(dataset)):
100%|██████████| 4/4 [00:00<00:00, 153919.41it/s]
3、super()
super() 函数是用于调用父类(超类)的一个方法。
使用格式如下:
super(Son, self).属性方法 传递的是子类名以及实例self
或者super().属性方法
class Father:
def __init__(self):
self.a = 0
def add(self, x, y):
return x+y
class Son(Father):
def __init__(self):
super(Son, self).__init__()
def add(self, x, y, z):
d = super(Son, self).add(x, y)
return super(Son, self).add(d ,z)
4、iter()
迭代器:提供一种方法顺序访问一个聚合对象的元素,而又不暴露该对象的内部表示。其将遍历与实现解耦,实现的时候只需要关注此迭代器,傻瓜式的next(),而对于迭代器中的元素时如何遍历的并不关心。
迭代器只能向后移动,不能回到开始,再次迭代只能创建一个新的迭代对象。
iter()有两种用法,先学第一种:传入一个容器,不过这个容器需要定义__iter_ _()函数
lis = ['z', 'd', 'g', 'h']
enu = enumerate(lis)
dic = {'z':1, 'h':2}
tup = (1,2,3)
se = {1,2,3}
ss = '123'
-------------------------
lis.__iter__() 列表
enu.__iter__() 枚举
dic.__iter__() 字典
tup.__iter__() 元组
se.__iter__() 集合
ss.__iter__() 字符串
--------------------------
上面这些可以传入iter(),转化为Iterator对象,使用next()来逐渐获取元素,直到最后一个元素,返回一个异常。
lis_iter = iter(list)
next(list_iter)
--------------------------
同时这些Iterator可以使用for循环自动调用迭代器:
for x in lis_iter:
--------------------------
判断是否是可迭代对象:
from collections.abc import Iterable
li = [1,2,3,4]
print(isinstance(li,Iterable)) # li为可迭代对象,这里返回True
***************************
附加:
lis.__getitem__()
dic.__getitem__()
tup.__getitem__()
ss.__getitem__()
__getitem__()
类C中定义此函数,其实例为s=C(),可以通过索引c[0]方式来获取元素。
5、type()
type() 函数如果你只有第一个参数则返回对象的类型
6、list()
可以将迭代器、枚举对象、元组、zip对象等转为列表展示。
it = iter(lis)
print(it)
print(list(it))
#output:
<list_iterator object at 0x7f6535738dc0>
['z', 'd', 'g', 'h']
7、zip()
接收两个可迭代对象,将其对应元素组成元组,压缩为zip对象(其也为迭代对象)。
可以使用list()查看,同样也可以使用for循环来获得元组。
a = [1,2,3,4,5]
b = [4,5,6,7,8]
print(zip(a,b))
for x, y in zip(a,b):
print(x," ",y)
#output:
<zip object at 0x7f47766e59c0>
1 4
2 5
3 6
4 7
5 8
解压缩:
ab_z = zip(a,b)
print(*ab_z)
#output:
(1, 4) (2, 5) (3, 6) (4, 7) (5, 8)
8、sorted()
sorted() 函数对所有可迭代的对象进行排序操作:
sorted(iterable, cmp=None, key=None, reverse=False)
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
9、dir()函数
返回一个在模块里定义的所有模块、变量和函数的列表。
三、OS文件目录方法
- os.getcwd() 返回当前的工作目录
print(os.getcwd())
#output
/home/yjys/PycharmProjects/TEST/validation/test
- os.listdir(path) 返回path指定文件夹包含的文件列表
path = "/home/yjys/PycharmProjects/TEST/validation/test"
print(os.listdir(path))
#output
['numpy_test.py', 'torch_test.py', '__pycache__', 'skimage_test.py', 'enumerate_test.py', 'tqdm_test.py', 'crossentropy.py']
- os.mkdir() 创建文件夹
- os.remove(path) 删除此文件,非文件夹
- os.rmdir(path) 删除文件夹
- os.rename(old, new) 重命名文件或者目录
- os.path.exist(path) 路径存在,返回True
- os.path.isfile(path) 判断是否为文件
- os.path.isdir(path) 判断是否为目录
- os.path.join(path1, path2) 目录与文件名合成一个路径
四、所犯错误
1、导入自定义的模块,且在同一个文件夹下的:
from validation.attention_verify import load_data #绝对引用导入
#文件目录为如下,其中TEST为项目包
/home/yjys/PycharmProjects/TEST/validation/attention_verify
五、容器
1、字典
删除字典元素:del dict_t['name']
获取指定键的值:dict_t.get(key)
以列表返回可遍历的(键值)元组:dict_t.items()
以列表返回一个字典所有的键:dict_t.keys()
以列表返回一个字典所有的值:dict_values()
2、列表
删除列表元素:del list_t[0]
对原列表进行排序:list_t.sort(reverse=False)