Python的入门
一、python中的数据类型
1.1 整数
Python可以处理任意大小的整数,包括负整数,例如:1,100,-8080
1.2 浮点数
浮点数也是小数,例如:1.23,3.2
整数和浮点数在计算机内部存储的方式是不同的整数运算永远是精确的,而浮点数运算则可能会有四舍五入的偏差
1.3 字符串
字符串是以'',或者""括起来的文本,比如‘abc’等
1.4 布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有true。false两种值,要么是true,要么是false,在Python中可以直接用True,False表示布尔值,也可以通过布尔运算计算出来
布尔值可以用and,or,not运算
1.5 空值
空值是Python里的一个特殊值,用none表示,Node不能理解为0,因为0是有意思的,而none是一个特殊的空值
此外Python还提供了列表,字典等多种数据类型,还允许创建自定义类型
二、Python之print语句
print语句可以向屏幕上输出指定的文字
- 我们在Python交互式环境下编写代码时,>>>是Python解释器的提示符,不是代码的一部分
- 当我们在文本编辑器中编写代码时,不能自己添加>>>
- print 语句也可以跟上多个字符串,用逗号隔开,就可以连成一串输出
- print 会依次打印每个字符,遇到逗号会输出一个空格
三、Python的注释
- 注释是用来说明代码的
- Python 的注释以#开头,后面的文字知道行尾都算注释
- 注释还可以把我们不想运行,但又不想删除的代码暂时屏蔽掉
四、 Python中什么是变量
- 在Python中。变量的概念基本上和初中代数的方程式变量一样。例如,对于方程式y=x*x,x就是变量
- 在python程序中,变量是用一个变量名表示,变量名必须是大小写英文、数字和下划线的组合,且不能用数字开头
- 在python中,等号是赋值语句,可以吧任意数据类型赋值给变量,同一个变量可以反复赋值。而且可以是不同类型的变量
五、Python中定义字符串
- 如果字符串中既包含' 又包含",这个时候就需要对字符串的某些特殊字符进行转义,Python字符串用\进行转义
- 常用的转义字符还有\n 表示换行
+\t 表示一个制表符 - \ 表示\ 字符本身
5.1 python中raw字符串与多行字符串
- 如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦,为了避免这种情况,我们可以在字符串前面加个前缀r,表示这是一个raw字符串,里面的字符就不需要转义了
- 如果是多行字符串可以用'''...''',也可以在多行字符串前面加r,把这个多行字符串变成一个raw字符串
5.2 Python中Unicode字符串
- Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0即可
- 用Unicode表示的字符串用u'...'表示
- Unicode除了多了一个u之外和普通的字符串没啥区别
- 如果中文字符串在Python环境下遇到UnicodeDecodeError,这是因为.py文件保存的格式有问题,可以在第一行添加注释
--coding:utf-8 --,目的是告诉Python解释器,用UTF-8编码读取源代码,然后用Notepad++另存为并选择UTF-8格式保存
六、 Python中的list
- python内置的一种数据类型时列表:list,list是一种有序的集合,可以随时添加和删除其中的元素
- 由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据
- list索引从0开始,可以通过索引访问list
- 倒序索引,-1表示最后一个,-2表示倒数第二个
6.1 添加新元素
append(),总是把新的元素添加到list的尾部
insert(),接收两个参数,第一个是索引号,第二个是待添加的新元素
6.2删除元素
pop(),总是删除list的最后一个元素,并且还返回这个元素,接收参数时,参数是要删除元素的索引
6.3替换元素
可以根据索引找到要替换的元素,并给他赋值
七、 Python之创建tuple
- tuple是另一种有序的列表,tuple和list相似,但是tuple一旦创建完毕,就不能修改了
- 用()替代了[]
- 可以根据索引
- 单元素的tuple t=(1,),如果是多元素的tuple加不加这个额外的,效果是一样的
八、 条件语句和循环语句
8.1 if语句
age=20
if age>=18:
print 'your age is',age
print 'adult'
print END
注意:
- Python代码的缩进规则,具有相同缩进的代码被视为代码块
- 缩进是4个空格,不能使用tab,否则很容易造成因为缩进引起的语法错误
- if语句后结表达式,用:表示代码块开始
- 如果在Python交互环境下敲代码,在退出缩进需要多敲一行回车
if嵌套
if age >= 18:
print 'adult'
else:
if age >= 6:
print 'teenager'
else:
if age >= 3:
print 'kid'
else:
print 'baby'
8.2 for循环
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
8.3 while循环
和for循环不同的另一种循环是while循环,while循环不会迭代list或tuple的元素,而是根据表达式判断循环是否结束
N = 10
x = 0
while x < N:
print x
x = x + 1
while循环每次先判断x<N,如果为true,则执行循环体的代码,否则,退出循环
用for循环或者while循环时,如果在循环体呢直接退出循环,可以使用break语句
8.4 continue 继续循环
在循环过程中,可以用continue跳过后续循环代码,继续下一次循环
九、 DIct和Set类型
- Python中的dict用来存放key和value对应的值的
花括号{}表示这是一个dict,然后按照key:value写出来即可,用len()可以计算出dict的长度 - 可以使用d[key]的形式来查找对应的value,只要key存在就返回对应的value,如果key不存在,会直接报错keyError
- 可以用dict本身的一个get方法,在Key不存在的时候返回none
9.1 dict的特点
- dict的第一个特点是查找速度快,而list的查找速度随着元素增加而逐渐下降,dict的缺点是占用内存大,由于dict是按key查找,所以,在一个dict中,key不能重复
- 存储的key-value序对是没有顺序的
- 作为key的元素必须不可变
- d['Paul']=73;可以把新的key-value添加进去,如果key已经存在,在赋值会用新的value替换原来的value
9.2 dict 的遍历
直接使用for循环遍历dict的key,由于通过key可以获取对应的value
9.3 什么是set
如果只需要用dict中的key,就用set,set持有一系列元素,这一点和list很像,但是set的元素没有重复,而且是无序的
创建set的方式是调用set()并传入一个list,list的元素将作为set的元素
s=set(['A','B','C'])
如果传入的list包含重复的元素,set会自动去掉重复的元素
9.4 访问set
访问set中的某个元素,实际上就是判断一个元素是否在set中
'Bart' in s
True
此时严格区分大小写
9.5 set的特点
- set存储的元素是没有顺序的
- set存储的元素必须是不可变的
- 判断一个元素是否在set中的速度很快
9.6 遍历set
可以通过for循环来遍历
s=set(['Adrtg','Lisa','Bart'])
for name in s:
print name
for循环在遍历set时,元素的顺序和list的顺序很可能是不同的,而且不同的机器上运行的结果也可能不同
9.7 更新set
用set的add()方法
s=set([1,2,3])
s.add(4)
print s
set([1,2,3,4])
如果添加的元素已经存在在set中,add()不会报错,但是不会加进去了
删除用remove()
s = set([1, 2, 3])
s.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4
如果删除的元素不存在,remove()会报错
十、函数
- Python内置了很多有用的函数,可以直接调用
- 要调用一个函数需要知道函数的名称和参数
- 调用函数的时候,如果传入的参数数量不对,会报typeError的错误,并且Python会明确告诉你:abs()有且仅有一个参数
10.1 编写函数
Python中,定义一个函数要使用ref语句,依次写出函数名,括号,括号中的参数和冒号,然后在缩进块中编写函数体,函数的返回值用return语句返回
def my_abs(x):
if x>=0:
return x
else:
return -x
注意:函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回,因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑
如果没有return语句函数执行完毕后也会返回结果,只是结果为none
10.2 Python函数之返回多值
math包提供了sin()和cos()函数,我们先用import引用
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
递归函数的优点是定义简单,逻辑清晰,使用递归函数需要注意防止栈溢出,在计算机中函数调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧,由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出
10.3 定义默认参数
Python自带的int()函数,第一个参数是传入的数,第二个参数是转换进制
函数的默认参数的作用是简化调用,只需要把必须的参数传进去,在需要的时候,又可以传入额外的参数来覆盖默认参数值
10.4 定义可变参数
- 如果想让一个函数接手任意个参数,我们就可以定义一个可变参数
- 可变蚕食的前面有个*号,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,在函数内部直接把变量args看成一个tuple就好了
十一、切片
11.1 对list进行切片
取一个list的前3个元素L[0:3],如果第一个索引是0,可以省略,只用一个:表示从头到尾
切片还可以指定第三个参数,表示每N个取一个
11.2 倒序切片
对于list,Python支持L[-1],取倒数第一个元素,那么它同样支持倒数切片
L[-4:-12]
11.3 对字符串切片
字符串也可以用切片操作,只是操作结果仍是字符串
'ABCDEFG'[:3]
'ABC'
'ABCDEFG'[-3:]
'EFG'
'ABCDEFG'[::2]
'ACEG'
在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。
十二、 迭代
在python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或或tuple,这种遍历叫做迭代,在python中迭代是通过for...in来完成的
- 迭代操作就是对于一个集合,无论该集合是有序还是无序,都可以用for循环来取出集合的每一个元素
- 索引迭代也不是真的按索引访问,而是由enumerate()函数自动把每个元素变成(index,element),这样的tuple,再迭代,就同时获得了索引和元素本身
- dict对象有一个values()方法,这个方法把dict转换成一个包含所有value和list,这样我们迭代的就是dict的每一个value
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.values()
[85, 95, 59]
for v in d.values():
print v
85
95
59
- 还有一个itervalues()方法,用itervalues()方法替代values()方法,迭代效果完全一样
- dict的items()方法,
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]
- 迭代
for key, value in d.items():
... print key, ':', value
...
Lisa : 85
Adam : 95
Bart : 59
十三、 列表
13.1生成列表
range(1,11)
range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]