Python基础操作回顾

如今的数据分析流行语言个人认为主流以Python、R、MATLAB三大语言为主。由于本科阶段接触过Python,所以对它很有情怀,于是我决定在这里复习几个Python知识点,以便后面遗忘随时查阅,并为数据分析之路打好基础。

先在此立一个Flag:12月,我会写一篇关于R语言的Blog,请我的主页监督我!!!

一、随机函数库random:

1、random.random():生成一个[0,1)的随机浮点数。

2、random.uniform(a,b):生成[a,b]范围内的随机浮点数。

3、random.randint(a,b):生成一个[a,b]范围内的随机整数。

4、randrange(a,b,c):在[a,b]中从a开始,b停止,c为步长,获取随机数。(即a, a+c, a+2c, a+3c, ....)。

5、choice(sequence):在sequence中随机选取一个元素。

6、shuffle(sequence):将列表元素随机打乱。

7、sample(sequence, k):随机获取指定长度片段。

二、切片、字符串、列表、元组、字典、公共方法

1、切片

列表、元组、字符串中支持切片操作,即:变量名[起始位置: 结束位置: 步长]值得注意的是,切片操作只会取到结束位置的前一位,而不会取结束位置。

2、字符串

1)find、index (rfind、rindex):查找函数。区别为:find找不到时返回-1,index返回异常。括号中的查找从右开始。

2)count:计算字符串出现的次数。具体参数为 (str, start, end=len(mystr)),因此可以通过参数控制起始位置。

3)replace:替换函数(不改变原字符串),具体参数为 (str1,str2,mystr.count(str1)),用str2替换str1,可指定替换次数。

4)split:分割字符串成为列表。mystr.split(str=' '),若不加参数,所有空格在分割中可以被删除,包括\n,\t。

5)join:在列表中除最后一个元素后面加上mystr进行连接,mystr.join(list),不会更改原字符串。注意:列表中不能是整形,如果是整形需要转为str才可

6)capitalize:首字母变为大写函数(只限字符串中的第一个字符)。

7)title:把每个单词的首字母变成大写。

8)startswith/endswith(str):检查是否以str开头/结尾,若是则返回Ture,不是返回False。

9)lower/upper:将字符串中的大(小)写全部转化为小(大)写。

10)ljust,rjust,center(width):返回一个原字符,以不同的对其方式显示(使用空格填充width)。

11)lstrip, rstrip, strip:删除字符串首端、末尾、两端的空白字符(通过改变参数可控制删除任意字符)。

12)partition, rpartition:把mystr以str分为str前、str、str后三部分,mystr.partition(str)

13)spitlines:按行分割,返回一个以行为分隔的列表,其本质是按照换行符'\n'分割。

14)isalpha, isdigit, isalnum:判断mystr是否全为字母、是否全为数字、是否全为字母或数字。

15)isspace:判断mystr中是否只包含空格,若是则返回True,否则返回False

注:以上操作,1-5为常用操作;6-15为对英文数据清洗时可能用到的操作。

3、列表

1)append, extend, insert:添加元素。apend直接添加到列表末尾;extend可以将另一个列表元素分别添加到指定列表(即extend会拆分);insert(index, object):添加元素到指定位置。
2)in/not in:列表中查找元素。
3)index:查找元素函数,找不到会报错。
4)count:统计元素出现的次数。
5)sort(key=None, reverse=False):排序函数,通过改变reverse可控制升序降序。sort会直接改变原列表;key可以自己指定能够作为排序依据的函数。
6)reverse:逆置函数,需单独调用后输出,会改变原列表顺序。

4、元组

基本与列表相似,但是不可以更改,使用 ‘()’ 定义,但定义只有一个值时,'(1,)' 后面加 ',' 才是元组

元组操作:
1)index:查找元素函数,找不到会报错。
2)count:统计元素出现的次数。

5、字典

采用in遍历字典,字典的遍历时间复杂度为O(1),因为字典遍历运用的是哈希表(Hash Table)。

字典操作:
1)get(key, value):查找key下的value,找不到则返回None;调用时若给出value,找不到时则返回该值。
2)del, clear:删除函数。del dict[key] 删除指定元素或整个字典;.clear() 清空字典数据,该字典仍会保留。
3)keys():返回一个包含字典所有key的列表。
4)values():返回一个包含字典所有value的列表。
5)len():获取字典键值对个数。
6)items():返回一个包含字典所有(key,value)元组的列表。
7)has_key(key):如果key在字典中,返回True,否则返回False

6、公共方法

1)cmp(item1,item2):比较两个值;‘<’ 返回-1,'>' 返回1,'=' 返回0。
2)min/max(item):返回最小值/最大值。
3)del item:删除各种变量。
4)enumerate(str/list/tuple/dict):返回两个值,一个是下标,另一个是该下标所对应的值。

三、函数

1、函数的文档说明

在定义函数时,在函数第一行使用“xxx”填写函数文档说明,可用help()查看。

