Python入门阶段总结

Python入门阶段总结

1. 数据类型

整数(正负,与数学上一样,0x十六进制)、浮点数(科学计数法)、字符串、布尔型(True/False,and/or/not)、空值(特殊的值,None),除此之外,还有列表、字典等多种数据类型,还允许创建自定义数据类型。

2. 变量

变量名:英文、下划线、数字的组合,数字不能开头;

变量本身类型不固定,不需要制定数据类型,是动态语言,更灵活;

a=’ABC’ : (1)在内存中创建了一个’ABC’的字符串;(2)在内存中创建了一个名为a的变量,并把它 指向 ‘ABC’

3. 字符串

字符串用\进行转义,转义字符\不计入字符串的内容中

\n 表示换行
\t表示一个制表符
\\表示\字符本身

raw 字符串:解决太多转义字符的麻烦,在字符串的前面加上一个前缀r,里面的字符就不需要转义了

”’… …”’ 多行字符串的表示

u’… …’ Unicode表示的字符串

print u’中文’ 不添加u,中文就不能正常演示

# -*- coding: utf-8 -*- 表示告诉解释器用UTF-8编码读取源代码

4. 列表 List

内置数据类型,[],有序集合,可增删元素;

empty_list = [];

元素可以不为同一种数据类型,因为python是动态语言;

按索引访问,从0开始索引:L[0];倒序访问,L[-1]:最后一个元素;都不能越界;

L.append():新元素追加在list末尾;
L.insert(索引号,新元素):索引位置上添加为新元素,原来的旧元素及其后面的元素自动往后移动一位;
L.pop():删掉list的最后一个元素,并且还返回这个元素;
L.pop(索引号):删除索引号所对应的元素;
替换:赋值成(指向)新的元素即可,L[-1]='new one';

5. 列表 tuple

元组,有序,tuple一旦创建不可修改,()

**没有**append、insert、pop方法;

可以用索引方式访问元素,但不能赋值,print t[-1];

empty_tuple = ()

one_tuple = (1,):单元素tuple要加一个逗号“,”,避免歧义;

强调:tuple的“不能变”是指它的每个元素的指向永远不变

6. 循环

list/tuple都是有序的集合,用循环依次访问元素(for循环把每个元素迭代出来)for name in list:依次取出每一个元素并赋值给name这个变量;

while循环不会迭代list或者tuple的元素,而是根据表达式判断循环是否结束,要特别留意while的循环推出条件;

break;/continue;

循环内部可以嵌套循环;

7. dict

集合,键-值对,key-value,花括号{};

len()函数:计算任意集合的大小(有几个键值对);

访问dict的值:d[key]返回对应的 value;

用in操作符判断是否存在key:if ‘key’ in d: …

dict本身提供一个get方法,key不存在的时候返回None;

dict的特点

  1. 查找速度快,无论元素多少,查找速度都一样快(而list的查找速度随着元素的增加而逐渐下降);
  2. 占用内存大,浪费很多内容,list正好相反;
  3. dict按key查找,key不能重复
  4. 存储的key-value序对是没有顺序的,和list不一样,dict内部是无序的,无序的无序的无序的,重要的说三遍;
  5. 作为key的元素必须不可变,value是否可变无所谓,Python的基本类型如:字符串、整数、浮点数都是不可变的,可以作为key,list是可变的则不可以作为key;
  6. 最常用的key是字符串,因为用起来方便

更新dict

dict是可变的,随时可以添加新的key-value,用赋值语句:d[‘new key’] = new value;如果key已存在,原来的value会被替换掉;

遍历dict

for key in d:
    print key,':',d.get(key)

8. Set

只关心key,不关心value,保证元素不重复;

Set的元素没有重复,内部存储的元素是无序的;

调用set(),传入一个list,list的元素作为set的元素:s=set([‘A’,’B’,’C’]);

set会自动去掉list中重复的元素;

访问set

无索引,实际上是“判断元素是否在set中”,in 操作符;

元素区分大小写;

特点

被阉割的dict,因为不存储value,因此,判断一个元素是否在set中速度很快,set的元素类似于dict的key,是不变对象,set存储的元素没有顺序

