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个字符。

四、布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有TrueFalse两种值,要么是True,要么是False,在Python中,可以直接用TrueFalse表示布尔值(请注意大小写),也可以通过布尔运算计算出来。

布尔值可以用andornot运算。

五、空值

空值是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'多重循环





     

~越努力越幸运~
原文地址:https://www.cnblogs.com/xtlyf1314/p/4665044.html