Python进阶和巩固

Python进阶学习和巩固

运算符和表达式

  1. 整除 //
  2. 乘方 **
  3. 按位与 &、按位或 |、按位取反 ~、按位异或 ^
  4. 布尔与 and、布尔或 or、布尔非not

控制流

  1. while语句可以配合一个else语句,如果while语句中有break语句,会跳出循环,不会执行else语句,例如:
	while flag:
 		flag = False
	else:
 		print "ok"
  1. for语句也可以配合else语句,python的for和c中的for有点区别,主要作用为从任意序列中遍历元素,如:
for i in range(1,5):
	print(i)
else
	print(i)

函数

  1. global语句用于声明变量为全局变量,如果在函数体内打算将一个全局变量改变,需要生命函数内变量为global,如:
x = 10
def setVar():
	global x
	x = 20
print(x)
  1. 默认参数的用法回顾:*para表示元组,**paras表示字典,例如:
def print_hi(x, y=10, *para, **paras):
    print(x,y)
    for par in para:
        print(par)
    for key,value in paras.items():
        print(key,":",value)
  1. dir()函数可以返回对象的一些列标识符,如变量、函数等
  2. 程序包,装满模块的文件夹,第一目录下有一个__init__.py文件, 程序包内部又可以包含子程序包,当然其也包括__init__.py;

数据结构

  1. 常用数据结构有: list列表、tuple元组、dictionary字典、set集合
  2. 元组为(data),如果元组data只有一个元素,需要在第一个元素后添加,用以区分表达式;
  3. 字典使用键值对的方式存储数据,key需要使用不可变对象(如string),value没要求,其中key必须是唯一的,且字典内部不排序,例:dic = {“a”:1, “b”:2}
  4. 列表、元组、字典都是序列的一种,序列的切片操作可以在第三个参数指定步长,正常切片就是1,反向切片为-1,例如: lis[1:4:1]
  5. set集合是简单对象的无序集合,不在乎顺序,只在乎元素是否存在,如set = set(list),如果list中有重复的元素,set会只保留一个元素; 即元素具有互异性;
  6. 字符串也是一个对象,字符串是不能修改的,但是可以通过切片或者指向新的变量进行修改;
  7. format不仅可以用在字符串上,在其他情况下也可以使用,例如:str=“hello {0} {1}”.format(“hi”,“boby”)

面向对象

  1. 类的方法可以定义一个__init__函数,初始化对象时自动调用__init__函数,例如:
def Test:
	def __init__(self, name):
		self.name = name
	def getName(self):
		print(self.name)
Test('name').getName()
  1. 类中定义的成员变量(类变量),通过class名.变量或者self._class_.变量名来访问, 对象变量与类变量重名时,会将类变量屏蔽掉;
  2. 类中函数添加装饰器,@classmethod, 此函数只能访问类变量(cls.变量),无法通过self访问对象变量,并且这个函数在外部可以直接通过class.函数进行调用,不需要通过对象调用
  3. 类中的成员都是公开的,若要设置成私有变量,以_或者__开头定义变量;
  4. 继承,子类继承父类的函数和成员,如下例:
class Person:
    def __init__(self, age, height):
        self.age = age
        self.height = height

    def getdata(self):
        print(self.age, self.height, end=' ')

class Student(Person):
    def __init__(self, age, height, score):
        Person.__init__(self, age, height)
        self.score = score

    def getdata(self):
        Person.getdata(self)
        print(self.height)

class Teacher(Person):
    def __init__(self, age, height, salary):
        Person.__init__(self, age, height)
        self.salary = salary

    def getdata(self):
        Person.getdata(self)
        print(self.salary)
        
stu = Student(18, 180, 100)
stu.getdata()

输入输出

  1. 输入通过input(…), 输出通过print()
  2. 文件读写操作,open打开文件并获取文件描述符f,write或writeline(s)写入, read或readline(s)(每次读取一行,当读到末尾时返回的数据长度为0)读取, 通过open时指定权限,包括r读取, w写入(清空文件再写入), a追加,t表示为文本文件,b表示为二进制文件,x也为写入(创建新文件,若文件已经存在写入会失败),操作完文件后需要close文件
  3. pickle为操作文件的模块,可以将任何简单的对象存储到文件中或取回,这个过程称为持久化存储对象,pickle操作文件的前提是以二进制形式打开文件,读文件为pick操作,写文件为dump操作
	f = open('./data1', 'wb')
    list1 =  [1, 2, '3', 'hello']
    pickle.dump(list1, f)
    f.close()
    f = open('./data1', 'rb')
    list2 = pickle.load(f)
    print(list2)
    f.close()
  1. 异常处理, try…except…捕捉异常,except可以指定特殊的异常错误或者错误list,如果正常执行,会进入else语句
