1 Python基础
1 下载及安装
下面以windows为例
- 下载:https://www.python.org/downloads/windows/
- 安装:一路next
- 环境变量:C:\Python27;C:\Python27\Scripts;
- 测试:python -v
pycharm professional
- server选项里边输入 http://elporfirio.com:1017/
- server选项里边输入 http://idea.imsxm.com/ (建议购买正版)
2 简单程序
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #代码1 2 print 'Hello lizitest' 3 #结果1 4 #Hello lizitest 5 6 #代码2 7 print 'Hello 栗子测试' 8 #结果报错 9 #解决办法:文件头加入 10 #!/usr/bin/env python -- 告诉系统是python文件 11 # coding=utf-8 -- 设置字符集
3 编码风格
- 大小写敏感
- 顶头开始写代码
- 缩进:统一缩进,用Tab
- 标识符:包含数字、字母、下划线;只能字母、下划线开头
- 常量:全部大写
4 注释
- 单行注释:#
- 多行注释:'''
5 数据类型
不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象。
对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象。
可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象。
变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,
即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
查看内存地址函数:id()
查看数据类型函数:type()
5.1 不可变类型
内存地址变化,且不过不再使用的内存会被垃圾回收器回收
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #不可变类型:整型int、浮点型float、字符串型string、元组tuple 2 #以int为例做实验 3 4 age = 10 5 money = 10 6 tmp = age 7 8 print id(age) 9 print id(money) 10 print id(tmp) 11 12 age = 18 13 print id(age) 14 15 #结果 16 32471152 17 32471152 18 32471152 19 20 31684528
5.2 可变类型
地址是不变的,只是地址中的内容变化了且地址得到了扩充
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #可变数据类型:列表list和字典dict 2 #以list为例 3 4 a = ['关羽' , '张飞' , '赵云'] 5 print id(a) 6 a.append('马超') 7 print id(a) 8 a += ['黄忠'] 9 print id(a) 10 11 print '%s' % str(a).decode('string_escape') 12 13 #结果 14 36964552 15 36964552 16 36964552 17 ['关羽', '张飞', '赵云', '马超', '黄忠']
5.3 类型转换
5.4 元组
元组不可以修改,一般当作常量来使用。但元组可以进行连接和删除
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #定义元组 2 a = (('刘备' , '孙尚香') , '关羽' , '张飞') 3 print a[0][1] 4 print '%s' % str(a[0]).decode('string_escape') 5 print '%s' % str(a).decode('string_escape') 6 print id(a) 7 8 #结果 9 孙尚香 10 ('刘备', '孙尚香') 11 (('刘备', '孙尚香'), '关羽', '张飞') 12 31867384 13 14 #组合元组,运算后会生成一个新的元组 15 b = ('诸葛亮' ,) 16 c = a + b 17 print '%s' % str(c).decode('string_escape') 18 print id(c) 19 20 #结果 21 (('刘备', '孙尚香'), '关羽', '张飞', '诸葛亮') 22 35576952 23 24 #元组内置函数 25 tmp1 = ('10' , '20' , '30') 26 tmp2 = ('10' , '200' , '30') 27 list = ['刘备' , '关羽' , '张飞'] 28 print cmp(tmp1, tmp2) #比较两个元组元素。 29 print len(tmp1) #计算元组元素个数。 30 print max(tmp1) #返回元组中元素最大值。 31 print min(tmp1) #返回元组中元素最小值。 32 print '%s' % str(tuple(list)).decode('string_escape') #将列表转换为元组。 33 34 #结果 35 -1 36 3 37 30 38 10 39 ('刘备', '关羽', '张飞') 40 41 #删除元组 42 del c
5.5 列表
列表是一组有序项目的集合,它可变的数据类型,可以进行增删改查
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #列表 2 a = ['start' , 'Python' , 'Java' , 'PHP'] 3 4 a.append('VBS' ) #增 5 print a 6 del a[0] #删 7 print a 8 a[3] = 'C++' #改 9 print a 10 print a[0] #查 11 12 #结果 13 ['start', 'Python', 'Java', 'PHP', 'VBS'] 14 ['Python', 'Java', 'PHP', 'VBS'] 15 ['Python', 'Java', 'PHP', 'C++'] 16 Python 17 18 #列表内置函数 19 tmp1 = ['10' , '20' , '30' , '40'] 20 tmp2 = ['10' , '200' , '30'] 21 myTuple = ('刘备' , '关羽' , '张飞') 22 #cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1 23 print cmp(tmp1, tmp2) #比较两个列表元素。 24 print len(tmp1) #计算列表元素个数。 25 print max(tmp1) #返回列表中元素最大值。 26 print min(tmp1) #返回列表中元素最小值。 27 print '%s' % str(list(myTuple)).decode('string_escape') #将元组转换为列表。 28 29 #结果 30 -1 31 4 32 40 33 10 34 ['刘备', '关羽', '张飞'] 35 36 #列表操作 37 a = ['start' , 'Python' , 'Java' , 'PHP' , 'Python' , 'end'] 38 b = ['append1' , 'append2'] 39 print a.count('Python') #统计某个元素在列表中出现的次数 40 a.extend(b) #在列表末尾一次性追加另一个序列中的多个值 41 print a 42 print a.index('Java') #从列表中找出某个值第一个匹配项的索引位置 43 a.insert(1, 'I am coming') #将对象插入列表 44 print a 45 a.pop(1) #移除列表中的一个元素(默认最后一个元素),且返回该元素的值 46 print a 47 a.remove('Python') #移除列表中某个值的第一个匹配项 48 print a 49 a.reverse() #反向列表中元素 50 print a 51 c = ['x' , 'a' , 'o' , 'n'] 52 c.sort() #对原列表进行排序,assic码进行排序 53 print c 54 55 #结果 56 2 57 ['start', 'I am coming', 'Python', 'Java', 'PHP', 'Python', 'end', 'append1', 'append2'] 58 ['start', 'Python', 'Java', 'PHP', 'Python', 'end', 'append1', 'append2'] 59 ['start', 'Java', 'PHP', 'Python', 'end', 'append1', 'append2'] 60 ['append2', 'append1', 'end', 'Python', 'PHP', 'Java', 'start'] 61 ['a', 'n', 'o', 'x']
5.6 字典
字典是键值对的集合,它是无序的,通过键值来访问,键值必须唯一
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #字典 2 fourKings = {'Jacky':20 , 'Andy':19 , 'Leon':18 , 'Aaron':16} 3 fourKings['me'] = 50 #增 4 print fourKings 5 fourKings.pop('me') #删 6 print fourKings 7 fourKings['Aaron'] = 48 #改 8 print fourKings 9 print fourKings['Aaron'] #查 10 11 #结果 12 {'me': 50, 'Aaron': 16, 'Andy': 19, 'Leon': 18, 'Jacky': 20} 13 {'Aaron': 16, 'Andy': 19, 'Leon': 18, 'Jacky': 20} 14 {'Aaron': 48, 'Andy': 19, 'Leon': 18, 'Jacky': 20} 15 16 #字典内置函数 17 fourKings = {'Jacky':20 , 'Andy':19 , 'Leon':18 , 'Aaron':16} 18 elseKings = {'tmp':22} 19 print cmp(fourKings, elseKings) #比较两个字典元素。 20 print len(fourKings) #计算字典元素个数,即键的总数。 21 print str(fourKings) #输出字典可打印的字符串表示。 22 23 #结果 24 4 25 {'Aaron': 16, 'Andy': 19, 'Leon': 18, 'Jacky': 20} 26 27 #字典操作 28 fourKings = {'Jacky':20 , 'Andy':19 , 'Leon':18 , 'Aaron':16} 29 print fourKings.copy() #返回一个字典的浅复制,只复制第一层 30 print fourKings.fromkeys(fourKings) #创建一个新字典,复制fourKings字典的键,val默认值为None 31 print fourKings.fromkeys(fourKings , 10) #默认值10 32 print fourKings.get('Jacky') #返回指定键的值 33 print fourKings.get('me') #没有指定键返回None 34 if fourKings.get('me') == None: 35 fourKings['me'] = 100 36 print fourKings 37 print fourKings.has_key('Jacky') #键存在返回True 38 print fourKings.has_key('you') #键存在返回True 39 print fourKings.items() #以列表返回可遍历的(键, 值) 元组数组 40 print fourKings.keys() #以列表返回一个字典所有的键 41 print fourKings.values() #以列表返回字典中的所有值 42 fourKings2 = {'Jacky2':20 , 'Andy2':19 , 'Leon2':18 , 'Aaron2':16} 43 fourKings.update(fourKings2) #把字典1的键/值对更新到字典2里 44 print len(fourKings) 45 fourKings.clear() #删除字典内所有元素 46 print len(fourKings) 47 48 #结果 49 {'Aaron': 16, 'Andy': 19, 'Leon': 18, 'Jacky': 20} 50 {'Aaron': None, 'Andy': None, 'Leon': None, 'Jacky': None} 51 {'Aaron': 10, 'Andy': 10, 'Leon': 10, 'Jacky': 10} 52 None 53 {'me': 100, 'Aaron': 16, 'Andy': 19, 'Leon': 18, 'Jacky': 20} 54 True 55 False 56 [('me', 100), ('Aaron', 16), ('Andy', 19), ('Leon', 18), ('Jacky', 20)] 57 ['me', 'Aaron', 'Andy', 'Leon', 'Jacky'] 58 [100, 16, 19, 18, 20] 59 0
5.7 集合
集合是无序不重复的,因为无序所以没有索引
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #集合 2 x = set('l') 3 x.add('m') #增 4 print x 5 x.remove('l') #删 6 print x 7 x.update(['q' , 'w' , 'e' , 'r']) #增加多项 8 print x 9 10 #结果 11 set(['m', 'l']) 12 set(['m']) 13 set(['e', 'm', 'q', 'r', 'w']) 14 15 #操作 16 x = set(['l' , 'm' , 'n']) 17 y = set (['n' , 'ok']) 18 19 tmp = x&y #交集 20 print tmp 21 tmp = x|y #并集 22 print tmp 23 tmp = x-y #差集 24 print tmp 25 tmp = x^y #对称差集 26 print tmp 27 28 #结果 29 set(['n']) 30 set(['ok', 'm', 'l', 'n']) 31 set(['m', 'l']) 32 set(['m', 'ok', 'l']) 33 34 #其他操作 35 t = set('l') 36 x = set(['l' , 'm' , 'n']) 37 y = set (['n' , 'ok']) 38 39 print len(x) #长度 40 print t.issubset(x) #子集 t <= x 41 print t.issubset(y) #子集 42 print x.issuperset(t) #父集 x >= t 43 44 #结果 45 3 46 True 47 False 48 True
6 分支
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #if 2 str = 'time = 20170101' 3 if 'time' in str: 4 time0 = str.split('=')[1] #分割 5 time1 = str.split('=')[1].strip() #过滤空格 6 print time0 7 print time1 8 9 #结果 10 20170101 11 20170101 12 13 #str.lstrip() #去掉左边的空格 14 #str.rstrip() #去掉右边的空格 15 #str.strip() #去掉左右的空格 16 17 #if...else 18 name = 'Aaron' 19 if name=='Aaron': 20 print '老师' 21 else: 22 print '学生' 23 24 #结果 25 老师 26 27 #if...elif 28 score = 80 29 if 100 >= score >=80: 30 print '优秀' 31 elif 80 > score >=60: 32 print '及格' 33 else: 34 print '不及格' 35 36 #结果 37 优秀
7 循环
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #while 2 count = 3 3 while count > 0: 4 print 'teacher Aaron' + str(count) 5 count = count -1 6 7 #结果 8 teacher Aaron3 9 teacher Aaron2 10 teacher Aaron1 11 12 #while ... break 13 count = 3 14 while count > 0: 15 print 'teacher Aaron' + str(count) 16 count = count -1 17 if count == 1: 18 break 19 20 #结果 21 teacher Aaron3 22 teacher Aaron2 23 24 #for ... range 25 for item in range(3): 26 print item 27 28 #结果 29 0 30 1 31 2 32 33 #for ... range 34 list = ['Aaron' , 'Andy' , 'Jacky' , 'Leon'] 35 for i in range(len(list)): 36 print list[i] 37 38 #结果 39 Aaron 40 Andy 41 Jacky 42 Leon 43 44 #range(start, stop, step) 默认step=1 45 46 #for ... continue 47 list = ['Aaron' , 'Andy' , 'Jacky' , 'Leon'] 48 for i in range(len(list)): 49 if list[i] != 'Jacky': 50 continue 51 print list[i] 52 53 #结果 54 Jacky
8 函数
函数是组织好的,可重复使用的代码段。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #无参函数 2 def getName(): 3 return 'Aaron !' 4 5 print getName() 6 7 #结果 8 Aaron ! 9 10 #有参函数,必备参数 11 def getAge(name): 12 return name + ' 10 years old !' 13 14 print getAge('Aaron') 15 print getAge(name = 'Andy') #此种函数调用方式成为关键字函数 16 17 #结果 18 Aaron 10 years old ! 19 20 #有参函数,关键字参数,默认参数需要放在参数最后面 21 def getStuInfo(name , age=18): 22 return name + ' is ' + str(age) + ' years old !' 23 print getStuInfo('Leon') 24 25 #结果 26 Leon is 18 years old ! 27 28 #有参函数,不定长参数1 29 def printNames(*names): 30 return names 31 32 print printNames('Aaron' , 'Andy' , 'Jacky' , 'Leon') 33 34 #结果 35 ('Aaron', 'Andy', 'Jacky', 'Leon') 36 37 #有参函数,不定长参数2 38 def printNames(**params): 39 return params 40 41 print printNames(name = 'Aaron' , age = 10) 42 43 #结果 44 {'age': 10, 'name': 'Aaron'} 45 46 #lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。 47 #无参匿名函数 48 tmp = lambda:'Hello' 49 print tmp 50 51 #有参匿名函数 52 tmp = lambda x,y:x+y 53 print tmp(1,2)
9 字符串
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #定义字符串 2 str1 = 'Hello Aaron' 3 str2 = 'I am Andy' 4 5 #字符串长度 6 print len(str1) 7 #结果 8 11 9 10 #截取字符串-------------------------------------start 11 print str1[0] #截取第1位字符 12 print str1[-1] #截取倒数第1个字符 13 #结果 14 H 15 n 16 17 print str1[0:5] #截取1-5位的字符 18 print str1[-5:-1] #截取倒数第5位与倒数第1位之前的字符 19 #结果 20 Hello 21 Aaro 22 23 print str1[6:] #截取第6位-最后1位 24 print str1[-3:] #截取倒数第三位到结尾 25 #结果 26 Aaron 27 ron 28 29 print str1[:-3] #截取从头开始到倒数第3个字符 30 print str1[:3] #截取从头开始到第3位的字符 31 #结果 32 Hello Aa 33 Hel 34 35 print str1[:] #截取字符串的全部字符 36 #结果 37 Hello Aaron 38 #截取字符串-------------------------------------end 39 40 #查找-------------------------------------start 41 print str2.find('A') #没有substr则返回-1 42 print str2.index('A') #同find 43 #结果 44 5 45 5 46 47 print str2.rfind('A') #返回S中最后出现的substr的第一个字母的标号,没有substr则返回-1 48 print str2.rindex('A') 49 50 print str1.count('o') #subsstr出现的次数 51 #结果 52 2 53 54 print str1.replace(' ' , '-') 55 #结果 56 Hello-Aaron 57 58 print str1.strip() #去掉左右空格 59 print str1.lstrip() #去掉左边空格 60 print str1.rstrip() #去掉右边空格 61 print str1.strip('d') #去掉左右d 62 print str1.lstrip('d') #去掉左边d 63 print str1.rstrip('d') #去掉右边d 64 #查找-------------------------------------end 65 66 #分割 67 print str1.split(' ') #把str分成一个list 68 #结果 69 ['Hello', 'Aaron'] 70 71 #大小写 72 print str2.lower() #小写 73 print str2.upper() #大写 74 print str2.swapcase() #大小写互换 75 print str2.capitalize() #首字母大写 76 #结果 77 i am andy 78 I AM ANDY 79 i AM aNDY 80 I am andy 81 82 #测试-------------------------------------start 83 print str1.startswith('H') #是否以H开头 84 print str1.endswith('n') #是否以n结尾 85 #结果 86 True 87 True 88 89 print str1.islower() #S中的字母是否全是小写 90 print str1.isupper() #S中的字母是否便是大写 91 print str1.istitle() #S是否是首字母大写的 92 #结果 93 False 94 False 95 True 96 97 print str1.isalnum() #是否全是字母和数字,并至少有一个字符 98 print str1.isalpha() #是否全是字母,并至少有一个字符 99 print str1.isdigit() #是否全是数字,并至少有一个字符 100 print str1.isspace() #是否全是空白字符,并至少有一个字符
10 换行