python出错注意点

一、类相关内容

创建类:

#!/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)写入序列字符串列表,若需要换行需要自行添加换行符

File方法

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]方式来获取元素。

Python iter()函数用法实例分析

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)

Python 列表(List)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值