lambda表达式
学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:
# 普通条件语句 if 1 == 1: name = ‘luotianshuai‘ else: name = ‘shuaige‘ # 三元运算 name = ‘luotianshuai‘ if 1 == 1 else ‘shuaige‘ #这个就是if else的一个简写。 #if 条件成立的时候name为‘luotianshuai‘ 不成立的时候为:‘shuaige‘ ,语法糖!
那么函数有没有他的简写呢?也是有的lambda表达式!
lambda 和if else的三元运算一样,是为了简化函数,但是:
1、只能做简单的操作
2、自动return
看下面两个函数的对比:
‘‘‘正常函数‘‘‘ def func(arg): return arg + 1 result = func(100) print result ‘‘‘lambda表达式‘‘‘ func2 = lambda a: a + 1 result = func2(10000) #这里调用函数的时候就是lambda表达式左边的等号就是他函数的调用! print result #执行结果: #101 #10001
内置函数 二
一、map
遍历序列,对序列中每个元素进行操作,最终获取新的序列。
解释:
在Python中,最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号——即元素的位置,也称为索引。第一个索引是 0,第二个则是 1,以此类推。序列中的最后一个元素标记为 -1,倒数第二个元素为 -2,一次类推。
Python包含 6 中内建的序列,包括列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。
‘‘‘例子1‘‘‘ li = [11,22,33] def func1(arg): return arg + 1 #这里乘除都可以 new_list = map(func1,li) #这里map调用函数,函数的规则你可以自己指定,你函数定义成什么他就做什么操作! print new_list 输出结果:[12, 23, 34] ‘‘‘例子2‘‘‘ li = [‘shuaige‘,‘nihao‘,] def func1(arg): return ‘%s test string‘ % arg #或者使用+进行拼接万恶的+能不用最好不用他会在内存中开辟新的空间! new_strlist = map(func1,li) print new_strlist 输出结果:[‘shuaige test string‘, ‘nihao test string‘] ‘‘‘例子3‘‘‘ li = ‘abcdefg‘ def func1(arg): return ‘%s test string‘ % arg new_list = map(func1,li) print new_list #结果:[‘a test string‘, ‘b test string‘, ‘c test string‘, ‘d test string‘, ‘e test string‘, ‘f test string‘, ‘g test string‘]
map例子
使用lambda表达式:
li = [11,22,33,44,55] new_li = map(lambda a:a + 100,li) print new_li #输出结果: [111, 122, 133, 144, 155] #多个列表操作: l1 = [11,22,33,44,55] l2 = [22,33,44,55,66] l3 = [33,44,55,66,77] print map(lambda a1,a2,a3:a1+a2+a3,l1,l2,l3) #输出结果: [66, 99, 132, 165, 198] #这里需要注意如果使用map函数列表中的元素必须是相同的才可以!否则就会报下面的错误! #TypeError: unsupported operand type(s) for +: ‘int‘ and ‘NoneType‘,如果看下面 l1 = [11,22,33,44,55] l2 = [22,33,44,55,66] l3 = [33,44,55,66,] #l3的数据少一个,如果元素里的元素为空那么他调用的时候这个元素就是None
lambda表达式
二、filter
对于序列中的元素进行筛选,最终获取符合条件的序列!
li = [11,22,33,44,55,66,77,88] print filter(lambda a:a>33,li) 输出结果:[44, 55, 66, 77, 88]
三、reduce
对于序列内所有元素进行累计操作
li = [1,2,3,4,5,6,7,8] result = reduce(lambda a1,a2:a1+a2,li) #累乘、除、加、减 print result # reduce的第一个参数,函数必须要有两个参数,因为他是两两进行操作 # reduce的第二个参数,要循环的序列 # reduce的第三个参数,初始值 #初始值 li = [1,2,3,4,5,6,7,8] result = reduce(lambda a1,a2:a1+a2,li,100000) #累乘、除、加、减 print result
默认参数:
yield生成器
yield和return的区别:
yield跳出函数后会记录当前函数的状态当下次调用的时候,从记录的状态开始!
return后将直接跳出函数!
1、对比range 和 xrange 的区别
>>> print range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> print xrange(10) xrange(10)
如上代码所示,range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。
看下下面的例子:(自定义生成器)
def mrange(arg): seed = 0 while True: seed = seed +1 if seed > arg: return else: yield seed for i in mrange(10): print i
冒泡算法
需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序
思路:相邻两个值进行比较,将较大的值放在右侧,依次比较!
冒泡算法原理图:
冒泡算法实例:
列表中有5个元素两辆进行比较,然后用中间值进行循环替换!
既然这样,既然这样我们还可以用一个循环把上面的循环进行在次循环,用表达式构造出内部循环!
li = [13,22,6,99,11] for n in range(1,len(li)): for m in range(len(li)-n): num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = num2 li[m+1] = temp print li
让的原理和下面一样:
li = [13,22,6,99,11] for m in range(4): #等价于:for m in range(len(li)-1) num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = num2 li[m+1] = temp print li for m in range(3): #等价于:for m in range(len(li)-2) num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = num2 li[m+1] = temp print li for m in range(2): #等价于:for m in range(len(li)-3) num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = num2 li[m+1] = temp print li for m in range(1): #等价于:for m in range(len(li)-4) num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = num2 li[m+1] = temp print li
冒泡算法原理
装饰器
装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作。
简单的来说在不修改原函数的情况下,在对原函数进行包装!
整理中。。。。。。。。。