一、三元运算(式)

对于一般简单的if else条件判断句可以用三元运算来表示

具体模式为:

if condition:  expr1else:  expr2等价于:expr1 if condition else expr2

解释:如果if condition条件成立就执行expr1表达式,否则就执行else expr2表达式

示例①

>>> if 2 == 2:...    name = 'cool'... else:...    name ='hot'... >>> name = 'cool' if 2==2 else 'hot'>>> print namecool>>>

二、lambda表达式:

对于简单的函数可以用另外一种方式来代替,即lambda

比如有如下函数:

>>> def fun(arg):...      return arg + arg... >>> >>> result = fun(100) >>> print result200>>>

定义一个变量f_lambda,将lambda arg:arg+1赋予f_lambda

>>> f_lambda = lambda arg:arg +1>>> result = f_lambda(111)>>> print result112>>>

也可以用其他表达式:

>>> test = lambda a:a**2>>> test_result = test(3)>>> print test_result9>>>

从上面的例子可以看出,lambda后面表达式可以随意定义,只要符合Python的语法要求。

lambda表达式:

①用于处理简单逻辑

②会自动返回数据

三、内置函数map

map的作用是对序列中每个元素进行操作,然后输出新的序列

>>> num1 = [10,9,8,7,6]>>> num2 = map(lambda a:a**2,num1)>>> print num2[100, 81, 64, 49, 36]>>> >>> num3 = [1,2,3,4,5]>>> num4 = map(lambda a,b:a -b,num1,num3)>>> print num4[9, 7, 5, 3, 1]>>>

或者

>>> num = [12,33,55,85]>>> def func(arg):...     return arg + 10... >>> new_num = map(func,num)>>> print new_num[22, 43, 65, 95]>>>

对于上述例子实质解释如下:

>>> new_num = []>>> for item in num:...     new_item = item + 10...     new_num.append(new_item)... >>> >>> print new_num[22, 43, 65, 95]

四、内置函数filter

filter的作用的是将序列中满足条件的过滤出来然后形成新的序列

>>> num1 = [10,9,8,7,6]>>> tmp = filter(lambda arg:arg >5,num1) >>> print tmp[10, 9, 8, 7, 6]>>>

或者

>>> tmp2 = filter(lambda n:n >5,num1)     >>> print tmp2[10, 9, 8, 7, 6]>>>

或者

#!/usr/bin/env python# -*- coding:utf8 -*-num = [11,22,0,33]print filter(None,num)[root@Python day004]# python lam.py [11, 22, 33][root@Python day004]# [root@Python day004]# cat  lam.py    #!/usr/bin/env python# -*- coding:utf8 -*-num = [11,22,0,33,""]print filter(None,num)[root@Python day004]# python lam.py  [11, 22, 33][root@Python day004]# cat  lam.py   #!/usr/bin/env python# -*- coding:utf8 -*-num = [11,22,0,33,"",False]print filter(None,num)[root@Python day004]# python lam.py  [11, 22, 33]

小结:从上可以发现,默认情况下,当用filter进行处理数据时,filter会将布尔值为真的输出(一般将布尔值为True的返回到新列表中,反之不会返回到新列表中),为假的忽略掉;当然filter中也可以传入函数,如上例中的lambda语句;

五、内置函数reduce

reduce的作用是对序列内的所有元素进行操作

>>> num1 = [10,9,8,7,6]                  >>> result =reduce(lambda arg1,arg2:arg1+arg2,num1)>>> print result40>>> num5 = [1,2,3,4,5,6]  >>> sum = reduce(lambda a,b:a+b,num5)>>> print sum21>>>

# reduce的第一个参数,函数必须要有两个参数

# reduce的第二个参数,要循环的序列

# reduce的第三个参数,初始值

六、yield生成器(它可以记住上一次的操作,下次再执行时,继续执行)

#!/usr/bin/env python# -*- coding:utf-8 -*-def func():    pass    return 1    return 2    return 3result = func()print result

执行以上代码,输出结果:

D:\Python27\python.exe C:/Users/ryan/PycharmProjects/day04/yield.py1Process finished with exit code 0

发现函数返回的只有1,后面的2、3都没有返回,这里说明return语句结束后,代表函数体生命周期结束,接下来讲return替换成yield

#!/usr/bin/env python# -*- coding:utf-8 -*-def func():    pass    yield 1    yield 2    yield 3for i in func():    print i

输出结果:

123

1、对比range和xrange的区别

有如下例子:

>>> print range(8)[0, 1, 2, 3, 4, 5, 6, 7]>>> print xrange(8)xrange(8)>>>

从上面可以发现,range和xrange的区别是:

range可以生成一个列表,即在内存中创建指定的数字,而xrange则不会,接着往下看:

>>> for n in xrange(8):...     print n... 01234567>>>

 

xrange只有在进行循环的时候才会创建数字,即在迭代的时候才会去创建;

>>> def nrange(num):...     temp = -1   ...     while True:...          temp = temp +1...          if temp >= num:...              return...          else:...              yield temp... >>> nrange(10)
>>>

2、文件操作的read和xreadlines的区别

①read会读取所有内容到内存中

②xreadlines则只会在循环迭代时才获取数据

def NReadlines():    with open('log','r') as f:        while True:            line = f.next()            if line:                yield line            else:                returnfor i in NReadlines():    print i

注:基于next自定义生成器NReadlines

def NReadlines():    with open('log','r') as f:        seek = 0        while True:            f.seek(seek)            data = f.readline()            if data:                seek = f.tell()                yield data            else:                returnfor item in NReadlines():    print item

基于seek和tell自定义生成器NReadlines

七、装饰器

装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或者类,使用装饰器可以在函数执行前和执行后添加相应的操作

def wrapper(func):    def result():        print 'before'        func()        print 'after'    return result @wrapperdef foo():    print 'foo'

import functoolsdef wrapper(func):    @functools.wraps(func)    def wrapper():        print 'before'        func()        print 'after'    return wrapper@wrapperdef foo():    print 'foo'

示例代码:

#!/usr/bin/env python#coding:utf-8 def Before(request,kargs):    print 'before'     def After(request,kargs):    print 'after'  def Filter(before_func,after_func):    def outer(main_func):        def wrapper(request,kargs):                         before_result = before_func(request,kargs)            if(before_result != None):                return before_result;                         main_result = main_func(request,kargs)            if(main_result != None):                return main_result;                         after_result = after_func(request,kargs)            if(after_result != None):                return after_result;                     return wrapper    return outer     @Filter(Before, After)def Index(request,kargs):    print 'index'          if __name__ == '__main__':    Index(1,2)