1 Python基础

1 下载及安装

下面以windows为例

  • 下载:https://www.python.org/downloads/windows/
  • 安装:一路next
  • 环境变量:C:\Python27;C:\Python27\Scripts;
  • 测试:python -v

pycharm professional

2 简单程序

 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             -- 设置字符集
View Code

 3 编码风格

  • 大小写敏感
  • 顶头开始写代码
  • 缩进:统一缩进,用Tab
  • 标识符:包含数字、字母、下划线;只能字母、下划线开头
  • 常量:全部大写

4 注释

  • 单行注释:#
  • 多行注释:'''

5 数据类型

不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象。

对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象。

可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象。

变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,

即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

查看内存地址函数:id()

查看数据类型函数:type()

5.1 不可变类型

内存地址变化,且不过不再使用的内存会被垃圾回收器回收

 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
View Code

 5.2 可变类型

地址是不变的,只是地址中的内容变化了且地址得到了扩充

 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 ['关羽', '张飞', '赵云', '马超', '黄忠']
View Code

 5.3 类型转换

5.4 元组

元组不可以修改,一般当作常量来使用。但元组可以进行连接和删除

 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
View Code

5.5 列表

 列表是一组有序项目的集合,它可变的数据类型,可以进行增删改查

 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']
View Code

 5.6 字典

字典是键值对的集合,它是无序的,通过键值来访问,键值必须唯一

 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
View Code

 5.7 集合

集合是无序不重复的,因为无序所以没有索引

 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
View Code

6 分支

 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 优秀
View Code

7 循环

 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
View Code

 8 函数

函数是组织好的,可重复使用的代码段。

 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)
View Code

9 字符串

  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()  #是否全是空白字符,并至少有一个字符 
View Code

 10 换行

 

posted on 2017-03-18 15:06  栗子测试  阅读(303)  评论(0编辑  收藏  举报