python学习笔记

一、列表

1.列表rang()函数
1.1使用range()打印数字
for i in range(1,5) : 打印1-4数字,1,2,3,4
1.2使用range()创建数字列表
list(range(1,5)) 生成列表【1,2,3,4】
1.3使用函数range()可指定步长
range(1,6,2) 从1开始,每次输出的位置加2,,2表示步长,直到数字大于等于5—输出列表第一位、第三位、第五位等
1.4对数字列表进行简单计算
min(a) 列表a中最小值
max(a) 列表a中最大值
sum(a) 列表a中数字和
1.5列表解析(将多行代码行成一行)
a = [b2 for b in range(1,10)] 将1-9数字乘2,形成新列表a;b2为赋值插入列表的表达式值,每次for循环形成的数字赋值给b
2.列表切片
2.2 a[0:3] 取列表索引前三位元素,第0/1/2三位(切片的数字表示索引号,索引从0开始,切片的第二个参数跟range第二个参数一样,表示当前索引的前一个位置)
a[:3] 取列表索引从头到索引2的元素,第一个元素到第三个元素
a[1:] 取列表索引1到尾的元素,即第二个元素到末尾
a[-3:] 负数表示返回距离末尾的元素,这个表示距离末尾第三个元素以及到末尾的元素
b= a[:] 将a列表复制给b列表(对a/b列表分别操作,不同步改变)
b=a 将a列表赋值给b列表,俩列表操作同步,改变一个,另外一个同时改变
list[::-1] 翻转列表list,结果跟reverse一样
list[::2] 从列表list第一个开始,每隔一个元素取一个

3.列表其他

3.1  列表增加元素
	list.insert(index, obj)  将对象obj插入列表list的索引index位置
	nums.append('byz') #添加的值从最末尾添加
3.2 列表删除元素nums为列表
	list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
	nums.pop(2) #删除指定位置的元素
	nums.clear()  #清空列表,执行结果:[]
	list.remove(obj) 移除列表list中某个值obj的第一个匹配项
	del nums[0]   #使用del关键字,删除指定位置的元素,0代表下标
3.3修改元素
	nums[0] = 'hello'  #修改List内的元素值
3.4 查询元素
	names.count('beijing') 使用count查询元素'beijing'在列表names中出现次数,返回次数
	names.index('beijing'))  使用index获取beijing这个元素的下标值,如果有多个元素时,返回第一个元素的下标值
	names.index('beijing', 2)   #可以指定从哪个元素开始查找,2代表开始查找的下标
	names.index('beijing', 2, 3) #可以指定查找范围,2,3代表开始、结束的下标值,查找范围不包含结束下标对应的元素,顾头不顾尾
	status + names)  #两个列表List合并,产生一个新的变量,
	status.extend(names) #将names列表的 添加 到status里,status的值进行了更改
	nums.sort()              #默认是升序排列,对原有的列表进行操作,无返回值
	nums.sort(reverse=True)  #指定reverse=True,排序为降序排列
	b = sorted(nums)  # 不在原有的列表进行操作,返回一个新列表
3.5  set()函数,创建一个无序不重复的元素集合,x&y求交集,x|y求并集,x-y求差集
3.5   enumerate(sqquence)
		sequence--- 一个序列、迭代器或其他支持迭代对象   返回枚举对象  例(下标,对应元素)

二、元组

1.元组中元素的值不可修改
nums[0] = ‘hello’ #此方法使用会报错,无法修改元组中元素的值;但是可以给存储元组的变量nums重新赋值,其他元组的访问同列表一样

三、if语句

1.条件测试: =、!=、>、<、in(检查特定值是否包含在列表)、not in(检查特定值是否不包含在列表里)、
2.布尔表达式True、Fulse(if条件中,空列表为false)
3.if 、if else、if(条件) elif(条件) else(可省略)、如果条件为false,则执行下面;如果遇到为true的条件,则其余的测试都跳过
4. if if ...前面条件无论true或者false,下面都会执行
5.检查多个条件:
	1)and 同为true才是true,or同为false才是false

