内置函数之一:lambda表达式
前面知识回顾:
三目运算:
#普通条件语句
1: if 1 == 1:
2: name ='曹小贱'
3: else:
4: name = '曹高田'
#使用三目运算
1: name1 = '曹小贱' if 1 == 1 else '曹高田'
同样的简单的函数也可以使用一种简单的方式,即:lambda表达式
普通函数:
1: def func(arg):
2: return arg + 1
3: result = func(100)
4: print result
lambda函数:
1: func1 = lambda a: a + 1
2: result1 = func1(200)
3: print result1
特性:
1:处理简单逻辑的函数
2:自动返回数据,默认使用return
内置函数之二:map函数
遍历序列,对序列中的每个元素进行操作,最终获取到新的序列。
范例:
1: li = [11,22,33,343]
2: def func(a):
3: return a + 10
4: new_li = map(func,li)
5: print new_li
范例:二个序列相加
1: li = [11,22,33,343]
2: li_1 = [1,2,3,4]
3: new_li = map(lambda a,b:a+b,li,li_1)
4: print new_li
内置函数之三:filter函数
对序列的中的元素进行筛选但是只取内容为真的值
1: li = [11,22,33,343,0,""]
2: print filter(None,li)
3: 结果:[11, 22, 33, 44, 55, 66]
4: print filter(lambda a:a>33,li)
5: 结果:[44, 55, 66]
注释:
0:它是None;空字符串也是None
内置函数之四:reduce
对序列中的元素进行累计操作
特性:
# reduce的第一个参数,函数必须要有两个参数
# reduce的第二个参数,要循环的序列
# reduce的第三个参数,初始值
范例:
1: li = [11,22,33,343]
2: result = reduce(lambda a,b:a + b,li)
3: print result
4: 结果:409
范例二:
1: li = [11,22,33,343]
2: result = reduce(lambda a,b:a + b,li,1000)
3: print result
4: 结果:1409
注释:
给定一个初始值,从1000开始加,想当于1000+第一个数字,然后再加第二个数字
yeild生成器
当执行yeild的时候吗,首先冻结函数,记住冻结的位置,下次执行的时候,直接从冻结的地方开始继续执行。
实例一:不带参数
1: def func():
2: yield 1
3: yield 2
4: yield 3
5: for i in func():
6: print i
7: 结果:1 2 3
实例二:带参数
1: def func(arg):
2: seed = 0
3: while True:
4: seed += 1
5: if seed > arg:
6: return
7: else:
8: yield seed
9: for i in func(4):
10: print i
11: 结果: 1 2 3 4
装饰器
装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和后添加相应的操作
注释:
一定要搞清楚,函数中的返回值是一个函数还是一个对象(函数的内存地址)
范例一:
1: def wrapper(arg):
2: if login("cgt"):
3: return arg
4: def login(user):
5: if user == "cgt":
6: return True
7: else:
8: print "invalid username"
9: def home():
10: print "showing the home page"
11:
12: home = wrapper(home)
13: home()
14: 结果:showing the home page
注释:
1:函数home直接写,什么都不加,是他的内存地址。
2:使用wrapper函数将home的内存地址传给arg
3:在wrapper中调用login函数进行用户名的判断
执行过程:
1:home = wrapper(home),括号中的home是home函数的内存地址,wrapper函数将home的内存地址当作一个实参传递给形参,传给arg。
2:调用wrapper函数执行,函数中调用login函数,login函数传入的实参cgt传递给login的形参user。执行login函数,判断是否正确,正确返回True给wrapper函数,不正确输出“invalid username”。
3:wrapper函数接收到login的True返回值后,继续执行,返回arg(还是home函数的内存地址)
4:home = wrapper(home)接收到wrapper的返回值,home函数的内存地址,将其赋值给home。
5:home()。执行home函数。
范例二:
1: def wrapper(arg):
2: if login("cgt"):
3: return arg
4: def login(user):
5: if user == "cgt":
6: return True
7: else:
8: print "invalid username"
9: @wrapper
10: def home():
11: print "showing the home page"
12: home()
注释:
@wrapper 等于 home = wrapper(home)
范例三:
带参数的装饰器
1: def wrapper(func):
2: def wrappre2(*args,**kwargs):
3: user = args[0]
4: if user == 'cgt':
5: return func(*args,**kwargs)
6: else:
7: return error(user)
8: return wrappre2
9:
10: def error(user):
11: print "authentication failed"
12:
13: @wrapper
14: def home(username):
15: print "showing the home page",username
16:
17: @wrapper
18: def host_list(username,host):
19: print "showing the user list page",username,'',host
20:
21: home('cgt')
22: host_list('cgt','192.168.1.1')
23: 结果:
24: showing the home page cgt
25: showing the user list page cgt 192.168.1.1
注释:
1:home和host_list函数调用的时候,因为他们的函数前面有装饰器,所以要先通过装饰器函数。
冒泡算法
范例:
两个数值或者字符串的进行交换,使用中间变量进行过度
1: li = [99,22,44,11,77,23]
2: print len(li) #6
3: for x in range(1,len(li)):
4: #循环的x等于1,2,3,4,5
5: for y in range(len(li)-x):
6: #循环的y等于5,4,3,2,1
7: num1 = li[y]
8: num2 = li[y+1]
9: if num1 > num2:
10: tmp = num1
11: li[y] = num2
12: li[y+1] = tmp
13: print li