try:
    input('input something')
except EOFError:
    print('eof error')
except KeyboardInterrupt:
    print('keyboard error')
else:
    print("else")
  1. raise引发异常,raise抛出的异常应该是Exception类或其子类,在except中可以匹配抛出的异常并把异常的自定义数据打印出来,例如下面的代码,当输入字串长度小于3时会抛出异常并打印相关的信息:
class PersonException(Exception):
    def __init__(self, length, standard):
        self.length = length
        self.standard = standard
try:
    len = len(input('input something:'))
    if len < 3:
        raise PersonException(len, 3)
except EOFError:
    print("EOFERROR")
except PersonException as ex:
    print("ex.langth: {}, ex.stangard:{}".format(ex.length, ex.standard))
else:
    print('ok')
  1. try…except…和finally配合使用时保证无论如何会执行finally的语句,例如在读写文件时可以在finally中确保文件被正确关闭, 与上一步中的else替换即可
  2. 频繁读写文件时,总是使用try…except…finally会使得代码比较冗余,可以使用with语句配合open函数,with语句会在代码块执行完后自动关闭文件,with在执行内部代码块前执行__enter__函数, 在执行完内部代码后,调用__exit__函数退出,例子如下:
with open('./number') as f:
    for line in f:
        print(line)

趣味知识点

  1. 传递元组,如a, b = func(), func函数return时返回元组即可,比如交换两个值: a, b = b, a
  2. 单语句块:语句块只有一句时,可以把两行放在一行
  3. 列表推导:从一个列表筛选出指定值的方式,原列表不变,例如:
list = [i*3 for i in range(10) if i%2==0]
  1. assert接一个语句表示假设语句为真,如果不为真会抛出Asserterror

标准库(updating)

  1. os.path.join(path1, path2,…), 连接文件路径,需要注意的是除了第一个参数外,后面的参数不能以反斜杠或者斜杠开头,否则得到的结果不符合预期
  2. logging模块处理调试信息

Numpy用法

ndarray

  1. 原理
    ndarray 对象由计算机内存的连续一维部分组成,并结合索引模式,将每个元素映射到内存块中的一个位置。内存块以行顺序(C样式)或列顺序(FORTRAN或MatLab风格,即前述的F样式)来保存元素
  2. 创建和访问, 默认整形为int32, float为float64位,当初始化未指定dtype并且数据混杂时,默认dtype为float64
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

import numpy as np 
a = np.array([1,2,3])  
print (a)
  1. 常用属性
    ndarray.ndim 秩,即轴的数量或维度的数量
    ndarray.shape 数组的维度,对于矩阵,n 行 m 列, ndarray.reshape更改数组的维度(reshape会返回非拷贝的副本数组,更改这个数组时,原数组的值也会改变,reshape和原数组用的是同一块内存)
    ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
    ndarray.dtype ndarray 对象的元素类型
    ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
    ndarray.flags ndarray 对象的内存信息
  2. nditer访问数组元素
#C按照行顺序,F按照列顺序
for x in np.nditer(a, order="C"):
    print(x, end=" ,")

for x in np.nditer(a.T.copy(order="F")):
    print(x, end=" ,")

nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 read-only 的模式。

for x in np.nditer(a, op_flags=["readwrite"]):
    x *= 2

数组操作

  1. 展平 raval
  2. 翻转transpose或array.T
  3. numpy.squeeze 函数从给定数组的形状中删除一维的条目

python debug

  1. import pdb
  2. pdb.set_trace()会让程序停留在这一行
  3. 常用指令:c继续执行后面的代码; s跳到下一行,n也跳到下一行,但是s会跳到执行的函数内部, w显示上下文,a显示函数列表,直接输入变量名来打印变量,变量名=value打印一个新的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值