四、字典

1.访问字典中的值  alien['键']--返回字典中键对应的值
	字典:alien={'键':'值'} ,可以使用键来访问与之相关联的值:alien['键'](返回值),与键相关联的值可以是数字、字符串、列表甚至字典
2.添加键--值对(一次制定字典名、方括号括起的键、相关联的值)
	alien['x']=25 添加字典alien的键x对应的值为25
3.修改字典中的值
  alien['x']=20 修改字典alien的键x对应的值为25
4.删除键-值对(del 字典名、方括号中的键)
	del alien_0['x']  键x对应的值会被删除
5.遍历字典(键-值对、键、值)
	1)遍历键-值对 
		for key,value in alien.items():  遍历字典alien的键-值对,返回顺序跟存储顺序不同
		alien.items() 返回键-值对列表
	2)遍历字典中所有键 
		for key in alien.keys(): 
		for key in alien: 默认遍历字典中的键
		alien.keys() 返回字典中所有键列表
	3)按顺序遍历字典中所有键key
		for key in sorted(alien.keys()):   使用sorted()函数对于字典中的键进行排序
	4)遍历字典所有的值value
		for value in alien.values(): 
	5)set()剔除值value列表中重复的元素,使每个元素独一无二
		for key in set(alien.keys()):
		对包含重复的列表使用set(),返回值是一个集合对象{'x','y','z'}
6.嵌套
	1)列表中存储字典:多个字典alien放进列表list里
		list = [alien_0,alien_1,alien_2]
	2)字典中存储列表(一个键可关联多个值)	
		alien = {'key':['list']}
	3)字典中存储字典
		alien = {'key' : {'key' : 'value'}}

五、用户输入input和while

1.input()函数原理:让程序暂停运行,等待用户输入,用户输入解读为字符串。
2.int()函数将输入转换成整数
3.求模运算符%  将两个数相除,返回余数
4.while循环:循环不断运行,知道条件不满足
	1)break  ,退出当前while、for循环,不会执行余下语句;任何python循环语句均可使用break,例如for
	2)continue , 返回循环开头,继续通过条件测试结果判断是否继续执行,(for、while:返回当前循环开头;)

六、字符串、数字

1.访问字符串中的值
	1)字符串切片 var[1:5:2] 1和5是下标(从0开始),2是步长,参考列表切片
	2)获取字符串某个元素str[0] 取字符串下标为0的元素,即第一个元素
2.修改字符串中的值
	var=var[:6] + '修改值'   字符串var需保留的值var[:6]和修改值
3.转义字符
	\n	换行
	\\	反斜杠符号
	\b	退格
	\t	横向制表符(四个空格)
4.字符串运算符
	+(字符串连接)、*(重复输出字符串)、[](通过索引获取字符串中字符)、[ : ](截取字符串中的一部分)、in、 not in 
5.% 格式化字符串
	1)多个变量格式化时 ("%d %d" %(2,3))
	2)字符串格式化符号
		%s 格式化字符串、%d 格式化整数、%f 格式化浮点数字,可指定小数点后的精度,m.n.	m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