weekdays = set([‘MON’, ‘TUE’, ‘WED’, ‘THU’, ‘FRI’, ‘SAT’, ‘SUN’])

遍历set

是集合,for循环遍历实现,for name in s:

更新set

添加元素:add(),可以直接用

删除元素:remove(),使用之前需要判断

9. 函数

抽象,def my_fun(x):…

没有return语句,执行完毕也会返回结果,只是结果是None;return None = return

可以返回多值:在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便

import math

递归函数:一个函数在内部调用自身本身,定义简单,逻辑清晰,注意防止栈溢出;

函数调用是通过 栈(stack)这种数据结构实现的,每进入一次函数调用,栈就会加一层 栈帧,每当函数返回,栈就会减一层栈帧。

定义函数的时候可以有默认参数(可以看成是赋值的常量参数),函数参数从左到右的顺序匹配。默认参数只能定义在必需参数的后面

可变参数:def fn(*args):… Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了

10. 切片(Slice)

对list切片
L[0:3] 从索引开始取,直到索引到3为止,但不包括索引3,(取出的个数为两索引值相差),可以省略第一个为0的索引,L[:3];

L[:] 从头到尾,复制整个list;

L[::N] 每N个取一个;

list换成tuple,切片操作完全相同,只是结果也是tuple了;

倒序切片 L[-3:-1:2] 输出也是从左到右的顺序,-3的到最后一个,每隔2个选一个;最后十个数:L[-10:];

记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引;

对字符串切片

操作结果仍是字符串 ‘abcdefg’[:3] → ‘abc’

方法 upper() 可以把字符变成大写字母:’abc’.upper()

11. 迭代

list和tuple用for循环来遍历我们称之为迭代(Iteration)

迭代操作就是:对于一个集合,无论该集合是有序还是无序,我们用for循环总是可以依次取出集合的每一个元素。注意:集合是指包括一组元素的数据结构,目前学到了包括:

有序集合:list,tuple,str,unicode;
无序集合:set
无序集合并且有key-value对:dict

迭代是一个动词,它是指一种操作,在Python中,就是for循环。

迭代与按下标访问数组最大的不同,后者是一种具体的迭代实现方式,而前者只关心迭代后果,根本不关心迭代在内部是如何实现的。

迭代永远是取出元素本身,而非元素的索引

关于enumerate()函数,可以在for循环中同时绑定索引index和元素name,实际上,enumerate()函数把:['Adam','Lisa','Bart','Paul']换成了[(0,'Adam'),(1,'Lisa'),(2,'Bart'),(3,'Paul')],迭代的每一个元素实际上是一个tuple:

for index,name in enumerate(L):
    print index,'-',name

所以说,可见,索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。

关于zip()函数,可以把两个list变成一个list:

>>> zip([10,20,30],['A','B','C'])
    [(10,'A'),(20,'B'),(30,'C')]

迭代dict的value

dict本身对象就是可迭代对象,for循环每次拿到dict的一个key。

dict对象有一个values()方法,把dict转换成一个包含所有value的list,迭代的就是dict的每一个value:d={} print d.values()

itervalues()

values()方法实际上把一个dict转换成了包含value的list;
itervalues()方法不会转换,它会在迭代过程中依次从dict中取出value,所以itervalues()方法比values()方法节省了生成list所需的内存。

迭代dict的key和value

dict()的items()可以把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:

for key,value in d.item():

itemvalues()不把dict转换成list,而是在迭代中不断给出tuple,所以,iteritems()不占用额外的内存。

12. 列表生成式

Python特有的列表生成式,[x*x for x in range(1,11)]

http://blog.csdn.net/heartyhu/article/details/50988007

不改动range()的情况下,可以加上if来筛选

PS:有两个函数了解一下

  1. isinstance(x,str) 可以判断变量x是否是字符串;
  2. upper()方法返回大写的字母;

for 循环可以嵌套,[m+n for m in ‘ABC’for n in ‘123’] 这个就生成了全排列[‘A1’, ‘A2’, ‘A3’, ‘B1’, ‘B2’, ‘B3’, ‘C1’, ‘C2’, ‘C3’]

你可能感兴趣的:(python,学习笔记)