python学习笔记(四)

一、冒泡算法
思路:
1、先求出最大值,放在最后,从第一个值开始(m),和它后面的一个值m+1进行比较,把较大的值放在后面,这样,循环len(li)-1此,就能得出最大值,放在了列表的最后。,所以第一次循环是循环了len(li)-1次。
2、第二次循环是排除最后一个值不用算了,把最大的值放在倒数第二个,所以循环len(li)-2次
3、以此类推,知道最后一次循环,也就是m为li(0)和第二个数比较,所以就是for m in len(0);
4、写那么多for循环很麻烦,所以设定一个n值,n为{1,列表的所有个数len(li)}
5、需要注意的是,两个数交换位置的时候,需要用一个临时变量。
代码:
 1 li = [34,11,4,99,45,12,1]
 2 for n in range(1,len(li)):
 3     for m in range(len(li)-n):
 4         num1= li[m]
 5         num2=li[m+1]
 6         if num1 > num2:
 7             temp= li[m]
 8             li[m]=num2
 9             li[m+1]=temp
10 print li
 
二、lambda函数
特殊的声明函数方式,用于创建新的函数对象,并且在运行时返回函数对象
lambda是一个表达式,而不是一个语句
lambda主体是一个单个的表达式,而不是一个代码块
用于定义小型的函数,在函数中仅包含单一的参数表达式,而不能包含其他语句,但是可以调用其他函数
特点:
处理简单逻辑
自动return
 
开始都这样用:
1 def func(arg):
2     return arg - 1
3 func(1)
4 result1 = func(199)
5 print "def 形式:",result1
用lambda实现:
1 func2=lambda a : a+1
2 result2 = func2(199)
3 print "lambda : ",result2
4  
5 #lambda传入多个参数
6 func3=lambda a,b : a+b
7 result3=func3(100,100)
8 print "多个参数",result3

 

 
三、map()函数
定义:
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
作用:对每一个元素都进行操作
1 li = [33,55,77]
2 def func1(arg):
3     return  arg + 10
4 new_list=map (func1,li)
5 print new_list

 

内部实现
1 new_list=[]
2 for item in li:
3     new_item=item+10
4     new_list.append(new_item)

#传两个列表
1 l1= [11,22,33]
2 l2=[3,4,5,]
3 def func2(a1,a2):
4     return a1+a2
5 print map(func2,l1,l2)

 


#同时遍历第一个和第二个值;
#如果值为空,则是none,没法相加会报错

#lambda方式
print map(lambda a1,a2:a1+a2,l1,l2)

 

 
四、filter()函数
作用:过滤,获取指定元素集合
li= [11,22,33,44,55,0]
print filter(lambda a:a>33,li)   ==>[44, 55]

 

五、reduce()函数
作用:累计操作
1 li=[1,2,3,4,5,6,7,8]
2 print reduce(lambda a1,a2:a1+a2 ,li)   ===》36
3 print reduce(lambda a1,a2:a1+a2 ,li,10000)   ===》10036    #10000是基准参数

 

六、yield生成器
冻结在上一次的操作点,下次再执行时,继续执行
 1 def func(arg):
 2 seed= 0
 3 while True:
 4      seed=seed+1
 5      if seed >arg:
 6          return
 7      else :
 8          yield seed
 9 for i in func(3):
10     print i
11 ==12 1
13 2
14 3

 

七、装饰器
定义:
在函数调用前后增加功能,但又不更改源代码,也不改变函数的调用方式,这种在代码运行期间动态增加功能的方式,称为装饰器( Decorator )。
 1 def wrapper(func):
 2     def login():
 3         user=raw_input("input user name:")
 4         if user=="name":
 5             func()
 6         else:print "invalid user"
 7     return login
 8 
 9 @wrapper
10 def home():
11     print "welcom to the homepage"
12 
13 home()

 

posted @ 2015-11-19 23:32  大亮头  阅读(105)  评论(0)    收藏  举报