6.三引号可以将复杂的字符串进行复制'''
	三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符,通常成对使用
7.字符串内置函数(string字符串)
	1.string.count(str, beg=0, end=len(string)) 返回 元素str 在 string字符串 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
	2.string.find(str, beg=0, end=len(string)) 检测 str 是否包含在 string字符串 中,如果是返回开始的索引值,否则返回-1
	3.string.join(seq) 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并返回为一个新的字符串,
						(string为分隔符,可以为空,seq可以是列表、字符串、元组、字典)
	4.string.lower() 转换 string 中所有大写字符为小写
	5.max(str) 返回字符串 str 中最大的字母
	6.min(str)返回字符串 str 中最小的字母
	7.string.split(str=""),就是将一个字符串分裂成多个字符串组成的列表(string为字符串,str为分隔字符,默认空格)。
	8.string.title()  将字符串string所有单词都是以大写开始,其余字母均为小写,返回新字符串
	9.string.upper() 转换 字符串string 中的小写字母为大写
	10.str.join(sequence) ,join()方法用于将序列sequence中的元素以指定的字符str连接生成一个新的字符串
8. int(x,[base]) 将一个数字或者base类型的字符串转换成整数(十进制)
    1)x可以是字符串或者数字,但是base被赋值后,x只能是字符串
	2) x作为字符串时必须是base类型,也就是说x变成数字时必须能用base进制表示  例 int("Obf",base=16) 将16进制的Obf转换成10进制

七、其他

1.random模块,用于生成随机数
	1)random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0
	2)random.uniform(a, b),用于生成一个指定范围内的随机符点数
	3)random.randint(a, b),用于生成一个指定范围内的整数,a是下限,参数b是上限,生成的随机数n: a <= n <= b
	4)random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数step为递增的步长
	5)random.choice(sequence)从序列sequence中获取一个随机元素,sequenceke可以是字符串、列表、元组
	6)random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。
2.迭代器、生成器
	1)容器:容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中。(list,set,tuples都是容器对象)
	2)可迭代对象:凡是可以返回一个迭代器的对象都可称之为可迭代对象(list,set,tuples,dict都是可迭代对象),通过iter(x)返回一个迭代器,x可是list、set等
	3)迭代器(iterator):它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,
	4)生成器(generator):生成器其实是一种特殊的迭代器, 生成器一定是迭代器(反之不成立),函数中有yield关键字,则是生成器函数
	5)生成器表达式(generator expression):a = (x*x for x in range(10))
	

3.filter(function, iterable)函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list来转换	
	1)接收两个参数,第一个function为判断函数,第二个iterable为可迭代对象序列,序列的每个元素作为参数传递给函数进行判断,返回True或False,将返回True的元素放到新列表中。
	
4.lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式(本身结果就是个返回值)。其实lambda返回值是一个函数的地址,也就是函数对象。
	1)lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
		例:p = lambda x,y:x+y  ,print(p(4,6))
5.map(function, iterable, ...)函数,会根据提供的函数对指定序列做映射
	1)function--函数 iterable一个或多个序列,可以是列表、字符串、迭代器等可迭代对象
	3)返回迭代器
6.reduce(function, iterable[, initializer])函数会对参数序列中元素进行累积。
	1)用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
	2)function -- 函数,有两个参数   iterable -- 可迭代对象   initializer -- 可选,初始参数
	3)返回函数计算结果。
7. ctime() 函数中使用,可输出年月日秒

八、函数

1.形参:定义函数时,变量属于形参
  实参:调用函数时,传递给函数的信息
2.实参 : 位置实参(顺序很重要)、关键字实参(在传递实参时将名称和值关联起来)、默认值(编写函数时给形参指定默认值,默认值放最后)
3.传任意数量的实参:形参名为 *toppings 中的星号让python创建一个名为toppings的空元组,并将所有值都封装到这个元组中
					形参名为 **toppings 中的星号让python创建一个名为toppings的空字典,并将所有值都封装到这个字典中
4.将函数存储在模块中:
	import module_name 导入模块
	import module_name as mn 给模块module_name指定别名as
	from module_name import function_name 导入模块中特定函数
	from module_name import function_name  as fn 给函数function_name指定别名fn
	from module_name import * 导入模块module_name中所有函数
5.全局变量、局部变量
	1)局部变量:定义在函数内部的变量拥有一个局部作用域,局部变量智能在其被声明的函数内部访问
	2)全局变量:定义在函数外的拥有全局作用域,全局变量可以在整个程序范围内访问
	3)global关键字:当函数内部作用域想修改外部作用域的变量时,需使用global关键字,例: global a 使a成为全局变量
6.要运行函数,需调用它。要调用函数,可依次制定函数名以及用括号括起的必要信息,如greet_user(),如果函数包含return,需赋值给变量
7.调用函数时hi(),后面加上小括号,函数就会被执行;如果a=hi,函数hi后不加小括号,函数可以到处被传递,并且可以赋值给别的变量而不去执行
8.可将函数作为参数传给另一个函数 fun1(fun2),fun1、fun2都是函数

九、类

1.__int__()方法是一种特殊的方法,称为类的构造函数或初始化方法,当创建这个类的实例时就会调用该方法
2.形参self :1)第一参数永远时self,表示创建类实例本身,而不是类本身
			 2)可以把对象的各种属性绑定到self
			 3)self表示当前对象的地址
			 4)加了self表示是类的实例的一个属性(可以通过“实例名.变量名”的方式引用)
			 5)以self为前缀的变量都可供类中所有方法使用,还可通过类的任何实例来访问这些变量
			 6)self.name = name  获取存储在形参name中的值,并将其存储到变量name中,
				然后该变量被关联到当前创建的实例,self.name为对象属性
3.类属性是指定义在类的内部而且在方法的外部的属性(相当于全局变量,实例对象共有属性),
	类可以通过“类名.属性名”调用类的属性,但是不能通过这种方式调用对象属性
4.对象属性(实例属性)是指定义在方法的内部的属性(对象-实例化赋值后的对象,实例属性为实例对象自己私有),
	对象可以通过“对象名.属性名”调用对象属性和类属性
5.修改属性值:
	1)通过实例直接修改属性值,对象.属性=值
	2)通过方法修改属性的值,给方法添加一个形参,”对象.方法(实参)“时修改属性值
	3)通过方法对属性的值进行递增
6.类的私有属性
	1)__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法使用时self.__private_attrs
	2)__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用self._private_methods
7.单下划线、双下划线、头尾下划线说明
	1)__foo__:头尾双下划线,定义的特殊防范,一般时系统定义名字,类似__init__()之类的
	2)_foo:以单下划线开头的表示是protected类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于from module import 
	3)__双下划线的表示的是私有类型(private)的变量,只能允许这个类本身进行访问

十、文件和异常

1.读取整个文件with open(“file.txt”)as file_object : contents  = file_object.read() 或lines = file_object.readlines()
	1)with关键字可让python妥善的打开和关闭文件
	2)open(“打开文件名称”) 函数用来打开文件,返回一个表示文件的对象(file_object),返回的文件对象只能在with代码块外使用
	3)read()函数读取整个文件的全部内容,并将其作为一个长长的字符串存储在变量contents中
	4)readlines()函数,从文件中读取每一行,并存储在列表lines中,并且with代码块外依然可使用这个变量
	5)string.rstrip([chars])   rstrip()删除string字符串末尾制定字符生成的新字符串,返回新字符串,默认空格
	6)open(“file_path”),file_path可以是相对路径,可以是绝对路径 'F:\\python\\pi_digits.txt'
2.写入文件 with open('路径',‘w’) as file_object : file_object.write('要写入东西')
	1)写入模式:'w'写入模式,'r'读取模式(默认也是),'a'附加模式,'r+'读取和写入模式
	2)写入模式下'w',文件不存在时,函数open()将自动创建文件;如果文件存在,写入时将清空原有文件
	3)write()方法:文件对象方法write()将一个字符串写入文件,写入只能是字符串
	4)写入多行,需在字符串末尾添加换行符
	5)'a'附加模式下,添加内容是,不会覆盖原有内容,返回对象时不会清空
3.异常处理机制
	1)try--except--else  如果try代码块运行起来没有问题,将跳过except代码块;如果try代码块导致错误,将查找这样的except代码块,并运行其中代码;
						如果try代码块中没有异常,将执行else中代码块
	2)pass语句,except后执行pass语句,出现异常执行except后面的pass语句,失败时没有任何动作
4.存储数据
	1)json.dump()用来存储数据,接受两个实参:要存储的数据以及用于存储数据的文件对象
	2)json.load()将数据读取到内存中,接受一个实参(存储数据的.json文件)

十一、正则表达式

1.正则表达式是一种字符串匹配的文本模式,包括普通字符和特殊字符(成为元字符),可以用来
    检查一个串是否会含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等
2.正则表达式语法
	1)run+b +号代表前面的字符必须至少出现一次(1或多次)
	2)run*b *号代表字符可以不出现,也可出现1或多次
	3)run?b  ?号代表前面的字符最多只可以出现一次(0或1次)
	4)普通字符:指没有显示指定为元字符的所有可打印和不可打印字符(大小写字母、数字、标点符号等)
	5)非打印字符:\cx:匹配由x(A-Z或a-z)指定的控制字符,例\cM匹配一个Control-M或回车符
					\f :匹配一个换页符。等价于\x0c和\cL
					\n :匹配一个换行符。
					\r: 匹配一个回车符
					\s :匹配任何空白符,包括空格、制表、换页等,等价上面三个
					\S :匹配任何非空白字符。等价[^ \f\n\r\t\v]
					\t: 匹配一个制表符
					\v :匹配一个垂直制表符
	6)特殊字符(元字符):就是一些特殊含义的字符,比如在正在表达式中的*符号,匹配特殊字符时需对特殊字符进行转义,在其前面添加\
		$ 匹配输入字符串的结尾位置,要匹配$,请使用\$
		() 标记表达式的开始和结束的位置。子表达式可以获取供以后使用。要匹配这些字符,请使用\(\)
		* 匹配前面子表达式0或多次
		+ 匹配前面子表达式一次或多次
		. 匹配除换行符\n之外的任何单字符
		[ 标记一个中括号表达式的开始
		? 匹配前面子表达式0或1次
		\ 将下一个字符标记为或特殊字符,查看讲解
		^ 匹配输入字符串的开始位置
		{ 标记限定符表达式的开始
		| 指明两项之间的一个选择。
	7)限定符:用来指定正则表达式的一个给定组件必须要出现多次才能满足匹配*、+、?、{n}、{m,n}
		{n} n是一个非负整数,匹配确定的n次。例‘o{2}’要匹配两个o
		{n,} n是一个非负整数,至少匹配n次,例如‘o{2,}’匹配2个以上的o
		{n,m} m、n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次,例如‘o{1,3}’匹配前三个o
		通过在*、+或?限定符之后放置?,该表达式从“贪心”表达式转换为“非贪心”表达式或者最小匹配
	8)定位符:使你能将正则表达式固定到行首或行尾
		^  匹配输入字符串的开始位置
		$  匹配输入字符串的结尾位置
		\b  匹配一个单词的边界,即字与空格间的位置
		\B 非单词边界匹配
3.python正则表达式
	1)re.match(pattern,string,flags-0) 尝试从字符串的起始位置匹配一个模式,匹配成功返回一个匹配的对象,如果不是起始位置匹配成功的话,match()就返回none
		pattern:匹配的正则表达式
		string:要匹配的字符串
		flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写
		匹配对象方法group(num)或groups()
		group(0)匹配这个表达式的字符串,group()可以一次输入多个组号,在这种情况下它将返回一个包含哪些组所对应值的元组 
		groups()返回包含所有小组字符串的元组,从1到所含的小组号

十二、多线程

1.threading模块   t1=t1 = threading.Thread(target=music,args=(u'爱情买卖',)) 
	1.1 创建线程t1,使用threading.Thread()方法,在这个方法中调用music方法target=music,args方法对music进行传参。 把创建好的线程t1装到threads数组中。
		target=function_name,function_name为需要线程去执行的方法名;args:线程执行方法(function_name)接收的参数,该属性是一个元组,如果只有一个参数也需要在末尾加逗号。
	1.2 t1.setDaemon()  setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句
	1.3 t1.start() 开始线程活动
	1.4 t1.join()  用于等待线程终止,在子线程完成运行之前,这个子线程的父线程将一直被阻塞

十三、操作excel表格

未完,待续。。。。

你可能感兴趣的:(python,python)