2、全局变量

在函数中直接对全局变量进行修改会产生异常,在修改前,需在函数内部先使用global进行声明。

3、缺省参数

函数定义形参时可以对其进行赋值,即作为了缺省参数,在调用时该参数可以缺省,也可以赋值。

注:缺省参数定义时必须放在最后。

4、不定长参数

1)*args:默认为元组,放在函数定义的末尾,可以接受不定数目个参数。如:test(a,b,*args) --->test(1,2,3,4,5)
2)**kwargs:默认为字典,功能同上,但有如下区别。如:test(a,b,*args,**kwargs) ---> test(1,2,3,4,n=5,n=6)

5、可变类型与不可变类型

可变类型:列表、字典
不可变类型:数字、字符串、元组

6、匿名函数

lambda 参数: 表达式

1)匿名函数当做参数传递给别的函数:
def test(a,b, result):
	return result(a, b)
print test(1, 2, lambda x, y: x + y)
2)利用匿名函数完成列表中的字典按某一key值排序:
b = [{'number': 7, 'age': 24}, {'number': 3, 'age': 18}, {'number': 10, 'age': 22}]
b.sort(key=lambda x:x['age'])
print b

四、文件

1、文件基本操作

1)open(文件名,访问模式):打开或创建文件;
”r”:只读;“w”:覆盖式写入;“a":不覆盖式写入;
“r+”:读写,文件不存在会崩,指针在文件开头;“w+”:可创建覆盖式读写;“a+”:指针在结尾式创建读写。

两种打开文件的方法:

f = open("test.txt",'a')
f.write("111")

with open("test.txt", 'a') as f:
	f.write("111")

2)close():关闭文件。标准操作应是每打开一次文件,就应该有对应的关闭文件。
3)read():读文件,一次性读完,调用以后后再调用不会再有作用;可在()中指定读取的字节。
4)write():写入文件。写完以后指针便会指向文件末尾,若想使用read()需先调用seek()函数。
5)readlines():读多行文件,按行读出,放入一个列表中。
6)readline():读单行文件,每次读一行,再调用时读第二行,以此类推。
7)tell():获取读操作读到的指针位置。
8)seek(offset, from):改变读操作指针;offset表示偏移量;from:0为开头,1为当前位置,2为结尾。

2、OS模块下的文件操作

1)rename(old, new):重命名文件
2)remove(path):删除文件
3)mkdir():创建文件夹
4)getcwd():获取当前程序所在目录
5)chdir():改变当前程序目录
6)listdir(path):获取路径下的文件列表
7)rmdir():删除文件夹
8)walk():遍历当前程序路径,返回值为多个含有3个子列表的元组,3个列表分别存放:文件夹路径、该路径下所有文件夹名、该路径下所有文件名。

五、面向对象编程

1、__init__(self)方法

创建类后自动调用此方法,可用来传实例属性;self后面若有形参,类在创建的时候便要传入该形参。

2、__str__(self)方法

改变 print 对象名 时的输出信息,将要改变的信息在函数中return即可。

3、__new__(cls)方法

系统在__init__方法前调用,用来创建对象self的方法;返回值必须return一个对象,如: return super().__new__(cls)

当类接受参数的时候,在__new__方法的后面也必须要接受该参数,但不使用。

4、数据隐藏

在访问属性时,直接通过类访问的方法并不安全,应通过定义方法的办法访问或者修改属性。

5、私有属性与私有方法

属性名前加__即为私有属性,如:self.__age = 30。私有属性不能在外部通过对象名访问和修改。

方法前加__即为私有方法,外部也不能调用。

其实所谓私有方法,其实是python解析器内部将方法名更换了,所以外部无法访问。有兴趣的同学可以网上查相关资料。

6、删除对象及__del__()方法

del 对象名:删除对象;如果程序结束没删对象,程序会自动删除。
__del__():对象被删时自动调用。

7、类的嵌套

在给类A的属性赋值时,可以赋值类B,此时该属性便有了类B中的所有属性与方法。

8、类的继承

单继承:class 类名(继承类类名)
1)当两个类中有较多方法相同时,则可将其方法与属性抽出到一个类中,然后运用继承。
2)父类中的私有属性与私有方法子类无法访问;子类中使用父类的方法或属性时直接用 self. 访问。
3)方法重写: 若父类中的某个方法不满足需求,可在子类中以相同方法名重写。

notice:当在重写时,若还希望调用父类中的该方法,用 父类名.方法名() 调用,也可以用super().方法名() 调用。

多继承:class 类名(继承类类名1; 继承类类名2)
若两个父类中有两个同名方法,调用时会调用先继承的父类中的方法。但若两父类也是继承而来,则并不确定先调用哪个,Python解释器的mro算法负责调度,可用 类名.__mro__() 方法查看调用先后顺序。

9、类属性与实例属性

1)实例属性

