python入门
第一次接触到python这个概念还是在2013年在锐捷网络做实习生的时候,当时因为项目测试需要,有提出想用python进行自动化测试,但是由于项目的实际需要,后面最终没有用,也就搁置了python的学习,自己载了python的教程,也是看的零零碎碎的,最近一直在思考自己应该做什么,迷茫,好像很多语言很多工具需要自己去学习,但又精力不够,最新的想法是与其去和那些培训或者门槛低的人去抢android的饭碗,不如在自己C++编程的基础上,学习少数人会去学习的语言,就像java语言一样,很多人都说会用java语言编程,但是真正能深入理解其机制和原理的,估计不多,多的是用框架去编写项目。
python:简洁,优雅,快捷
简洁到变量可以不用定义直接用,可以调用很多函数,方便移植,对数据的处理速度快,但是耗内存
我学习python的时候,感觉这就像是在看小学生的作业,当然只是刚学习到了基础部分,还没有进阶到高阶,加了个python开发群,去群里问了有没什么好的IDE,热心的人说pycharm不错,载下来发现这就是传说中的大蟒蛇,果然给力。
整理了下python的入门知识。
1.变量和数据类型
1.1 数据类型
在Python中,能够直接处理的数据类型有以下几种:
一、整数
Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样。
二、浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10^9和12.3x10^8是相等的。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
三、字符串
字符串是以''
或""
括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'
只有a,b,c
这3个字符。
四、布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有True
、False
两种值,要么是True
,要么是False
,在Python中,可以直接用True
、False
表示布尔值(请注意大小写),也可以通过布尔运算计算出来。
布尔值可以用and
、or
和not
运算。
五、空值
空值是Python里一个特殊的值,用None
表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
对比与C语言,可以发现很多的不同,最大的不同就是更加抽象化和口语化
1.2 变量
在Python程序中,变量是用一个变量名表示,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,
a = 123 # a是整数 print a a = 'imooc' # a变为字符串 print a
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。
静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下(// 表示注释):
int a = 123; // a是整数类型变量 a = "mooc"; // 错误:不能把字符串赋给整型变量
和静态语言相比,动态语言更灵活。
1.3 注释
单行注释用“#”
C语言用/**/或//
2.list和Tuple类型
2.1 list:列表,有序的集合,由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据,用[元素]。
顺序访问list:需要特别注意的是,索引从 0 开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,以此类推。
倒序访问list:最后一个元素的索引是-1,以此类推。
类似于数组的访问
添加元素:用函数append(i),如:L.append("hello"),用函数insert(i,h),如:L.insert(0,"hello")在L的第一个位置添加“hello”元素,其他元素自动移位,比数组的添加简单多了。
删除元素:用函数pop(i),删除第i个元素,当用pop()时表示删除最后一个元素,其他元素自动移位。
替换元素:直接针对位置替换,如:L(2)="HEllo",将原本第三个位置的元素替换为“HEllo”
2.2 Tuple:有序的列表,我们称为“元组”,tuple一旦创建完毕,就不能修改,创建tuple和创建list唯一不同之处是用( 元素)
替代了[ ]。
但是当Tuple里面的元素是可变的集合,比如list时,list对应的元素可以进行修改,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的。
3.条件判断和循环
3.1 if :冒号表示对应的代码块
要缩进
elif :
要缩进
else:
要缩进
3.2 for name in L :
要缩进,不需要什么++之类的,比C简单很多
3.3 while x<N:
add code要缩进
x+=1或x=x+1
3.4 退出循环
break:后续循环 continue:当次循环
4.Dict和SET
4.1 dict:key-value,类似于map,用{元素},并且key不能重复。
4.1.1 当访问value的时候,要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d: print d['Paul']
如果 'Paul' 不存在,if语句判断为False,自然不会执行 print d['Paul'] ,从而避免了错误。
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:print d.get('Bart')
4.1.2 dict特点:1.查找速度快,无论数据量多少,当然是以消耗内存为代价的,list正好相反,占用内存小,但是查找速度慢。2. 存储的key-value序对是没有顺序的,所以可能每次打印出来的dict都不一样。3.作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key
4.1.3 添加和更新元素:直接采用赋值语句
4.1.4 遍历:for循环,如:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } for key in d: print key
4.2 set: 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
set里面的元素大小写敏感,而且访问时可以用:in 进行判断元素是否存在。
Bart是该班的同学吗?
>>> 'Bart' in s True
bart是该班的同学吗?
>>> 'bart' in s
False
4.2.1 set的特点:
set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
最后,set存储的元素也是没有顺序的。
4.2.2 遍历:for name in set:进行遍历
4.2.3 更新:采用add()直接添加,判断后再用remove()删除
5.函数
在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。如果没有return语句,函数执行完毕后也会返回结果,只是结果为 None。Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
5.1 定义默认参数:由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面,请定义一个 greet() 函数,它包含一个默认参数,如果没有传入,打印 'Hello, world.',如果传入,打印 'Hello, xxx.'其中world设置为默认参数。
5.2 定义可变参数:
如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:
def fn(*args): print args
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数。
Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 。例如:求任意数的平均值
6.对list进行切片:L[0:10],L[::2],L[0:-1],L[4:50:5]
7.迭代:Python中,迭代永远是取出元素本身,而非元素的索引。
7.1 list迭代索引:使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。实际上,enumerate() 函数把:
['Adam', 'Lisa', 'Bart', 'Paul']
变成了类似:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
enumerate()函数和zip函数的功能类似,只是zip可以指定索引,而enumerate()函数默认从索引0开始。
zip()函数可以把两个 list 变成一个 list:
>>> zip([10, 20, 30], ['A', 'B', 'C']) [(10, 'A'), (20, 'B'), (30, 'C')]
7.2 dict迭代获取values:
用dict.values()或dict.itervalues()可以获取dict的所有values值。
1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
7.3 dict迭代key和values:
for key, value in d.items(): ... print key, ':', value
用函数items()或iteritems()
8.列表生成式:列表生成式则可以用一行语句代替循环,如:
[x * x for x in range(1, 11) if x % 2 == 0]条件过滤
[m + n for m in 'ABC' for n in '123'多重循环