第五天 关于作用域和三个重要函数

作用域
例1、
    def test1():
        print('in the test1')
    def test():
        print('in the test')
    return test1()

    res = test()
    print(res)
>>> in the test
    in the test1
    None

例2、
name = "alex"
def foo():
    name = 'linhaifeng'
    def bar():
        name = 'wupeiqi'
        print(name)
    return bar
a = foo() 
print(a) #返回bar的地址
a() #执行bar

例3、
def foo():
    name = 'lhf'
    def bar():
        name = 'wupeiqi'
        print(name)
        def tt():
            print(name)
        return tt

    return bar
r1 = foo()
print(r1) #返回bar()的地址
r2 = r1()
print(r2)#返回tt()的地址
r3 = r2()
print(r3)#返回none



################匿名函数   lambda
匿名函数不嫩太复杂 一行搞定
例1、
def calc(x):
    return x+1
res = calc(10)
print(res)
>>>11

func = lambda x:x+1
print(func(10))
>>>11

函数式编程

编程方法论:面向过程:基本编程单位也是函数 分析过程 一步一步
                      
            函数式=编程语言定义的函数+数学意义的函数
                    特点:不使用变量、不修改变量
                        例1、def foo(n):
                                        print(n)
                                    def bar(name):
                                        print('my name is %s' %name)
                                    foo(bar('alex'))
                                    >>>my name is alex
                                        None
                    高阶函数:1、函数的参数为是一个函数名 2、返回名包含函数
                    尾递归:在最后一步调用函数
    三大内置函数    map函数:例1、num_1 = [1,2,3,4,5,6]     顺序不变 每个数据处理一遍

                            基础def map_test(array):
                                    ret = []
                                    for i in array:
                                        ret.append(i ** 2)
                                    print(ret)
                                    return ret
                                map_test(num_1)
                            
                                
                            高级    def add_one(x):
                                    return x+1
                                def map_test(func,array):
                                    ret = []
                                    for i in array:
                                        ret.append(func(i))
                                    print(ret)
                                    return ret
                                map_test(add_one,num_1)
                            终极def map_test(func,array):
                                    ret = []
                                    for i in array:
                                        ret.append(func(i))
                                    print(ret)
                                    return ret
                                map_test(lambda x:x+1,num_1)
                            map(func,array)  进行迭代 一个迭代器 得到一个可迭代的对象
                                print(list(map(lambda x:x+1,num_1)))
                    filter函数:筛选
                            初级def filter_test(array):
                                    ret = []
                                    for p in array:
                                        if not p.startswith('sb'):  #startswith
                                            ret.append(p)
                                    return ret
                                res = filter_test(moive_people)
                                print(res)
                                
                            高级def filter_test(func,array):
                                    ret = []
                                    for p in array:
                                        if not func(i):  #startswith
                                            ret.append(p)
                                    return ret
                                res = filter_test(moive_people)
                                print(res)
                            
                            终极print(list(filter(lambda n:n.startswith('sb'),moive_people))) #返回true 值
                            
                    reduce函数:num_list = [1,2,4,5]            一个序列转化为一个值
                                # def mutiple(x,y):
                                #     return x*y
                                def reduce_test(func,array,int=None):
                                    res =array.pop(0)
                                    if int!=None:
                                        for num in array:
                                            res = func(res, num)
                                        return res*int
                                    else:
                                        for num in array:
                                            res = func(res,num)
                                        return res
                                print(reduce_test(lambda x,y:x*y,num_list,7))    

                            from functools import reduce
                            print(reduce(lambda x,y:x+y,num_list))    
            
            
    map() 处理序列中每一个列表,得到的结果是一个迭代器,该迭代器元素个数及位置 与原来一样        
    filter()遍历序列中的每一个元素,判断每个元素得到布尔值,如果是    True则保留下来
        people = [
            {'name':'alex','age':1000},
            {'name':'wupeiqi','age':10000},
            {'name':'yuanhao','age':9000},
            {'name':'linhaifeng','age':18}
            ]
            print(list(filter(lambda p:p['age']<=18,people)))
    reduce    
            面向对象 

 

posted @ 2018-02-14 22:28  MrZY  阅读(137)  评论(0编辑  收藏  举报