在__init__(self)中定义的为实例属性,实例属性跟着对象走,不能通过类名访问。用 对象名.实例属性名 访问。

2)类属性

在方法外直接定义的属性为类属性,类属性会跟着类走,用 类名.类属性名 实现访问。通过对象名不能修改类属性,而是在对象中创建或者修改同名的实例属性的值

注:当类属性名与实例属性名相同时,对象名.属性名 会优先访问实例属性

10、类方法与静态方法

1)类方法
方法定义前用@classmethod修饰,用来修改类属性,方法形参中将self改为cls。通过对象名或类型均可访问。
2)静态方法
方法定义前用@staticmethod修饰,用来完成简单打印、修改类属性等功能,无形参,通过对象名或类型均可访问。

11、工厂模式

如在卖车系统中,将Store与Factory类分开;添加新品时,只需修改Factory类即可的思想,称为简单工厂方法

在简单工厂方法基础上,若有若干个Store时,可写一个Store父类,将Create()方法空出,让子类填写,父类只需要完成order方法即可,这样的涉及模式称为工厂模式。

12、单例模式

即找个变量存放生成的对象,若变量为空,则在__new__(cls)中创建一个对象,若不为空,则直接返回变量中的对象。

单例模式通过一个类属性与__new__方法配合实现单次创建对象,另一个类属性与__init__方法实现单次初始化赋值。


单例模式代码:

class Example(object):
	__instance = None
	__first_init = False

	def __new__(cls, age):
		if not cls.__instance:
			cls.__instance = object.__new__(cls)
		return cls.__instance

	def __init__(self, age):
		if not self.__first_init:
			self.age = age
			Example.__first_init = True

六、异常处理

1、处理框架

try:
	pass
except:
	pass
else:
	pass
finally:
	pass
try:后面加可能出现异常的语句。
except:后面填写出现异常后的处理方法,可以并写多个异常名来处理多个可能的异常。Exception囊括了所有异常。
except 异常名 as 变量名:捕获处理异常并将异常保存到变量中。
else:只有try中没有发生异常时才会执行的语句。
finally:无论任何情况下最后都会执行的语句。

2、异常的传递

A ---> B ---> C ---> D,若D中出现异常,无处理机制时会传给C,若也无处理则传给B,以此类推。

3、自定义异常

需定义一个类,此类必须继承Ecception。此时无法获取异常信息存入变量,若想获取需要重写类中的__str__方法。

4、异常处理中抛出异常

当捕获异常后,处理时可直接用 raise 抛出捕获的系统异常。

七、模块

每个.py文件都是一个模块,在其他.py文件中都可以import

1、__name__变量

直接运行该.py文件时,该变量存放“__main__”;在其他.py文件import时,该变量存放对应.py文件的文件名。

2、from 模块名 import 函数名(*代表全部函数)

这种导入方法能让使用更加简单,使用时不用再加模块名。

3、sys模块中path变量

若想用的.py模块不在当前文件夹下,则可将该.py模块绝对地址移至sys模块下path变量中即可。

4、__pycache__文件夹

import缓存文件夹。第一次import一个模块后,系统会自动创建该文件夹,里面保存该模块编译后的文件。当该模块不被 修改时,下次导入则不用再编译,因此提升了效率。

5、__all__变量

列表,在模块文件首行定义。填入其他.py文件允许导入使用的类或函数;若不在该变量中,其他文件用*导入该模块后, 则不能使用该函数或类;但单独import时仍可使用。

八、包

1、包的创建

将所有.py文件放到一个文件夹中,其中再创建一个__init__.py文件,该文件夹就可以称之为包,包能避免大型开发中模块 名容易重复产生的问题。

2、__init__.py文件

该文件中即使用__all__变量声明文件夹中哪些模块能被使用。

3、包的安装:

找到压缩包 --> 解压 --> 进入文件夹 --> 执行 python setup.py install

九、强化练习知识点

1、给程序传参(如:python setup.py build)

所传参数会传入sys.argv列表变量中,[0]保存的是该.py文件名,所传参数会从[1]开始保存,可用空格隔开传入多个参数。

2、列表推导式

形如 a = [x for x in range(1,100)] ----> 快速生成1-99的a列表;
a = [x for x in range(1,100) if x % 2 == 0] ---> 快速生成偶数列表
a = [x for x in range(1,4) for y in range(1,3)] ---> 快速生成[1,1,2,2,3,3]列表
a = [[x,y] for x in range(1,4) for y in range(1,3)] ---> 快速生成[[1,1],[1,2],[2,1],[2,2],[3,1],[3,2]]列表
甚至可以生成列表套元组以及多循环嵌套多if语句来生成列表。

3、set集合

set:也是{}显示,但其中的数据不会重复,若重复则会自动去重后保存。
因此可利用列表或元组与set之间的相互转化实现列表或元组的去重。


以上就是我对Python部分知识点的总结啦!欢迎大家与我分享交流。

望自己不忘初心,加油向前。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值