python学习笔记(二)
2016-08-21 13:15
260 查看
python学习
List和Tuple类型
创建List
python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。比如,用list表示:[‘Michael’,’Bob’,’Tracy’]
list是数学意义上的有序集合,也就是说,list中的元素都是按照顺序排列的。可以把list赋值给一个变量,就可以通过变量来引用list。
由于python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据类型。
L=['echo',100,True] print L
也可以有空list。
list操作
有正序访问还有倒序访问,跟数组元素的访问方式一样添加新元素,用append()方法,append()方法添加新元素市中市添加到list尾部。
L=['echo','Anna','Day'] L.append('Emma') #L=['echo','Anna','Day','Emma']
从list删除元素:用list的pop()方法,该方法不添加参数时总是删除list最后一个元素。当然也可以pop(2),pop(3),删除指定索引的元素
L=['echo','Anna','Day','Emma'] L.pop() #L=['echo','Anna','Day'] L.pop(1) #L=['echo','Day']
还可以给替换list中的元素,直接给list的中的元素重新赋值就行
Tuple
创建Tuple:tuple是一种有序的列表。中文翻译为”元组”。tuple一旦创建完毕,就不能修改了。创建tuple和创建list唯一不同之处是用()替代[],并且tuple没有appen(),insert(),pop()方法
创建单元素tuple,比如:t=(‘a’,’b’,’c’)
“可变”的tuple:t=(‘a’,’b’,[‘A’,’B’]) (tuple中可以包含list)
条件判断和循环
if 语句
python代码的缩进规则:python的习惯写法:缩进时4个空格,不要使用Tab,更不要混合Tab和空格。如果在python交互环境下敲代码,还要特别留意代码缩进,并退出缩进需要多敲一行回车。
if-elif-else,其中elif就是 else if
for循环
list或tuple可以表示一个有序集合,如果想依次访问一个list中的每一个元素,python的for循环就可以依次把list或tuple的每个元素迭代出来:L=['echo','Anna','Day'] for name in L: print name
pay attention to :name 这个变量是在for循环中定义的,意思是,依次取出list中的每一个元素,并把元素赋值给name,然后执行for循环(就是缩进的代码块)
while循环
N=10 x=0 while x<N: print x x=x+1
python同样也有break退出循环,continue继续循环
Dict和Set类型
dict
python中的dict其实就是键值对(key-value)表,dict有个len()函数可以计算任意集合的大小。d={ 'echo':95, 'Lisa':85, 'Anna':59 }
访问dict:可以简单地使用d[key]的形式查找对应的value,但如果key不在dict对象中,访问的话就会发生KeyError,要避免KeyError,有两个办法:
先判断key是否存在,用in操作符:
if 'echo' in d: print d['echo']
使用dict本身提供的一个get方法,在key不存在的情况下,返回None:
print d.get('echo') #95 print d,get('hello') #None
dic的特点:
查找速度快:无论dict有10个元素还是10万个元素,查找速度都一样;而list的查找速度随着元素增加而逐渐下降。
dict第二个特点是存储的key-value序对是没有顺序的(内部无序)。
作为key的元素必须不可变
dict的缺点:占用内存过大,还会浪费很多内容,list正相反,占用内存小,但是查找速度慢。
更新dict,如d[‘echo’]=76.
如果key已经存在,会用新的value代替原来的value
什么是set
dict的作用是建立一组key和一组value的映射关心,dict的key是不能重复的。而set持有一系列元素,这一点和list很像,但是set的元素没有重股份,而且无序。
创建set的方式是调用set()函数并传入一个list,list的元素将作为set的元素:
s=set(['A','B','C'])
set不能包含重复元素,如果传入包含重复元素的list,set会自动去掉重复的元素。
访问set:由于set存储的是无序集合,所以没法通过索引来访问,访问set中的某个元素实际上就是判断一个元素是否在set中
s=set(['echo','Anna','Day']) 'Anna' in s #Ture
set的特点:
set的内部结构和dict很像,唯一区别是不存储value,因此判断一个元素是否在set中速度很快
set存储的元素和dict的key类似,必须是不变的对象,因此,可变对象是不能放入set中的
最后,set存储的元素也是没有顺序的
遍历set:可通过循环实现
更新set:由于set存储的是一组无序的元素,一次更新set主要做两件事,一是把新的元素添加到set中,二是把已有元素从set中删除。
添加元素时,用set的add()方法,如果添加的元素已经存在于set中,add()不会报错,但是不会把元素添加进去。
删除set中的元素,用set的remove()方法,如果删除的元素不再set中,remove()会报错。
所以,add()方法可以直接添加,而remove()前需要判断
函数
什么是函数:借助抽象,才能不关心底层的具体计算过程,而直接在更高层次上思考问题。写计算机程序也一样,函数就是最基本的一种代码抽象的方式。python不但能非常灵活的定义函数,而且本身内置了很多函数,只需要知道函数的名称和参数。详情参考python官方网站:https://docs.python.org/2/library/index.html
编写函数:在python中,定义一个函数要用def语句,依次写出函数名、括号、括号中的参数和冒号;然后,在缩进块中编写函数体,函数的返回值用return语句返回,例如:
def my_abs(x): if x>=0: return x else return -x
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None
python中定义的函数可以返回多值,比如:
import math def move(x,y,step,angle): nx=x+step*matn.cos(angle) ny=y+step*math.sin(angle) return nx,ny
这样就可以同时获得返回值:
>>>x,y=move(100,100,60,math.pi/6) >>>print x,y
用print打印返回结果,会发现返回值是一个tuple
递归函数
递归函数,比如:def fact(n): if n==1: return 1 return n*fact(n-1)
pay attention to:使用递归函数要防止栈溢出
在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧,由于栈帧的大小不是无限的,所以递归调用的次数过多,就会导致栈溢出。
用递归函数实现汉诺塔:
def move(n,a,b,c): if n==1: print a,'-->',c return move(n-1,a,b,c) move(1,a,b,c) move(n-1,b,a,c)
调用这个函数
>>>move(4,'A','B','C')
定义默认参数
函数的默认参数是简化调用,比如:def power(x,n): s=1 while n>0: n=n-1 s=s*x return s
假设计算平方的次数最多,就可以吧n的默认值设定为2:
def power(x,n=2): s=1 while n>0: n=n-1 s=s*x return s
这样一来就不需要传入两个参数了,但默认参数只能定义在必需参数的后面。
定义可变参数
如果下个让一个函数接受任意个参数,就可以定义一个可变参数def fn(*args): print args
可变参数的名字前面有个*号,我们可以传入0个,1个或多个参数给可变参数:其实,python解释器会把传入的一组参数组装成一个tuple传递给可可变参数,因此,在函数内部直接把变量args看成一个tuple就好了。
相关文章推荐
- Python学习笔记:Python Language Features
- Boost.Python学习笔记
- Python 学习笔记 - 4.if 表达式
- python文件读写实例学习笔记
- Python 学习笔记(1)
- python(异常处理机制,学习笔记摘要)
- python学习笔记(1)
- python学习笔记,整形,字符串
- Python学习笔记1
- Python学习笔记
- if __name__ (python学习笔记一,注意前面是双下划线)
- python学习笔记(二)
- python学习笔记(2)
- python学习笔记1
- Python学习笔记(一)
- [原创]Ruby学习笔记(4)-闰年、季节和月份天数的Ruby版和Python版
- Python学习笔记 Module
- Python 正则式学习笔记
- Python 学习笔记 - 2.自省